1、MSP430 单片机课程设计 实时时钟与键盘控制 一、 设计思路 该算法的流程简图如下: 由于 LCD 无法完全显示时间日期,故采用 page 翻页的方式设计,每页 6 位显示。设定 page 为奇数时表示当前在时间页面,page 为偶数时表示当前在日期页面。在修改时间时, 采用的是输入字符串进行修改的方式。 1、 显示当前时间 time=hour*10000+min*100+sec。 在 page 为偶数时,前两位显示小时,中间两位显示分钟,最低两位显示秒。 2、显示当前日期 date=year*10000+mon*100+day,并能与时间切换。 在 page 为奇数时,前两位显示年份,中
2、间两位显示月份,最低两位显示天。 键盘上的 up、down 修改 page 的值,实现两页显示的切换。 2、 能够读取键盘值进行修改 键盘通过中断的方式读取键值,每个键都有相应的操作。具体的方案如下: 键值在 0F 之间为对应的十六进制数。 按下 UP 键,page 加 1。 按下 DOWN 键,page 加 1,以上两键能使 page 奇偶变化。 按下 L 键,p 加 1,用于修改数据时修改位置的更改。 按下 R 键,p 减 1,用于修改数据时修改位置的更改。 按下 ESC 键,使 set 置 1,进入修改模式,并在首位显示 E。 按下 START 键,修改的数据生效,set 置 0。 按下
3、 STOP 键,取消修改,set 置 0,清除首位显示。 按下 ENTER 键,确认当前位的修改,注意是单个位的修改。 3、 体现 430 系列单片机的超低功耗的特性。 在中断处理结束,以及循环结束,或者等待键盘按键时,会进入低功耗工作模式,同时 编程时也尽量减少函数的调用,并将一些变量定义为寄存器变量,提高运行效率。 二、参数计算 设计时钟时,应能做到分秒的 60 进 1,时的 24 进 1 ,年以两位数表示满 100 进 1 , 月满 12 进 1;关于天的计数较为复杂:先根据年月判断该月的最大天数,实现进位。 三、编程步骤 1、编写时间显示函数,测试以确认函数功能正常。 2、设置初始值为
4、 04 年 2 月 28 日。利用定时器 A 控制秒信号的自加,并用 LCD 显示判断算 法是否正确。 3、已经得到正确的秒信号,根据算法实现时间的进位。 4、设计键盘,使键盘能正确输入,读取键值。 5、设计翻页功能,实现时间和日期的切换。 6、设计时间的修改功能,以串输入修改数据的形式进行修改。 7、程序存档,测试检验基本功能。 8、优化程序算法,精简变量与函数调用,实现超低功耗,测试检验,提交最后成果。 四、实践感受 五、源程序 /实时时钟+键盘控制(串输入修改方式) #include #include /定义液晶显示笔画 #define a (0x01) #define b (0x02)
5、 #define c (0x10) #define d (0x08) #define e (0x40) #define f (0x20) #define g (0x04) /#define h (0x80) /显示字符的指针 const unsigned char LCD_Tab = a+b+c+d+e+f ,/显示 “0“, LCD_Tab00 b+c ,/显示 “1“, LCD_Tab01 a+b+d+e+g ,/显示 “2“, LCD_Tab02 a+b+c+d+g ,/显示 “3“,LCD_Tab03 b+c+f+g ,/显示 “4“, LCD_Tab04 a+c+d+f+g ,/显示
6、 “5“, LCD_Tab05 a+c+d+e+f+g ,/显示 “6“, LCD_Tab06 a+b+c ,/显示 “7“, LCD_Tab07 a+b+c+d+e+f+g ,/显示 “8“, LCD_Tab08 a+b+c+d+f+g ,/显示 “9“, LCD_Tab09 a+b+c+e+f+g ,/显示 “A“, LCD_Tab0A c+d+e+f+g ,/显示 “b“, LCD_Tab0B a+d+e+f ,/显示 “C“,LCD_Tab0C b+c+d+e+g ,/显示 “d“, LCD_Tab0D a+d+e+f+g ,/显示 “E“, LCD_Tab0E a+e+f+g ,/显示 “F“, LCD_Tab0F 0 ,/显示 “ “, LCD_Tab10 ; /定义时钟 2004-02-28 23:59:53 uns