![[信息与通信]基于单片机的电子日历时钟.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-2/23/0ff00151-c9ff-4083-9937-a8e2130a3216/0ff00151-c9ff-4083-9937-a8e2130a32161.gif)
![[信息与通信]基于单片机的电子日历时钟.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-2/23/0ff00151-c9ff-4083-9937-a8e2130a3216/0ff00151-c9ff-4083-9937-a8e2130a32162.gif)
![[信息与通信]基于单片机的电子日历时钟.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-2/23/0ff00151-c9ff-4083-9937-a8e2130a3216/0ff00151-c9ff-4083-9937-a8e2130a32163.gif)
![[信息与通信]基于单片机的电子日历时钟.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-2/23/0ff00151-c9ff-4083-9937-a8e2130a3216/0ff00151-c9ff-4083-9937-a8e2130a32164.gif)
![[信息与通信]基于单片机的电子日历时钟.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-2/23/0ff00151-c9ff-4083-9937-a8e2130a3216/0ff00151-c9ff-4083-9937-a8e2130a32165.gif)
已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理课程设计报告 题目:电子日历时钟 学 院 电子与信息学院 专 业 08信息工程1班 组 员 陈晓伟05 冯劲增06 指导教师 林耀荣 提交日期 2010.6.21 一 课程设计题目:电子日历时钟二 实现的功能:基本功能:(1)显示北京时间,并且能够校准时间;(2)程序使用汇编语言;(3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期;发挥功能:(5)运动秒表;(6)闹钟功能;(7) 自动整点报时。三 课程设计的目的:课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。四、设计方案说明1、硬件部分(1) 采用6位LED数码管显示日期或者时间。(2) 显示器的驱动采用 “动态扫描驱动”, 且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹钟设置状态;(3) 电路连接使用PCB,使电路连接简洁美观2、软件部分(1) “时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不能超过16位定时器的最长定时时间;最短不能少于中断服务程序的执行时间。基准时间越短,越有利于提高时钟的运行精确度。基准时间定为0.05秒。(2) 用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理进行“分”“时”定时,以及“日”“月”“年”定时。(3) LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间短),而驱动信号的间歇时间必须小于“余辉时间”(电流大余辉时间长),但驱动电流大小受硬件电路能力和LED数码管极限功耗的制约。(4) 动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容写入显示器之前将所有的LED数码管熄灭。(5) 关于自动识别“月大月小”和“平年润年”问题的考虑a) 月大和月小 2月另外计算;4月6月9月11 月为月小30天,其余为月大31天。b) 平年和润年(年号能被4整除的就是润年)平年的2月为28天;润年的2月为29天。五、使用说明 实物图请参照后面附带图片,从左至右为按键K2,K1,K0,以两个LED显示器为一组,左中右显示时分秒或者年月日,还有闹钟和秒表K2:复位 K1:设置闪烁 K0:切换时间/日期或者调整时间/日期初始状态:接上电源之后,日期默认为10年6月21日,时间为0时0分秒,闹钟2点整但默认关闭,秒表为0状态(1)显示状态切换:不断按K0键就会依次循环显示下面的状态初始状态时间日期闹钟时间闹钟状态秒表状态(2)调节时间,日期:按K0键切换到想要调节的显示状态,再按K1键选择要修改的位,不断按K1键会按左闪烁.中闪烁.右闪烁.确定.四个状态切换,闪烁的位可以修改,按K0键可以实现增加,不能递减,例如要调慢时间要按到循环到较慢时间。(3)闹钟使用:闹钟默认响的时间为一分钟,闹钟的时间设置同时间日期的调节,只需把状态切换到闹钟时间的状态,闹钟的开关先按K0键切换到屏幕显示为OFF的状态,如下:再按K1可切换到开状态,如下图,再按K1可关闭,不断循环(4) 秒表:K0键按4下就可切换到秒表状态,出示为0,此时按下K1键就可开始计时,再按一下K1键可停止,此时K1为秒表开关,按K0键可再切换显示其他。六、硬件连接图1、原理图2、pcb图3、实物图七、程序流程图:1. 主程序主程序系统初始化整点?闹钟到?提示音闹铃提示音NNYY2. 定时器0中断子程序定时器0中断子程序保护现场重载计数初值秒表?秒表模块到1秒?秒加1或向前进位恢复现场中断返回YYNN3. 外部中断0子程序外部INT0中断带显示延时消抖调整模式有闪烁?切换显示模式时间调整调整时间?调整日期?调整闹钟?日期调整秒表模式?日期、闹钟、闹钟设置、秒表显示循环切换闹钟调整进入秒表中断退出YNNYYNNNYYYY保护Psw、A寄存器恢复psw、A寄存器初始化秒表后台计时?YNN提示音滴Key1按下?4. 外部中断1子程序外部INT1中断保护psw、A寄存器带显示延时Key0按下?秒表模式?设置闹钟?暂停/继续计时打开/关闭闹钟闪烁循环切换滴一声提示闪烁切换模式恢复psw、A寄存器退出中断YYYNNN八、性能测试与故障排查1、硬件部分问题:断路。现象:程序下载完之后可以工作但是6个LED显示器有2个没亮。分析:因为其他几个显示器完全正常,这两个则完全没亮,所以推断是位选的线路出故障。检测:用万用表测试各点电压,着重测试两条位选线路的断路与短路情况,最终发现两处断路。解决:焊锡接上,最终全亮2、软件部分偶数组实现基础功能的程序老师已经提供,该程序基本没有多大的问题,就是里面的几个参数需要修改,同时还有一个小bug。修改一:由于提供的程序所默认采取的晶振计数频率是6MHz,但是所提供的现实原件则是12MHz,所以根据晶振的不同,定时器的定时时间变为0.05s。按照该程序直接跑的话,计数时间为0.5s。这就需要设置计数次数TICK_CNT为#14H,即0.05s*20=1s。代码段:MOVTICK_CNT,#14H修改二:程序默认设置的外部中断延时过短,导致操作过于“灵敏”,也即按键K0、K1按下时,跳变过快。这里所说的延时是中断子程序EX0_INT和EX1_INT中的语句LCALLDIS_DELAY。解决这个情况只需修改DELAY 次数,则DIS_DELAY:MOVD_CNT_DIS,#10H。修改三:观察实物电路工作发现每一位:LED数码管的小数点都是亮的,没有起到用小数点区分时间/日期中的时分秒/年月日。要解决这个问题,在显示子程序中TSA代码段的MOV Rx A前插入语句ADD A,#80H(x=1、2、4、6)。以及加上发挥部分的拓展功能:秒表和闹钟。九、原件清单品名型号数量LED七段数码管共阳BS6三极管S85507电阻3k8电阻2009电阻4.7k1微型按钮4脚3瓷片电容30p2电解电容10uf1晶体振荡器12MHz1小型蜂鸣器自发声1排针无6ICAT89S521IC74LS2441IC座40脚1IC座20脚1十、心得体会与总结这个学期做了两个与汇编有关的课程设计(不过这次是大作业),一次是开学初的微机原理课程设计,还有就是这次单片机原理大作业。上次基本上只与程序打交道,硬件部分实操不多。而这次大作业则是硬件、软件两方面都有兼顾,且两者所花的时间也都不少。虽然从老师那已经获取了原理图和程序,但这是我们第一次比较系统的从熟悉软件操作到软硬件设计了解整个流程。硬件部分,由于先前我们都没有操作过protel之类的软件,所以一切从零开始,针对这次大作业需要,学习了protel软件的基本操作、原理图的绘制修改、原件的封装以及原件集成库的创建,当然还有PCB板的排线。之后就是PCB图打印,电路板热压制、腐蚀、钻孔,元器件的焊接。流程很简洁,过程很纠结。我们一步一个脚印地制作着,生怕哪个步骤出错而导致前功尽废。不过在我们不懈努力下终于走完。但是焊接的不仔细两个电阻虚焊,使后来电路出现问题,也排查了好久,需要记住教训。软件部分,虽然老师已经给了具备基本功能的程序,但是仍需看懂弄懂,后期才能更好地发现问题以及修改添加功能。我发现这个过程也并非一件易事,清楚认识每一句的作用也需要经常查阅书籍。另外在硬件焊接已经实现后我们把两者结合在一起,通过下载器把程序烧进52单片机中实现既定功能,发现上面故障排查中出现的问题,继而针对每个问题分别从软硬件寻找解决方法,这个过程我认为收获更大,能让我们更清楚熟悉软硬件两者的运作方法。而且我俩分工是按硬件、软件而分的,自个儿认为分工尚算明确,各司其职。十一、程序附录;wahaha.asm; (Electronic Calendar and Clock); Reference for Grade 2008, s.c.u.t.; Key0(for shift/adjust) connected to INT1; Key1(for un-flash/flash) connected to INT0; 学生姓名:陈晓伟、冯劲增; 学生学号:200830240144,200830240229; 分组编号:004;变量定义TICK_CNTEQU20H ;T0倍乘;-SECOND_BCDEQU21H ;时间记录MINUTE_BCDEQU22HHOUR_BCDEQU23HDAY_BCDEQU24H ;日期记录MONTH_BCDEQU25HYEAR_BCDEQU26H;-FLASH_FLAGEQU27H ;是否闪烁DIS_FLAG EQU R7 ;当前显示内容标志 ;DIS_FLAG: 0时间;1日期;2-闹钟;3-闹钟开关;4-秒表;-NSECOND_BCDEQU2BH ;闹钟时间NMINUTE_BCDEQU2CHNHOUR_BCDEQU2DH;-TCC_BCDEQU2EH ;秒表计时器TBB_BCDEQU2FHTAA_BCDEQU30H;-TIMER_FLAG EQU 31H ;秒表模式TIMER_START_FLAG EQU 32H ;秒表开始;-ALAM_STATE EQU 33H ;闹钟开启标志;-DI_40H EQU 34H ;提示音延时变量DI_41H EQU 35H ;延时;-ALAM_ON1 EQU 36H;闹钟状态显示ALAM_ON2 EQU 37HALAM_ON3 EQU 38HALAM_OFF1 EQU 39HALAM_OFF2 EQU 3AHALAM_OFF3 EQU 3BH;-;中断向量表ORG0000HLJMPMAINORG0003HLJMPEX0_INT; port INT0ORG000BHLJMPT0_INT; port T0ORG0013HLJMPEX1_INT; port INT1;主程序ORG 0030HMAIN:NOP; main program;初始化堆栈MOVSP,#60H;初始化变量MOVSECOND_BCD,#00H; BCD of secondMOVMINUTE_BCD,#00H; BCD of minuteMOVHOUR_BCD,#00H; BCD of hour MOVNSECOND_BCD,#00H ;闹钟BCD of secondMOVNMINUTE_BCD,#00H;闹钟 BCD of minuteMOVNHOUR_BCD,#06H;闹钟BCD of hour MOVTCC_BCD,#00H; 秒表BCD of second MOVTBB_BCD,#00H; 秒表BCD of minute MOVTAA_BCD,#00H; 秒表BCD of hour MOV TIMER_START_FLAG,#00H ;秒表工作标志MOV TIMER_FLAG,#00H ;秒表模式标志MOVDAY_BCD,#21H; BCD of dayMOVMONTH_BCD,#06H; BCD of monthMOVYEAR_BCD,#010H; BCD of yearMOVFLASH_FLAG,#00H; flag for un-flash/flashMOVDIS_FLAG,#00H; flag for shift(time/date)MOV ALAM_ON1,#55H; BCD OFF 闹钟状态显示MOV ALAM_ON2,#01HMOV ALAM_ON3,#55HMOV ALAM_OFF1,#63HMOVALAM_OFF2,#42HMOV ALAM_OFF3,#33HMOV ALAM_STATE,#00H;初始化闹钟状态为OFF;-MOVTL0,#0B0H; constant for 0.05sMOVTH0,#3CH; 65536-15536=50,000 for 12MHz MOVTICK_CNT,#14H; times of overflow 0.05*20=1sMOVTMOD,#01H; Mode 1 for T0, Timer ModeSETB ET0; open T0SETB EX0; open INT0, Key1SETB EX1; open INT1, Key0SETB EA; total openSETB PT0; priority for T0,高优先级SETB TR0; start T0, RunSCAN_HOUR: ;闹钟扫描MOV A,SECOND_BCDCJNE A,#00H,SCANALARM MOV A,MINUTE_BCDCJNE A,#00H,SCANALARM HOUR:CLR P2.0NOP;整点,滴SETB P2.0SCANALARM: ;闹钟扫描 MOV A,ALAM_STATEJZ SCAN_HOUR;闹钟开关已打开?MOV A,NHOUR_BCDCJNE A,HOUR_BCD,WAITMOV A,NMINUTE_BCDCJNE A,MINUTE_BCD,WAITALARM:CLR P2.0;闹铃:滴滴滴滴SETB P2.0CLR P2.0SETB P2.0CLR P2.0SETB P2.0CLR P2.0SETB P2.0 NOPNOPNOPWAIT:SETB P2.0SJMPSCAN_HOUR; wait for interrupt; -; sub: T0 interrupt; 定时器0中断T0_INT: PUSH ACC MOVTL0,#0B0H; constant for 0.05sMOVTH0,#3CH; Timer 0重装载 MOV A,TIMER_START_FLAGCJNE A,#01H,TIMER_NEXT ;秒表模式?LJMP TIMER_INC ;秒表计时TIMER_NEXT:DJNZTICK_CNT,NOT_1S; is up to 1 second ?SJMPIS_1SNOT_1S:LJMPT0_RET; 1秒时间到IS_1S:MOVA,SECOND_BCD; take BCD of secondCJNEA,#59H,IN3; is up to 59 seconds ?SJMPIN4IN3:LJMPSECOND_INC; 秒加1IN4:MOVSECOND_BCD,#00H; 秒进位MOVA,MINUTE_BCD; take BCD of minuteCJNEA,#59H,IN5; is up to 59 minutes ?SJMPIN6IN5:LJMPMINUTE_INCIN6:MOVMINUTE_BCD,#00H; 分进位MOVA,HOUR_BCD; take BCD of hourCJNEA,#23H,HOUR_INC; is up to 23 hours ?MOVHOUR_BCD,#00H; 时进位MOVA,MONTH_BCD; take BCD of monthCJNEA,#02H,NOT_FEB; is February ?;2月处理;-FEB:NOPACALLBCD_DIV4; BCD of year in 26H divided by 4MOVA,R3; remainder in R3CJNEA,#00H,NOT_LEAP_Y; 00 means leap year;闰年,29天LEAP_Y:MOVA,DAY_BCD; take BCD of day in Feb.CJNEA,#29H,DAY_INC; is up to 29 days (leap year)?MOVDAY_BCD,#01H; keep the first dayMOVMONTH_BCD,#03H; increase monthSJMPRESET_CNT;非闰年NOT_LEAP_Y:MOVA,DAY_BCD; take BCD of day in Feb.CJNEA,#28H,DAY_INC; is up to 28 days (common year)?MOVDAY_BCD,#01H; keep the first dayMOVMONTH_BCD,#03H; increase monthSJMPRESET_CNT;-;非2月处理;30/31天?NOT_FEB:NOP; other month except Feb.CJNE A,#04H,Y01; is April ?AJMP MON_30DY01:CJNE A,#06H,Y02; is June ?AJMP MON_30DY02:CJNE A,#09H,Y03; is September ?AJMP MON_30DY03:CJNE A,#11H,T11; is November ?AJMP MON_30D;31天T11:MOVA,DAY_BCD; take BCD of dayCJNEA,#31H,DAY_INC; is up to 31 days ?AJMPNEXT_MONTH;30天MON_30D:MOVA,DAY_BCD; take BCD of dayCJNEA,#30H,DAY_INC; is up to 30 days ?;天进位NEXT_MONTH:MOVDAY_BCD,#01H; keep the first dayMOVA,MONTH_BCD; take BCD of monthCJNEA,#12H,MONTH_INC; is December ?; 月进位MOVMONTH_BCD,#01H; keep the first monthMOVA,YEAR_BCD; take BCD of yearCJNEA,#99H,YEAR_INC; is up to 99 years ?MOVYEAR_BCD,#00H; keep the first yearSJMPRESET_CNT;年加1YEAR_INC:MOVA,YEAR_BCD; take BCD of yearADDA,#01H; increase yearDAA; adjust BCDMOV YEAR_BCD,A; keep yearSJMP RESET_CNTMONTH_INC:MOVA,MONTH_BCD; take BCD of monthADDA,#01H; increase monthDAA; BCD码调整MOVMONTH_BCD,A; keep monthSJMPRESET_CNTDAY_INC:MOVA,DAY_BCD; take BCD of dayADDA,#01H; increase dayDAA; BCD码调整MOVDAY_BCD,A; keep daySJMPRESET_CNTHOUR_INC:MOVA,HOUR_BCD; take BCD of hourADDA,#01H; increase hourDAA; BCD码调整MOVHOUR_BCD,A; keep hourSJMPRESET_CNTMINUTE_INC:MOVA,MINUTE_BCD; take BCD of minuteADDA,#01H; increase minuteDAA; BCD码调整MOVMINUTE_BCD,A; keep minuteSJMPRESET_CNTSECOND_INC:MOVA,SECOND_BCD; take BCD of secondADDA,#01H; increase secondDAA; BCD码调整MOVSECOND_BCD,A; save back secondRESET_CNT:MOVTICK_CNT,#14H; retrieve times of overflowT0_RET: POP ACC RETI;-;秒表增TIMER_INC:TCC_INC: MOVA,TCC_BCD; take BCD of 0.05SCLR CSUBB A,#95HJZ TBB_INCMOVA,TCC_BCDADDA,#05H; increase 0.05SDAA; BCD码调整MOVTCC_BCD,A; keep 0.05SAJMP TIMER_OUTTBB_INC: MOV TCC_BCD,#00H MOVA,TBB_BCD; take BCD of SECOND CLRCSUBB A,#59HJZ TAA_INCMOV A,TBB_BCDADDA,#01H; increase SECONDDAA; BCD码调整MOVTBB_BCD,A; keep SECONDAJMP TIMER_OUTTAA_INC: MOV TBB_BCD,#00H MOVA,TAA_BCD; take BCD of MINUTECLRCSUBB A,#59HJZ TDD_INCMOV A,TAA_BCDADDA,#01H; increase MINUTEDAA; BCD码调整MOVTAA_BCD,A; save back MINUTEAJMP TIMER_OUTTDD_INC:MOVTAA_BCD,00HTIMER_OUT:LJMP TIMER_NEXT;返回定时器中断;-; -; sub: LED Display;显示子程序DISPLAY:MOV A,DIS_FLAGCJNE A,#03H,DISPLAY2 ;选择不同字模MOV DPTR,#TAB2SJMP DISPLAY3DISPLAY2:MOVDPTR,#TAB; set address of code tableDISPLAY3:MOVA,DIS_FLAG; take flag for shiftCJNEA,#00H,DISP_DATE; 00 当前显示内容为时间;R0: point to display bufferDISP_TIME:MOVR0,#SECOND_BCD; beginning from secondSJMPTSADISP_DATE: CJNEA,#01H,DISP_ALAM; 01 当前显示内容为日期 MOVR0,#DAY_BCD; FF for showing dateSJMP TSA;显示时间或日期DISP_ALAM: CJNEA,#02H,DISP_ALAM_SET; 02 当前显示内容为闹钟 MOVR0,#NSECOND_BCD; beginning from secondSJMP TSADISP_ALAM_SET: CJNEA,#03H,DISP_TIMER; 03 当前显示内容为闹钟设置 MOV A,ALAM_STATE; 闹钟状态显示 JZ SHOWOFF MOVR0,#ALAM_ON1; 显示ON SJMP TSASHOWOFF: MOV R0,#ALAM_OFF1 ;显示OFFSJMP TSADISP_TIMER: ;04当前显示内容为秒表 MOVR0,#TCC_BCD; beginning from secondTSA:MOVA,R0; begin from dayANLA,#0FH; get the low half byteMOVCA,A+DPTR; take character from code tableMOVR1,A; keep in R1 for DS6 showingMOVA,R0SWAPAANLA,#0FH; get the high half byteMOVCA,A+DPTR; take character from code tableMOVR2,A; keep in R2 for DS5 showing;-INCR0MOVA,R0; next one from monthANLA,#0FH; get the low half byteMOVCA,A+DPTRMOVR3,A; keep in R3 for DS4 showingMOVA,R0SWAPAANLA,#0FH; get the high half byteMOVCA,A+DPTRMOVR4,A; keep in R4 for DS3 showing;-INCR0MOVA,R0; next one from yearANLA,#0FH; get the low half byteMOVCA,A+DPTRMOVR5,A; keep in R5 for DS2 showingMOVA,R0SWAPAANLA,#0FH; get the high half byteMOVC A,A+DPTRMOV R6,A; keep in R6 for DS1 showing;-;P1:位选线;P0:段选线NOPTDP:MOVP1,#0FFH; close all showing/;Display DS6MOV A,ALAM_STATE ;是否显示闹钟状态位?(最末位小数点)JZ DIS_NEXTMOV A,R1ANL A,#7FHMOV R1,ADIS_NEXT: MOV A,R1 MOVP0,A; send character to DS6MOVA,FLASH_FLAG; get flag of un-flash/flashCJNEA,#03H,A02; 03 is flash on DS5&DS6SJMPA03A02:CJNEA,#03H,A04; 03 is flash on DS5&DS6A03:MOV A,TICK_CNT; take Counter of overflowRRC AJNC A05; check bit C ( 1 or 0 )A04:MOV P1,#0dfH; turn on DS6A05:LCALL DELAYMOV P1,#0FFH; close all showing;Display DS5MOVP0,R2; send character to DS5MOVA,FLASH_FLAG; get flag of un-flash/flashCJNEA,#03H,B02; 03 is flash on DS5&DS6SJMPB03B02:CJNEA,#03H,B04B03:MOVA,TICK_CNT; take times of overflowRRCAJNCB05; check bit C ( 1 or 0 )B04:MOVP1,#0efH; turn on DS5B05:LCALLDELAYMOVP1,#0FFH; close all showing;Display DS4MOV A,R3ANL A,#7FH ;该位增加小数点显示MOVP0,A; send character to DS4MOVA,FLASH_FLAG; get flag of un-flash/flashCJNEA,#02H,C02; 02 is flash on DS3&DS4SJMPC03C02:CJNEA,#02H,C04C03:MOVA,TICK_CNT; take times of overflowRRCAJNCC05; check bit C ( 1 or 0 )C04:MOVP1,#0f7H; turn on DS4C05:LCALLDELAYMOV P1,#0FFH; close all showing;Display DS3MOV P0,R4; send character to DS3MOV A,FLASH_FLAG; get flag of un-flash/flashCJNE A,#02H,D02; 02 is flash on DS3&DS4SJMP D03D02:CJNE A,#02H,D04D03:MOV A,TICK_CNT; take times of overflowRRC AJNC D05; check bit C ( 1 or 0 )D04:MOV P1,#0fbH; turn on DS3D05:LCALL DELAYMOV P1,#0FFH; close all showing;Display DS2MOV A,R5ANL A,#7FH ;该位增加小数点显示MOV P0,A; send character to DS2MOV A,FLASH_FLAG; get flag of un-flash/flashCJNE A,#01H,E02; 01 is flash on DS1&DS2SJMP E03E02:CJNE A,#01H,E04E03:MOV A,TICK_CNT; take times of overflowRRC AJNC E05; check bit C ( 1 or 0 )E04:MOV P1,#0fdH; turn on DS2E05:LCALL DELAYMOV P1,#0FFH; close all showingMOV P0,R6; send character to DS1MOV A,FLASH_FLAG; get flag of un-flash/flashCJNE A,#01H,F02; 01 is flash on DS1&DS2SJMP F03F02:CJNE A,#01H,F04F03:MOV A,TICK_CNT; take times of overflowRRC AJNC F05; check bit C ( 1 or 0 )F04:MOV P1,#0feH; turn on DS1F05:LCALL DELAYMOV P1,#0FFH; close all showingRET; -; -; sub: delay (1.542ms for 12MHz, 3.084ms for 6MHz);延时子程序D_CNT_2EQU28HD_CNT_1EQU29HDELAY:MOVD_CNT_2,#03HD_LOOP2:MOVD_CNT_1,#0FFH;1D_LOOP1:DJNZD_CNT_1,D_LOOP1;2DJNZD_CNT_2,D_LOOP2;2RET; -; -;外部中断0; sub: INT0 interrupt; 处理按键K0,切换时间/日期/闹钟/闹钟设置/秒表显示或者调整EX0_INT:NOP; switch or adjust with date/timePUSH ACCPUSHPSWLCALLDIS_DELAY; re-bounce (with LED display)JNBP3.3,OUT; check port INT1;K0按下NOP; inhibit INT1 ( use k0);- MOV A,FLASH_FLAG CJNE A,#00H,JUDGE_MODE ;有闪烁进入调整模式SET_DIS: ;无闪烁进入设置显示或秒表模式CLR P2.0 ;按键滴一声MOV DI_41H,#19HDI_LPO:MOV DI_40H,#0FFHDI_LP:DJNZ DI_40H,DI_LPDJNZ DI_41H,DI_LPOSETB P2.0;- MOV A,DIS_FLAG INC AMOV DIS_FLAG,A CJNE A,#04H,CROSSTIMER ;进入秒表?;-TIMER: MOV TIMER_FLAG,#01H ;进入秒表,秒表模式设置为开 LJMP EX0_RET ;退出;-CROSSTIMER: ;显示模式切换CJNE A,#05H,OUT MOV DIS_FLAG,#00H;已到5需置零 MOV TIMER_FLAG,#00HMOV A,TIMER_START_FLAGJNZ OUT ;秒表后台工作,暂停计数时退出则对秒表清零MOVTCC_BCD,#00H; BCD of second 秒表清零 MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城市规划设计咨询合同
- 二零二五年度新能源货车买卖及运输合同
- 贵州毕节职业技术学院招聘考试真题2024
- 2025年房屋转租平台服务及佣金分成协议
- 2025年度离婚协议修订与变更登记手续合同
- 二零二五年度金融行业保密竞业禁止协议范本
- 2025版厨师节庆活动定制化服务合同
- 2025年度数据中心运营维护承包合同范本下载
- 二零二五年度电商出样品牌合作框架协议书
- 二零二五年度临时演出场地租赁合同范本
- 二零二五年度食堂承包食品安全风险评估合同
- 四川酒业集团有限责任公司招聘考试真题2024
- 医院药房火灾应急预案演练脚本范文
- 大学生心理健康十六讲(第3版) 课件 樊富珉 第8讲 沟通无极限-沟通与冲突管理-第16讲 珍爱生命-危机干预与幸福人生
- 鼻中隔偏曲护理查房
- 班会:初中生前途与理想教育
- 慢高合并子痫护理查房
- 红河县考编小学数学试卷
- 中国近代屈辱史
- 吸烟与肺癌完整版本
- 2026版高三一轮总复习(数学)第六章 第4课时 数列求和 课件
评论
0/150
提交评论