当前位置:文档之家› 单片机—实时时钟实验(汇编版)

单片机—实时时钟实验(汇编版)

实验二实时时钟实验一、实验目的1)数码管动态显示技术2)定时器的应用3)按键功能定义二、实验实现的功能实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。

三、系统硬件设计四、系统软件设计说明:1键进入和退出设置模式,4键选择调分或秒,2键加,3键减。

P1M1 EQU 91HP1M0 EQU 92HSEC0 DA TA 30H ;秒显示SEC1 DA TA 31HMIN0 DA TA 32H ;分显示MIN1 DA TA 33HDELAY_1 DA TA 34H ;延时参数DELAY_2 DA TA 35H ;延时参数ORG 0000HLJMP 0030HORG 001BHLJMP INTR0ORG 0030HMAIN: MOV P1M1,#00000000BMOV P1M0,#11111111BMOV R7,#000 ;记中断次数,R7=100为1秒MOV R6,#000 ;记秒MOV R5,#000 ;记分MOV R4,#0FFH ;按键位置MOV R1,#000 ;确定是否有按键按下的参数MOV TMOD,#10H ;定时器初始化MOV TH1,#0D8H ;定时时间10msMOV TL1,#0F0HSETB EASETB ET1SETB TR1LOOP0: CJNE R4,#000H,LOOP01 ;实时时钟显示MOV R4,#0FFHLJMP LOOP1LOOP01: LCALL TIMELCALL KEY0LJMP LOOP0LOOP1: CJNE R4,#000H,LOOP11 ;调秒MOV R4,#0FFHLJMP LOOP0LOOP11: CJNE R4,#003H,LOOP12MOV R4,#0FFHLJMP LOOP2LOOP12: CJNE R4,#001H,LOOP13MOV R4,#0FFHINC R6LOOP13: CJNE R6,#060,LOOP14MOV R6,#000HLOOP14: CJNE R4,#002H,LOOP16MOV R4,#0FFHCJNE R6,#000,LOOP15MOV R6,#060LOOP15: DEC R6LOOP16: LCALL TIMELCALL KEY1LJMP LOOP1LOOP2: CJNE R4,#000H,LOOP21 ;调分MOV R4,#0FFHLJMP LOOP0LOOP21: CJNE R4,#003H,LOOP22MOV R4,#0FFHLJMP LOOP1LOOP22: CJNE R4,#001H,LOOP24MOV R4,#0FFHINC R5LOOP23: CJNE R5,#060,LOOP24MOV R5,#000HLOOP24: CJNE R4,#002H,LOOP26MOV R4,#0FFHCJNE R5,#000,LOOP25MOV R5,#060LOOP25: DEC R5LOOP26: LCALL TIMELCALL KEY2LJMP LOOP2/*********中断服务程序(原始时间分秒的确定)**********/INTR0: PUSH PSWMOV TH1,#0D8HMOV TL1,#0F0HINC R7MOV TH1,#0D8HMOV TL1,#0F0HCJNE R7,#100,INTR01MOV R7,#000HINC R6CJNE R6,#60,INTR01MOV R6,#000HINC R5CJNE R5,#60,INTR01MOV R5,#000HINTR01: POP PSWRETI/*****************时间分秒显示计算***************/TIME: MOV A,R6 ;计算秒MOV B,#10DIV ABMOV SEC1,AMOV SEC0,BMOV A,R5 ;计算分MOV B,#10DIV ABMOV MIN1,AMOV MIN0,BRET/*****************按键扫描消抖及确定***************/KEY0: LCALL KS ;扫描有无按键按下KEY01: LCALL DISPLAY0 ;CJNE R1,#000H,KEY02 ; 通过(控制数码管的扫描频率,LJMP KEY05 ; 延时进而控制其扫描周期,以KEY02: MOV R1,#000H ; 消抖达到所需摸延时时间)LCALL KS ;CJNE R1,#000H,KEY03 ;确定有按键按下?LJMP KEY05 ;KEY03: LCALL KS0 ;调用计算物理位置子函数KEY04: LCALL TIME ;LCALL DISPLAY0 ;LCALL KS ;检查按键是否松开CJNE R1,#000H,KEY04 ;KEY05: RET ;KEY1: LCALL KS ;同上KEY11: LCALL DISPLAY1 ;CJNE R1,#000H,KEY12 ;LJMP KEY15 ;KEY12: MOV R1,#000HLCALL KSCJNE R1,#000H,KEY13LJMP KEY15KEY13: LCALL KS0KEY14: LCALL TIMELCALL DISPLAY1LCALL KSCJNE R1,#000H,KEY14KEY15: RETKEY2: LCALL KS ;同上KEY21: LCALL DISPLAY2 ;CJNE R1,#000H,KEY22 ;LJMP KEY25 ;KEY22: MOV R1,#000HLCALL KSCJNE R1,#000H,KEY23LJMP KEY25KEY23: LCALL KS0KEY24: LCALL TIMELCALL DISPLAY2LCALL KSCJNE R1,#000H,KEY24KEY25: RET/*****检查有无按健闭合*****/KS: CLR P3.6CLR P3.7SETB P0.5SETB P0.6SETB P0.7MOV A,P0ORL A,#01FHCPL AMOV R1,ARET/****确定按键的物理位置****/KS0: MOV R4,#000H ;行号扫描初值SETB P3.7CLR P3.6 ;行扫描初值KS1: MOV A,P0ORL A,#01FHMOV R3,A ;保存列1CJNE A,#0FFH,KS2MOV R4,#003H ;行首值SETB P3.6CLR P3.7MOV A,P0ORL A,#01FHMOV R3,A ;保存列2CJNE A,#0FFH,KS2LJMP KS4KS2: MOV A,R3 ;计算按键的物理位置RRC ASWAP AKS3: RRC AJNC KS4INC R4SJMP KS3KS4: RET/******************数码管显示*****************/DP1: MOV A,MIN1 ;前两位数码管显示MOV DPTR,#TAB0MOVC A,@A+DPTRCLR P0.0MOV P1,ALCALL DL0MOV P1,#000HSETB P0.0MOV A,MIN0MOV DPTR,#TAB1MOVC A,@A+DPTRCLR P0.1MOV P1,ALCALL DL0MOV P1,#000HSETB P0.1RETDP2: MOV A,SEC1 ;后两位数码管显示MOV DPTR,#TAB0MOVC A,@A+DPTRCLR P0.2MOV P1,ALCALL DL0MOV P1,#000HSETB P0.2MOV A,SEC0MOV DPTR,#TAB0MOVC A,@A+DPTRCLR P0.3MOV P1,ALCALL DL0MOV P1,#000HSETB P0.3RET/******************显示方式函数*****************/DISPLAY0: LCALL DP1 ;实时时钟模式的显示函数LCALL DP2RETDISPLAY1: LCALL DP1 ;调秒模式的显示函数CJNE R7,#001H,DISPLAY11MOV R2,#000HDISPLAY11:CJNE R7,#032H,DISPLAY12MOV R2,#001HDISPLAY12:CJNE R2,#000H,DISPLAY13LCALL DP2LJMP DISPLAY14DISPLAY13:LCALL DL0LCALL DL0DISPLAY14:RETDISPLAY2: LCALL DP2 ;调分模式的显示函数CJNE R7,#001H,DISPLAY21MOV R2,#000HDISPLAY21:CJNE R7,#032H,DISPLAY22MOV R2,#001HDISPLAY22:CJNE R2,#000H,DISPLAY23LCALL DP1LJMP DISPLAY24DISPLAY23:LCALL DL0LCALL DL0DISPLAY24:RET/********************延时********************//*说明:延时所用的三条令,stc10f08xe中与常用的51单片机中的指令执行时间不同*/ DL0: MOV DELAY_1,#16 ;延时时间:[2+(2+250*4+4)×16+4] /11.0592DL01: MOV DELAY_2,#250 ; =16102/11.0592DJNZ DELAY_2,$ ; =1.456msDJNZ DELAY_1,DL01 ;RET ; ;TAB0: DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,067H ;无小数点的LED字模表TAB1: DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H,0FFH,0E7H ;有小数点的LED字模表END五、实验过程中遇到的问题及解决方法1、怎么让选中的数码管闪烁?通过记秒的参数,设置前半秒扫描相关数码管,后半秒不扫描。

2、怎么让按键按下时数码管不突然闪烁?通过计算改变数码管的扫描时间,让其作为按键延时间。

3、汇编中如果工作寄存器用完,怎么自定义变量?通过EQU或DATA指令进行定义。

4、STC单片机的定时器是否与51单片机兼容?兼容。

指导老师签字:日期:。

相关主题