收藏 分销(赏)

单片机之电子时钟(带闹铃).doc

上传人:仙人****88 文档编号:11959082 上传时间:2025-08-22 格式:DOC 页数:8 大小:98KB 下载积分:10 金币
下载 相关 举报
单片机之电子时钟(带闹铃).doc_第1页
第1页 / 共8页
单片机之电子时钟(带闹铃).doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
数字电子技术实验报告 (一) 实验目的 学习 8051定时器时间计时处理、按键扫描及 LED数码管显示的设计方法。 (二) 设计任务及要求 利用实验平台上 4 个 LED数码管, 设计带有闹铃功能的数字时钟,要求: 1. 在 4 位数码管上显示当前时间。显示格式“时时分分” 2. 由 LED闪动做秒显示。 3. 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发 出声响,按停止键使可使闹玲声停止。 (三)工作原理及设计思路 利用单片机定时器完成计时功能,定时器 0 计时中断程序每隔 5ms 中断一次并当作一个计数,每中断一次计数加 1,当计数 200 次时,则表示 1s 到了,秒变量加 1,同理再判断是否 1min 钟到了,再判断是否 1h 到了。为了将时间在 LED 数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现 LED显示。其显示电路如图 1 闹铃声由交流蜂鸣器产生,电路如图 2,当 P1.7 输出不同频率的方波,.蜂鸣器便会发出不同的声音。 (四)设计方案 1.软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。 2.数码管显示: 方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。 方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。 从节省I/O口和降低能耗出发,本设计采用方案二。 (五)源程序 ORG 0000H MAIN: CLR EA ;程序初始化 CLR PSW.3 ;选择寄存器组0 CLR PSW.4 MOV TMOD,#10H ;定时器1,方式1,定时方式 MOV 50H,#00H ;闹铃初始时间 08:00 MOV 51H,#00H ;分别对应分的低、高位,时的低、高位 MOV 52H,#08H MOV 53H,#00H MOV R0,#00H ;设置时间初值 07:59 MOV R1,#09H ;分别对应分的低、高位,时的低、高位 MOV R2,#05H MOV R3,#07H MOV R4,#00H CLR TF1 ;清标志 START: ACALL ALARM ;判断是否闹铃 MOV R5,#02H ;两层外循环,每层循环500ms START1: MOV R7,#10 ;10次内循环,10*50ms=500ms START2: ACALL DELAY ;调用延时 10ms ACALL DISPLAY ;调用延时 40ms M0: JB P3.2,M1 ;是否设闹铃,查询3.2口,为一转到M1,为0设置闹铃 ACALL SETALARM M1: JB P3.3,M2 ;是否设时间 ACALL SETCLOCK M2: DJNZ R7,START2 ;R7减1循环 CPL P1.2 ;每500ms给P1.2一个正负交替的电平信号 DJNZ R5,START1 ;R5为2,循环两次后为1s INC R0 ;R0加1 CJNE R0,#60,START ;判断R0为60,跳转 MOV R0,#00H ;R0清零 M3: CJNE R1,#09H,L1 ;时间逻辑,如果为23:59分,则全部清零 CJNE R2,#05H,L2 CJNE R4,#02H,L3 CJNE R3,#03H,L4 MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H AJMP START L1: INC R1 ;上面的几个分支 AJMP START L2: INC R2 MOV R1,#00H AJMP START L3: CJNE R3,#09H,L4 INC R4 MOV R3,#00H MOV R2,#00H MOV R1,#00H AJMP START L4: INC R3 MOV R2,#00H MOV R1,#00H AJMP START DISPLAY: MOV DPTR,#TABLE ;显示子程序,把TABLE的首地址送给DPTR MOV A,R1 ;将偏移量给A MOVC A,@A+DPTR ;将对应地址中的量给A ACALL BIT1 ;显示第一个字节,也就是分的低位 MOV A,R2 ;显示第二个字节,分的高位 MOVC A,@A+DPTR ACALL BIT2 MOV A,R3 ;显示第三个字节,时的低位 MOVC A,@A+DPTR ACALL BIT3 MOV A,R4 ;显示第四个字节,时的高位 MOVC A,@A+DPTR ACALL BIT4 RET BIT1: MOV R6,#08H ;显示第一个字节(分的低位)的子程序 LOOP1: RLC A ;A带进位左移,移出的最高位存到C中 MOV P1.0,C ;把C的值给P1.0口 CLR P1.1 ;在P1.1产生一个上升沿,将P1.0的值输入 SETB P1.1 DJNZ R6,LOOP1 ;8次循环,输入第一个字节8段的值 CLR P1.3 ;给P1.3一个低电平,点亮分的低位对应的数码管 ACALL DELAY ;延时 5ms SETB P1.3 ;置位 RET BIT2: MOV R6,#08H ;显示第二个字节(分的高位)的子程序 LOOP2: RLC A MOV P1.0,C CLR P1.1 SETB P1.1 DJNZ R6,LOOP2 CLR P1.4 ACALL DELAY SETB P1.4 RET BIT3: MOV R6,#08H ;显示第三个字节(时的低位)的子程序 LOOP3: RLC A MOV P1.0,C CLR P1.1 SETB P1.1 DJNZ R6,LOOP3 CLR P1.5 ACALL DELAY SETB P1.5 RET BIT4: MOV R6,#08H ;显示第四个字节(时的高位)的子程序 LOOP4: RLC A MOV P1.0,C CLR P1.1 SETB P1.1 DJNZ R6,LOOP4 CLR P1.6 ACALL DELAY SETB P1.6 RET ALARM: MOV A,R1 ;闹铃判断子程序,判断闹铃是否与时间各位相等 CJNE A,50H,RETURN ;分别判断,若不等则跳出 MOV A,R2 CJNE A,51H,RETURN MOV A,R3 CJNE A,52H,RETURN MOV A,R4 CJNE A,53H,RETURN MOV R6,#03H MING: LCALL DOL ;若各位都相等,则驱动闹铃,响音乐 LCALL DOL LCALL SOL LCALL SOL LCALL LA LCALL LA LCALL SOL LCALL SOL LCALL FA LCALL FA LCALL MI LCALL MI LCALL RE LCALL RE LCALL DOL RETURN:RET ;返回 DOL:MOV R4,#131 ;低音DO子程序 DOL05:MOV TMOD,#11H MOV TL1,#21H MOV TH1,#0F9H SETB TR1 WAIT1:JNB TF1,WAIT1 CLR TF1 CPL P1.7 DJNZ R4,DOL05 RET ;返回 RE:MOV R4,#147 ;RE子程序 RE05:MOV TMOD,#11H MOV TL1,#0E1H MOV TH1,#0F9H SETB TR1 WAIT2:JNB TF1,WAIT2 CLR TF1 CPL P1.7 DJNZ R4,RE05 RET ;返回 MI:MOV R4,#165 ;MI子程序 MI05:MOV TMOD,#11H MOV TL1,#8CH MOV TH1,#0FAH SETB TR1 WAIT3:JNB TF1,WAIT3 CLR TF1 CPL P1.7 DJNZ R4,MI05 RET ;返回 FA:MOV R4,#179 ;FA子程序 FA05:MOV TMOD,#11H MOV TL1,#0D8H MOV TH1,#0FAH SETB TR1 WAIT4:JNB TF1,WAIT4 CLR TF1 CPL P1.7 DJNZ R4,FA05 RET ;返回 SOL:MOV R4,#192 ;SOL子程序 SOL05:MOV TMOD,#11H MOV TL1,#68H MOV TH1,#0FBH SETB TR1 WAIT5:JNB TF1,WAIT5 CLR TF1 CPL P1.7 DJNZ R4,SOL05 RET ;返回 LA:MOV R4,#220 ;LA子程序 LA05:MOV TMOD,#11H MOV TL1,#0E9H MOV TH1,#0FBH SETB TR1 WAIT6:JNB TF1,WAIT6 CLR TF1 CPL P1.7 DJNZ R4,LA05 RET ;返回 XI:MOV R4,#247 ;XI子程序 XI05:MOV TMOD,#11H MOV TL1,#5BH MOV TH1,#0FCH SETB TR1 WAIT7:JNB TF1,WAIT7 CLR TF1 CPL P1.7 DJNZ R4,XI05 RET ;返回 DOH:MOV R4,#255 ;高音DO子程序 DOH05:MOV TMOD,#11H MOV TL1,#8FH MOV TH1,#0FCH SETB TR1 WAIT8:JNB TF1,WAIT8 CLR TF1 CPL P1.7 DJNZ R4,DOH05 RET ;返回 TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H RET ;将数码管中显示的0~9分别对应的数存入TABLE开始的一段程序存储器中 SETALARM:MOV 40H,R1 ;闹铃设定子程序,保存当前时间 MOV 41H,R2 MOV 42H,R3 MOV 43H,R4 MOV R1,50H ;将初始设定的闹铃时间赋给偏移量R1~R4 MOV R2,51H MOV R3,52H MOV R4,53H ACALL DISPLAY ;显示闹铃时间 KS: JB P3.4,LK0 ;闹铃设置逻辑,当P3.4口为低电平时,设定分(LK0为DISPLAY子程序) CJNE R1,#09H,LL0 ;当P3.4口为低电平时,不断加一,低位为9时,进位 MOV R1,#00H CJNE R2,#05H,LL1 MOV R2,#00H ;当为59分时,清零 AJMP LK0 LL1: INC R2 AJMP LK0 LL0: INC R1 LK0: ACALL DISPLAY ;设定一次显示一次时间 JB P3.5,LK1 ;P3.5口为低电平时,设定时(LK1为子程序) CJNE R4,#02H,KK0 CJNE R3,#03H,KK1 MOV R3,#00H ;当时为23时,清零 MOV R4,#00H AJMP LK1 KK1: INC R3 AJMP LK1 KK0: CJNE R3,#09H,KK1 MOV R3,#00H INC R4 AJMP LK1 LK1: ACALL DISPLAY ;设定结束,显示设定时间 JNB P3.2,KS ;当控制闹铃设置的P3.2口变为高电平时,退出设定 MOV 50H,R1 ;保存闹铃时间 MOV 51H,R2 MOV 52H,R3 MOV 53H,R4 MOV R1,40H ;恢复时间 MOV R2,41H MOV R3,42H MOV R4,43H ACALL DISPLAY ;显示时间 RET SETCLOCK:JB P3.4,MN0 ;用P3.4口设定分,原理同闹铃设定,低电平有效 CJNE R1,#09H,MM0 MOV R1,#00H CJNE R2,#05H,MM1 MOV R2,#00H AJMP MN0 MM1: INC R2 AJMP MN0 MM0: INC R1 MN0: ACALL DISPLAY JB P3.5,MN1 ;用P3.5口设定时,低电平有效 CJNE R4,#02H,NN0 CJNE R3,#03H,NN1 MOV R3,#00H MOV R4,#00H AJMP MN1 NN1: INC R3 AJMP MN1 NN0: CJNE R3,#09H,NN1 MOV R3,#00H INC R4 AJMP MN1 MN1: ACALL DISPLAY JNB P3.3,SETCLOCK ;若P3.3口仍处于低电平,继续处于时间设定状态 RET DELAY1: MOV TH1,#0ECH ;5ms延时子程序 MOV TL1,#78H ;赋初值60536,实现5000次计数,历时5ms CLR TF1 SETB TR1 WAIT: JNB TF1,WAIT RET DELAY:ACALL DELAY1 ACALL DELAY1 RET END 8
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服