单片机之电子时钟(带闹铃).doc_第1页
单片机之电子时钟(带闹铃).doc_第2页
单片机之电子时钟(带闹铃).doc_第3页
单片机之电子时钟(带闹铃).doc_第4页
单片机之电子时钟(带闹铃).doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字电子技术实验报告(一) 实验目的 学习 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 0000HMAIN: 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 ;两层外循环,每层循环500msSTART1: MOV R7,#10 ;10次内循环,10*50ms=500msSTART2: 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 DOLRETURN:RET ;返回DOL:MOV R4,#131 ;低音DO子程序DOL05:MOV TMOD,#11H MOV TL1,#21H MOV TH1,#0F9H SETB TR1WAIT1: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 TR1WAIT2: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 TR1WAIT3: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 TR1WAIT4: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 TR1WAIT5: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 TR1WAIT6: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 TR1WAIT7: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 TR1WAIT8: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 ;将数码管中显示的09分别对应的数存入TABLE开始的一段程序存储器中SETALARM:MOV 40H,R1 ;闹铃设定子程序,保存当前时间 MOV 41H,R2 MOV 42H,R3 MOV 43H,R4 MOV R1,50H ;将初始设定的闹铃时间赋给偏移量R1R4 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 NN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论