微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟

基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟

时间:11-18 来源:互联网 点击:

GPIO_init(UINT8 GPIO_num); 将管脚初始为GPIO功能

void GPIO_inout(UINT8 GPIO_num,UINT8 in_out); 设置GPIO为输入或者输出

UINT8 GPIO_READ(UINT8 GPIO_num); 读出GPIO当前的状态

void GPIO_SET(UINT8 GPIO_num,UINT8 High_Low); GPIO初始化后置1或者置0

定时器的初始化模块:

该程序中使用了3个定时器,定时器0、1、2。定时器0设置为PWM输出模式,产生2kHZ的方波,用于驱动无源蜂鸣器,当设置的闹钟时间和当前时间匹配时,将定时器0启动,产生方波驱动蜂鸣器发出响声提醒。

定时器1用于时间计数,即当前时钟的计时器,它设置为1秒钟产生一次中断,其中断程序分配为最高的优先级,当一秒的定时时间到时,在服务程序中首先清除中断标志位,然后秒变量进行自加1(miao++),另外还进行秒闪烁标志位(g_Dot)的取反标志,使秒标志位能够闪烁。

定时器2的初始化有多个功能。定时器2的优先级是次于定时器1的,定时器设置为5毫秒产生一次中断,首先是用于四位八段LRD的动态扫描显示,使四位数码管的刷新频率为50Hz,另外是10mS的标志位(time10)自加1,当10mS标志位计时时间到时,就执行一次键盘扫描程序,即10个独立键盘每10mS被扫描一次。最后是清除中断标志位,通知中断服务程序结束。

时间更新子函数模块:

该函数主要是对当前时间的处理,定时器1对秒变量进行了计数,而此程序就是对时分秒年月日变量的值进行判断和限制,使其超过最大值后对其进行归零,比如分秒的值不能大于59,时的最大值为23。大小月以及二月份天数的处理是通过调用UINT8 yue_deal()这个函数实现的。该函数主要是使用一个switch case 语句,对大月份返回一个值31,小月份返回30,另外通过调用UINT8 nian_deal()来判断是平年还是闰年,闰年返回29,平年返回28。具体的程序见附录。

数码管动态显示模块程序:

四位数码管的刷新频率为50Hz,即一位显示时间为(1∕50×4)即5mS,用定时器2每5ms产生一次中断进行刷新,每次中断产生时只将一位数码管的位选端点亮,用void Refresh_LED(UINT16 dat)函数实现这一功能,由于数码管的笔段码输入端接的是8位移位寄存器74HC164,故需要使用移位将笔段码送到数码管笔段输入端。

注:显示程序负责当前时间的显示和闹钟设置时的显示内容,需要改变的是将要显示的数值用变量display进行保存成为十进制的四位数。

键盘扫描程序:

如果10毫秒定时时间到的标志位有效,就进入键盘扫描的子程序UINT8 GetKey()中。通过查找资料,该部分的程序设计采用的是状态机的思想,用如下图所示,其中系统的输入信号是与按键连接的I/O口电平,“1”表示按键处于开放状态,“0”表示按键处于闭合状态。而系统的输出信号则表示检测和确认到一次按键的闭合操作,用“1”表示。

上图给出了一个简单按键状态机的状态转换图。在图中,将一次按键完整的操作过程分解为3个状态,采用时间序列周期为10ms。下面对该图做进一步的分析和说明,并根据状态图给出软件的实现方法。首先,要充分体会时间序列的作用。在这个系统中,采用的时间序列周期为10ms,它意味着,每隔10ms检测一次按键的输入信号,并输出一次按键的确认信号,同时按键的状态也发生一次转换。图中“状态0”为按键的初始状态,当按键输入为“1”时,表示按键处于开放,输出“0”(1/0),下一状态仍旧为“状态0”。当按键输入为“0”,表示按键闭合,但输出还是“0”(0/0)(没有经过消抖,不能确认按键真正按下),下一状态进入“状态1”。“状态1”为按键闭合确认状态,它表示了在10ms前按键为闭合的,因此当再次检测到按键输入为“0”时,可以确认按键被按下了(经过10ms的消抖),输出“1”表示确认按键闭合(0/1),下一状态进入“状态2”。而当再次检测到按键的输入为“1”时,表示按键可能处在抖动干扰,输出为“0”(1/0),下一状态返回到“状态0”。这样,利用状态1,实现了按键的消抖处理。“状态2”为等待按键释放状态,因为只有等按键释放后,一次完整的按键操作过程才算完成。从对上图的分析中可以知道,在一次按键操作的整个过程,按键的状态是从“状态0”->“状态1”->“状态2”,最后返回到“状态0”的。并且在整个过程中,按键的输出信号仅在“状态1”时给出了唯一的一次确认按键闭合的信号“1”(其它状态均输出“0”)。所以上面状态机所表示的按

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top