单片机 电子时钟实验报告.docx
《单片机 电子时钟实验报告.docx》由会员分享,可在线阅读,更多相关《单片机 电子时钟实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
单片机电子时钟实验报告
电子时钟设计实验报告
姓名:
学号:
班级:
指导老师:
一、实验基本要求
利用定时计数器,设计一个电子时钟,使用前面使用过的显示子程序。
从左到右依次显示时分秒。
有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送显示缓冲区。
另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。
进而要求:
1.加入时间调整程序,使用两个或三个按钮,调节当前的时间。
类似平常使用的电子表。
可以让正在调整的位闪烁显示。
2.可以加入一个闹钟钟设置,当所定的时间到时,产生断续的蜂鸣声。
可以加入日历的功能。
二、最终实现的功能
1、日历(年、月、日)显示与数值的修改
2、时钟(时分秒)显示及数值的修改
3、闹钟设定及数值的修改、到时响铃
4、秒表计时及秒表重置
三、设计核心思想
程序设计中设置定时器0作为基本时钟,中断每50ms进入一次,每20次中断即1秒,秒加一,在中断服务程序中执行60秒进位、60分进位。
通过独立式键盘,进行各项数值调整、定时器开启和暂停以及重置。
各个功能在分立的子函数中实现,在主函数中进行调用,结构清晰。
四、设计亮点
1、按键功能通过“按下时间的长短”丰富
在按键消抖结束后,再次判断按键按下的同时,记录按下时间的长短。
短按实现数值的修改、计时暂停及启动,长按实现模式的切换和重置。
2、闹铃设置为一段音乐
通过查阅网上资料,将蜂鸣器的响声富有变化,从而实现一段有旋律的音乐。
3、函数独立
设计的程序中包含以下函数模块:
延时、初始化、时间(日历、闹钟)显示、键盘扫描、秒表显示、定时器0中断函数(时钟)、定时器1中断(秒表)、音乐、闹钟及主函数。
4、各功能的实现采用模块化处理
模式1:
时钟显示;模式2:
日历显示;模式3:
秒表显示;模式4:
闹钟显示。
五、实验中的问题总结
LED数码管显示部分小结:
(1)要设置段选(P2.6)和位选(P2.7)。
(2)段选和位选需按照书上讲的逻辑编写。
虽然P0口作为段选,P2口作为位选,但是程序设计中位选时要将值赋给P0口(打开位选→赋位选→关闭位选)。
网上很多实验报告的代码位选是P2=0X**,但我在实际操作中发现,如果位选值赋给P2口,数码管的显示会出现不规则跳变,具体原因不清楚。
段选可以赋值给P0口(打开段选→赋段选→关闭段选)。
六、实验心得
本次实验设计历时10天,初期设计并不顺利,因为设计的构思实际操作障碍重重。
通过上网查阅电子时钟的资料,自学C51编程,结合汇编语言的部分想法,自主设计了程序框架。
显示函数借鉴了网上经验,通过自己的实际操作进行了一定的修改,使其切实可行。
键扫描函数根据教材提供的程序进行相应的设计,并根据自己查阅的C51书籍进行了相应的功能扩充。
程序编写过程中,充分结合了自己的所学知识,将程序设计为模块化,主函数简洁清晰,体现了高级语言的特点。
本次实验的程序烧录达200多次,因为一些原因无法进行debug,所以非语法错误的BUG均为自己调试,本次实验成果来之不易。
在未来的学习过程中依旧要坚持不懈的努力,成功只属于那些坚持到底的人。
七、实验程序及说明
【全局变量定义及部分函数的声明】
说明:
“歌曲音调”“歌曲节奏”曲子网络
【各项内容初始化】
【延时函数】
【时间、日历、闹钟显示函数】
【秒表显示函数】
说明:
因为秒表显示的数字位数(分钟、十秒、秒、毫秒)和时钟(时分秒)不同,故需要分成两个显示函数。
【定时器0中断函数(时钟)函数】
【定时器1中断(秒表)函数】
【蜂鸣器音乐及闹钟函数】
【键盘扫描函数】
说明:
长短按键的实现通过判断length和flag标志。
即Length满足一定时长后,转移到相应的模式;若按下时间不满足判断条件,则视为“短按”,执行短按的相应功能。
独立式键盘从左到右将键盘编号为1~4。
按键1:
短按——时钟、秒表停时及启动;长按——转至模式0(时钟模式)。
按键2:
短按——秒(时钟和闹钟)、天数值调整;长按——返回上一模式(若为模式0,则无上一模式)。
按键3:
短按——分(时钟和闹钟)、月数值调整;长按——进入下一模式(若为模式0,则下一模式为模式1,即日历显示)。
按键4:
短按——时(时钟和闹钟)、年的数值调整;长按——秒表重置。
【主函数】