




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机大作业电子日历时钟的制作 班 级: 姓 名: 学 号: 编 号: 07 一、 题目及功能要求1 制作一个电子日历时钟,使用汇编语言进行软件编程2 实现功能(1) 显示北京时间并能校准(2) 时、分、秒之间以及年、月、日之间以小数点隔开(3) 显示公历日期并能校准,能够自动识别“闰年”以及“大月、小月”(4) 运动秒表,能够后台计时,秒表精确到0.05S(5) 闹钟功能,有闹钟开关,并能显示当前闹钟是否开启(6) 整点报时提醒二、 硬件方案1 AT89S52最小系统2 显示电路采用动态扫描驱动电路,AT89S52的P0口连接74LS244总线驱动器,输出信号利用三极管8550进行放大,通过
2、P1口对数码管进行段选扫描,AT89S52的P1.2P1.7口对数码管进行位选扫描3 两个按键开关,分别接AT89S52的两个外部中断引脚4 AT89S52的P2.0口输出经三极管9012放大,驱动有源蜂鸣器发声三、 电路原理图四、 系统元件布局、布线图五、 元器件清单型号及标称值数量AT89S521HD74LS2441晶体管85506晶体管90121蜂鸣器(有源)1电解电容10uF17段数码管(共阳)63K电阻9200电阻84.7K电阻1按钮开关312M晶振130pF瓷介电容2六、 软件方案1 “时钟”基准时间由AT89S52定时器0中断提供,设置为最高优先级,定时器0设为工作方式1,即16
3、进制计数器方式,计数初值设为15536,即可实现0.05s中断一次,连续中断20次即可实现一秒定时。2 由于使用较多数码管,显示模块使用动态扫描方式,定义全局变量,保存各个数位的BCD码,通过查表,将字模送到P0口进行输出;为了显示闹钟的状态,设置了另一字模数据表,在显示前进行判断,若为闹钟开关设置状态则调用此字模数据表。3 按键中断的时候,在2个按键都没按下的状态,2个中断引脚都为低电平,则一直调用中断0的子程序,每次进入中断0子程序中便检测中断1的引脚是否为高电平,即检测开关KEY1是否按下;相反,在按下KEY0时,进入中断1子程序,每次进入中断1子程序都检测中断0的引脚是否为高电平,为高
4、电平则表示已按下。4 用寄存器R7来记录当前切换的功能,分别为,0时间;1日期;2-闹钟;3-闹钟开关;4-秒表。5 秒表的实现,采用基准时钟作为秒表时钟源,精度可以达到0.05s。6 闹钟的实现,在主程序中,循环判断闹钟设置的时分与当前时分是否相等,闹钟持续1分钟7 整点报时的实现,在主程序中,先判断当前时间的秒,若为0再判断分,再为0则使蜂鸣器嘀一声,循环判断。七、 程序框图1. 主程序主程序系统初始化整点?闹钟到?提示音闹铃提示音NNYY2. 定时器0中断子程序定时器0中断子程序保护现场重载计数初值秒表?秒表模块到1秒?秒加1或向前进位恢复现场中断返回YYNN3. 外部中断0子程序外部I
5、NT0中断带显示延时消抖调整模式有闪烁?切换显示模式时间调整调整时间?调整日期?调整闹钟?日期调整秒表模式?日期、闹钟、闹钟设置、秒表显示循环切换闹钟调整进入秒表中断退出YNNYYNNNYYYY保护Psw、A寄存器恢复psw、A寄存器初始化秒表后台计时?YNN提示音滴Key1按下?4. 外部中断1子程序外部INT1中断保护psw、A寄存器带显示延时Key0按下?秒表模式?设置闹钟?暂停/继续计时打开/关闭闹钟闪烁循环切换滴一声提示闪烁切换模式恢复psw、A寄存器退出中断YYYNNN八、 系统使用说明1 接通电源自动复位,读取初始状态,时钟-“”,日期“”,闹钟“”,闹钟状态“OFF”,秒表“”
6、。2 按键KEY1为“切换功能/调节”按钮,按键KEY0为“确定/计时开始/计时暂停/闹钟开关按钮3 第一功能-电子时钟:按KEY0键进入时校准状态,“时”数码管闪烁,此时按KEY1键可以调节小时,“时”调节范围为0024,按KEY0可切换到“分”设置,调节范围为0059再按KEY0可切换到“秒”设置, 调节范围为0059。4 第二功能-电子日历:在电子时钟功能下,按KEY1可以切换到电子日历功能。进入电子日历功能,可以对“年”.“月”.“日”进行校准,校准方式同电子时钟的校准方式一样,自行摸索。5 第三功能-闹钟设置:在电子日历功能下,按KEY1可以切换到闹钟设置功能。闹钟的设置同电子时钟的
7、设置一样。6 第四功能-闹钟开关:在闹钟设置功能下,按KEY1可以切换到闹钟开关设置。默认状态为关闭闹钟功能,显示“OFF”,按KEY0可以调节闹钟开关,打开闹钟功能则显示“ON”。闹钟设置为“ON”时,最后一个数码管的小数点会亮起,可以在任何功能状态下提示闹钟功能已开启。7 第五功能-秒表:在闹钟设置功能下,按KEY1可以切换到秒表功能。进入秒表功能,按KEY0开始计时,再按KEY0则暂停计时,在秒表计时的时候按KEY1可以切换到其他功能,而秒表则在后台计时,在秒表暂停时按KEY1可以将秒表清零。九、 体会第一次使用Atmel Designer Winter 09布出一个完整的PCB制板图,
8、并用覆铜板做成实物,最大的体会是:软件能画出来的图,我们不一定就能把这样的 电路板做出来。布线时要考虑的因素除整体布局、飞线数目外,最重要的是线的宽度、线与线的间距、焊盘的大小。唯有线宽合适、间距合 理才能做出符合要求的电路板。刚制成的电路板要先使用万用表检测各导线的连接情况,解决断路、短路的问题之后方能进行焊接。这样做 的好处是,保证了调试程序时不会受硬件接触不良等情况的影响。由于第一次尝试完全使用汇编语言对AT89S52进行编程操作,对汇编语言的陌生给前期编程工作带来诸多不便。汇编语言不同于C或其它高级 语言,程序间的跳转,各种寄存器的压栈出栈都需要人工考虑,而这种疏漏编译器也不会给出任何
9、提示,于是往往一些大意的疏忽,程序便 无法达到预期的效果。加之没有相关条件使用在线调试,也给故障排除带来一些障碍。对此的体会是,确定是程序出现问题时,优先往程序间的跳转条件、重要寄存器等的现场保护、循环退出的条件方面考虑,寻找原因。由于 此次硬件电路设计采用低电平导通的PNP三极管,和74LS244电平驱动器,也没有将IO口做通用数据传输口用,故不需考虑上拉电阻的选用及 将相应管脚写入高电平以正确接收数据的问题。当然在调试的过程中合理的使用软件仿真机,熟练的设置程序断点,同时观察单片机各寄存 器值的变化,可以极大方便我们查找程序漏洞,解决问题。 在书写代码的过程中,应该注意代码的规范化,尤其是
10、使用汇编编程时,必须加上必要的注释,方便程序阅读及故障排查。对于需要使用 到的各个变量,必须在程序开头集中定义存储位置,以求一目了然,在新增变量的时候也不至于出现存储单元被重复使用而导致数据丢失的 情况。最后,看着忙碌数日得来的劳动成果乖乖的工作,确实蛮有成就感。希望今后有更多的机会进行这样的实践实验。十、 附录;AT89S52CLOCK_FINAL.asm; (Electronic Calendar and Clock); Key0(for shift/adjust) connected to INT1; Key1(for un-flash/flash) connected to INT0;
11、 学生姓名:黄锦波,黄卓佳; 学生学号:200830240380,200830240434; 分组编号:007;变量定义TICK_CNTEQU20H ;T0倍乘;-SECOND_BCDEQU21H ;时间记录MINUTE_BCDEQU22HHOUR_BCDEQU23H;-DAY_BCDEQU24H ;日期记录MONTH_BCDEQU25HYEAR_BCDEQU26H;-FLASH_FLAGEQU27H ;是否闪烁DIS_FLAG EQU R7 ;当前显示内容标志 ;DIS_FLAG: 0时间;1日期;2-闹钟;3-闹钟开关;4-秒表;-NSECOND_BCDEQU2BH ;闹钟时间NMINUT
12、E_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_OFF
13、3 EQU 3BH;-;中断向量表ORG0000HLJMPMAINORG0003HLJMPEX0_INT; port INT0ORG000BHLJMPT0_INT; port T0ORG0013HLJMPEX1_INT; port INT1;主程序ORG 0030HMAIN:NOP; main program;初始化堆栈MOVSP,#60H;初始化变量MOVSECOND_BCD,#00H; BCD of "second"MOVMINUTE_BCD,#00H; BCD of "minute"MOVHOUR_BCD,#00H; BCD of "ho
14、ur" MOVNSECOND_BCD,#00H; BCD of "second"MOVNMINUTE_BCD,#00H; BCD of "minute"MOVNHOUR_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 ;秒表
15、工作标志MOV TIMER_FLAG,#00H ;秒表模式标志MOVDAY_BCD,#06H; BCD of "day"MOVMONTH_BCD,#06H; BCD of "month"MOVYEAR_BCD,#010H; BCD of "year"MOVFLASH_FLAG,#00H; flag for un-flash/flashMOVDIS_FLAG,#00H; flag for shift(time/date)MOV ALAM_ON1,#55H; BCD OF 闹钟状态显示MOV ALAM_ON2,#01HMOV ALAM_O
16、N3,#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 ModeSETBET0; open T0SETBEX0; open INT0, Key1SETBEX1;
17、 open INT1, Key0SETBEA; total openSETBPT0; priority for T0,高优先级SETBTR0; 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
18、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_FLAGC
19、JNE 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 "second"CJNEA,#59H,IN3; is up to 59 seconds ?SJMPIN4IN3:LJMPSECOND_INC; 秒加1IN4:MOVSECOND_BCD,#00H; 秒进位MOVA,MINUTE_BCD; take
20、 BCD of "minute"CJNEA,#59H,IN5; is up to 59 minutes ?SJMPIN6IN5:LJMPMINUTE_INCIN6:MOVMINUTE_BCD,#00H; 分进位MOVA,HOUR_BCD; take BCD of "hour"CJNEA,#23H,HOUR_INC; is up to 23 hours ?MOVHOUR_BCD,#00H; “时”进位MOVA,MONTH_BCD; take BCD of "month"CJNEA,#02H,NOT_FEB; is February ?;
21、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 dayMOVMO
22、NTH_BCD,#03H; increase "month"SJMPRESET_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 "month"SJMPRESET_CNT;-;非2月处理;30/31天?NOT_FEB:NOP; other &quo
23、t;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 "day"CJNEA,#31H,DAY_INC; is up to 31 days ?AJMPNEXT_MONTH
24、;30天MON_30D:MOVA,DAY_BCD; take BCD of "day"CJNEA,#30H,DAY_INC; is up to 30 days ?;天进位NEXT_MONTH:MOVDAY_BCD,#01H; keep the first dayMOVA,MONTH_BCD; take BCD of "month"CJNEA,#12H,MONTH_INC; is December ?; 月进位MOVMONTH_BCD,#01H; keep the first monthMOVA,YEAR_BCD; take BCD of "ye
25、ar"CJNEA,#99H,YEAR_INC; is up to 99 years ?MOVYEAR_BCD,#00H; keep the first yearSJMPRESET_CNT;年加1YEAR_INC:MOVA,YEAR_BCD; take BCD of "year"ADDA,#01H; increase "year"DAA; adjust BCDMOV YEAR_BCD,A; keep "year"SJMP RESET_CNTMONTH_INC:MOVA,MONTH_BCD; take BCD of "
26、month"ADDA,#01H; increase "month"DAA; BCD码调整MOVMONTH_BCD,A; keep "month"SJMPRESET_CNTDAY_INC:MOVA,DAY_BCD; take BCD of "day"ADDA,#01H; increase "day"DAA; BCD码调整MOVDAY_BCD,A; keep "day"SJMPRESET_CNTHOUR_INC:MOVA,HOUR_BCD; take BCD of "hour&q
27、uot;ADDA,#01H; increase "hour"DAA; BCD码调整MOVHOUR_BCD,A; keep "hour"SJMPRESET_CNTMINUTE_INC:MOVA,MINUTE_BCD; take BCD of "minute"ADDA,#01H; increase "minute"DAA; BCD码调整MOVMINUTE_BCD,A; keep "minute"SJMPRESET_CNTSECOND_INC:MOVA,SECOND_BCD; take BCD of
28、"second"ADDA,#01H; increase "second"DAA; BCD码调整MOVSECOND_BCD,A; save back "second"RESET_CNT:MOVTICK_CNT,#14H; retrieve times of overflowT0_RET: POP ACC RETI;-;秒表增TIMER_INC:TCC_INC: MOVA,TCC_BCD; take BCD of "0.05S"CLR CSUBB A,#95HJZ TBB_INCMOVA,TCC_BCDADDA,#05
29、H; increase "0.05S"DAA; BCD码调整MOVTCC_BCD,A; keep "0.05S"AJMP TIMER_OUTTBB_INC: MOV TCC_BCD,#00H MOVA,TBB_BCD; take BCD of "SECOND" CLRCSUBB A,#59HJZ TAA_INCMOV A,TBB_BCDADDA,#01H; increase "SECOND"DAA; BCD码调整MOVTBB_BCD,A; keep "SECOND"AJMP TIMER_OUTT
30、AA_INC: MOV TBB_BCD,#00H MOVA,TAA_BCD; take BCD of "MINUTE"CLRCSUBB A,#59HJZ TDD_INCMOV A,TAA_BCDADDA,#01H; increase "MINUTE"DAA; BCD码调整MOVTAA_BCD,A; save back "MINUTE"AJMP TIMER_OUTTDD_INC:MOVTAA_BCD,00HTIMER_OUT:LJMP TIMER_NEXT;返回定时器中断;-; -; sub: LED Display;显示子程序DISP
31、LAY: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 "second"
32、SJMPTSADISP_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 "second"SJMP TSADISP_ALAM_SET: CJNEA,#03H,DISP_TIMER; "03&qu
33、ot; 当前显示内容为闹钟设置 MOV A,ALAM_STATE; 闹钟状态显示 JZ SHOWOFF MOVR0,#ALAM_ON1; 显示”ON“ SJMP TSASHOWOFF: MOV R0,#ALAM_OFF1 ;显示“OFF”SJMP TSADISP_TIMER: ;"04"当前显示内容为秒表 MOVR0,#TCC_BCD; beginning from "second"TSA:MOVA,R0; begin from "day"ANLA,#0FH; get the "low half byte"MOVC
34、A,A+DPTR; take character from code tableMOVR1,A; keep in R1 for DS6 showingMOVA,R0SWAPAANLA,#0FH; get the "high half byte"MOVCA,A+DPTR; take character from code tableMOVR2,A; keep in R2 for DS5 showing;-INCR0MOVA,R0; next one from "month"ANLA,#0FH; get the "low half byte&quo
35、t;MOVCA,A+DPTRMOVR3,A; keep in R3 for DS4 showingMOVA,R0SWAPAANLA,#0FH; get the "high half byte"MOVCA,A+DPTRMOVR4,A; keep in R4 for DS3 showing;-INCR0MOVA,R0; next one from "year"ANLA,#0FH; get the "low half byte"MOVCA,A+DPTRMOVR5,A; keep in R5 for DS2 showingMOVA,R0SWA
36、PAANLA,#0FH; get the "high half byte"MOVC 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;
37、 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,#0FBH; turn on DS6A05:LCALL DELAYMOV P1,#0FFH; close all showin
38、g;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,#0F7H; turn on DS5B05:LCALLDELAYMOVP1,#0FFH; clos
39、e 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,#0EFH; tu
40、rn 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
41、 )D04:MOV P1,#0DFH; 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
42、times of overflowRRC AJNC E05; check bit C ( 1 or 0 )E04:MOV P1,#0BFH; 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
43、_CNT; take times of overflowRRC AJNC F05; check bit C ( 1 or 0 )F04:MOV P1,#07FH; 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_L
44、OOP1;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_MOD
45、E ;有闪烁进入调整模式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,O
46、UT MOV DIS_FLAG,#00H;已到5需置零 MOV TIMER_FLAG,#00HMOV A,TIMER_START_FLAGJNZ OUT ;秒表后台工作,暂停计数时退出则对秒表清零MOVTCC_BCD,#00H; BCD of "second" 秒表清零 MOVTBB_BCD,#00H; BCD of "minute" MOVTAA_BCD,#00H; BCD of "hour"OUT:LJMP EX0_RET ; 退出;-JUDGE_MODE: ;进入调整模式MOVA,DIS_FLAG; 读取当前显示内容为?(时间/
47、日期/秒表/闹钟) CJNE A,#00H,JDATE ;是否进入时间调整00 ;-JTIME: ;调整时间 MOVA,FLASH_FLAG; take flag of un-flash/flashADH:CJNEA,#01H,ADM; "03" for adjusting "hour"MOVA,HOUR_BCD; take BCD of "hour"CJNEA,#23H,JH0; is up to 23 hours ?MOVHOUR_BCD,#00H; keep the first hourLJMPJHFJH0:ADDA,#01H; increase "hour"DAA; adjust BCDMOVHOUR_BCD,A; keep "hour"JHF:LJMPEX0_RET;-ADM:CJNE A,#02H,ADS; "02" for adjusting "minute"MOV A,MINUTE_BCD; take BCD of "minute"CJNE A,#59H,JM0; is up to 5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6.3二氧化碳的实验室制取(第二课时)-人教版九年级《化学》上册教学课件
- 智能预约系统优化景区游客容量管理-洞察阐释
- 图论在量子计算中的潜力-洞察阐释
- 锌冶炼企业经营管理方案
- 高中音乐跨学科教学中的评估与反思策略
- 高中科技创新跨学科教学在提升学生综合能力中的作用
- 2025至2030年中国热收缩成型机行业投资前景及策略咨询报告
- 2025至2030年中国火花侦测器行业投资前景及策略咨询报告
- 2025至2030年中国淋头固定座行业投资前景及策略咨询报告
- 2025至2030年中国洗模剂行业投资前景及策略咨询报告
- 安徽省阜阳市太和县2023-2024学年八年级下学期期末英语试题
- 个体诊所备案承诺书模板
- 危险化学品仓库安全检查表
- 2024年咨询工程师继续教育城市轨道交通工程可行性研究报告编制方法考试答案
- 版隧道检验批施工质量验收表格
- 仓储管理职位工作手册完整版
- 2024年云南省曲靖经开区政法委招聘2人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024中国成人健康管理洞察之益生菌部分-益普索-202405
- 2024年云南昆明市石林彝族自治县公安局勤务辅警招聘笔试参考题库附带答案详解
- 产科危重症病人的护理
- 2024年山东省济南市市中区中考二模地理试卷
评论
0/150
提交评论