本次还是延续发表于 2019-2-18 电路 本次更换芯片:STC 12C2052AD更换为STC 12C5608AD /****************** 语言: 汇编 项目: 数码管点闪烁 芯片: STC 12C5608AD PDIP-20 日期: 2019.3.4 编写: ZCT P3.5 接数码管COM P3.4 接数码管COM P3.3 接数码管COM P3.2 接数码管COM P1.0-P1.7 接数码管段位a b c d e f g dp 晶振:12M ******************/ ORG 0000H JMP START ORG 0030H START: MOV SP,#60H MOV P1,#0FFH CLR P3.5 ;设置LED初始状态 MOV TMOD,#01H ;设置定时器/计数器方式 MOV R0,#10 LOOP: MOV P1,#07FH AGAIN: MOV TH0,#HIGH(65535-50000) ;设置计数值 MOV TL0,#LOW(65535-50000) ;设置计数值 SETB TR0 ;启动定时器0 TF0_0: JBC TF0,TIMEOUT ;查询定时器是否中断 JMP TF0_0 ;连续查询是否中断 TIMEOUT: CLR TR0 ;关闭定时器 DJNZ R0,TF0_0 ;重复10次时间定时 CPL P3.5 ;重复10次后,显示数字加1 MOV R0,#10 JMP LOOP ;调至LOOP形成一个新循环 END |
本次还是延续发表于 2019-2-18 电路 本次更换芯片:STC 12C2052AD更换为STC 12C5608AD 本次增加交替显示: 秒钟和分钟时钟交替显示 /****************** 语言: 汇编 项目: 4位数码管时间显示 时钟分钟和秒钟交替显示 芯片: STC 12C5608AD PDIP-20 日期: 2019.3.3 编写: ZCT P3.5 接数码管COM P3.4 接数码管COM P3.3 接数码管COM P3.2 接数码管COM P1.0-P1.7 接数码管段位a b c d e f g dp 晶振:12M ******************/ /**************数码管显示时间初始化***************************/ LED0 BIT P3.5 LED1 BIT P3.4 LED2 BIT P3.3 LED3 BIT P3.2 SEC DATA 30H MIN DATA 31H HOUR DATA 32H ORG 0000H JMP MAIN ORG 000BH LJMP TIME_TF0 ORG 0030H MAIN: MOV SP,#60H MOV P1,#0FFH MOV P3,#0FFH MOV SEC,#57 ;秒钟初值 MOV MIN,#58 ;分钟初值 MOV HOUR,#19 ;时钟初值 MOV 20H,#0 MOV DPTR,#TABLE MOV TMOD,#11H ;设置定时器工作方式为1 MOV IE,#10001010B ;启动总中断;启动定时器0中断 MOV TH0,#HIGH(65535-50000) ;定时器0高8位赋值 MOV TL0,#LOW(65535-50000) ;定时器0低8位赋值 SETB TR0 ;启动定时器 MOV R0,#20 ;定时器中断循环次数 MOV R1,#20 LCALL DISPLAY_MIN ;显示分钟初值 LCALL DISPLAY_HOUR ;显示时钟初值 START: LCALL DISPLAY_MIN LCALL DISPLAY_HOUR CJNE R4,#6,START ;分钟时钟显示时间 DIAPLAYSEC: LCALL DISPLAY_SEC CJNE R4,#13,DIAPLAYSEC ;秒钟显示时间 MOV 20H,#0 ;交替值清零 JMP START /***************定时器中断程序******************/ TIME_TF0: CLR TR0 ;关闭定时器 MOV TH0,#HIGH(65535-50000) ;定时器重新赋值 MOV TL0,#LOW(65535-50000) SETB TR0 ;启动定时器 DJNZ R0,RETURN ;1秒定时。判断R0是否为零,返回到START。如等于零,执行下一条。*/ MOV R0,#20 ;重新赋值 INC SEC ;秒寄存器加1 INC 20H ;交替显示时间 MOV R4,20H MOV R3,SEC ;秒的值载人R3 CJNE R3,#60,TIME_TF0 ;判断SEC不等于60,返回到定时器中断。 等于60下一条 MOV SEC,#0 ;秒值清零 JMP TIME_MIN ;跳到分钟寄存器 RETURN:RETI TIME_MIN: ;注释同上 INC MIN MOV R3,MIN CJNE R3,#60,TIME_TF0 MOV MIN,#0 JMP TIME_HOUR TIME_HOUR: INC HOUR MOV R3,HOUR CJNE R3,#24,TIME_TF0 MOV HOUR,#0 JMP TIME_TF0 ;返回到定时器中断 /***************以下参考2月24日的注释****************/ /***************秒钟显示程序****************/ DISPLAY_SEC: MOV A,SEC MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************分钟显示程序****************/ DISPLAY_MIN: MOV A,MIN MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************时钟显示程序****************/ DISPLAY_HOUR: MOV A,HOUR MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED3 CALL DELAY_10MS SETB LED3 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED2 CALL DELAY_10MS SETB LED2 CALL DELAY_10MS RET /**************延时程序****************/ DELAY_10MS: MOV R7,#1 D1: MOV R6,#5 D2: DJNZ R6,D2 DJNZ R7,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END |
4位数码管显示FFFF,就不发了,自己动手改一下。 本次还是延续发表于 2019-2-18 电路 /****************** 语言: 汇编 项目: 4位数码管时间显示 芯片: STC 12C2052AD PDIP-20 日期: 2019.3.2 编写: ZCT P3.5 接数码管COM P3.4 接数码管COM P3.3 接数码管COM P3.2 接数码管COM P1.0-P1.7 接数码管段位a b c d e f g dp 注意:时间精度不高,每分钟慢4.3秒 ******************/ /**************数码管显示时间初始化***************************/ LED0 BIT P3.5 LED1 BIT P3.4 LED2 BIT P3.3 LED3 BIT P3.2 SEC DATA 30H MIN DATA 31H HOUR DATA 32H ORG 0000H JMP MAIN ORG 000BH LJMP TIME_TF0 ORG 0030H MAIN: MOV SP,#60H MOV P1,#0FFH MOV P3,#0FFH MOV SEC,#59 ;秒钟初值 MOV MIN,#59 ;分钟初值 MOV HOUR,#00 ;时钟初值 MOV DPTR,#TABLE MOV TMOD,#11H ;设置定时器工作方式为1 SETB EA ;启动总中断 SETB ET0 ;启动定时器0中断 MOV TH0,#HIGH(65535-50000) ;定时器0高8位赋值 MOV TL0,#LOW(65535-50000) ;定时器0低8位赋值 SETB TR0 ;启动定时器0 MOV R0,#11 ;定时器中断循环次数 LCALL DISPLAY_MIN ;显示分钟初值 LCALL DISPLAY_HOUR ;显示时钟初值 START: LCALL DISPLAY_MIN ;显示定时值 LCALL DISPLAY_HOUR JMP START /***************定时器中断程序******************/ TIME_TF0: CLR TR0 ;关闭定时器 MOV TH0,#HIGH(65535-50000) ;定时器重新赋值 MOV TL0,#LOW(65535-50000) SETB TR0 ;启动定时器 DJNZ R0,RETURN ;1秒定时。判断R0是否为零,返回到START。如等于零,执行下一条。 MOV R0,#11 ;重新赋值 INC SEC ;秒寄存器加1 MOV R3,SEC ;秒的值载人R3 CJNE R3,#60,TIME_TF0 ;判断SEC不等于60,返回到定时器中断。 等于60下一条 MOV SEC,#0 ;秒值清零 JMP TIME_MIN ;跳到分钟寄存器 RETURN:RETI TIME_MIN: ;注释同上 INC MIN MOV R3,MIN CJNE R3,#60,TIME_TF0 MOV MIN,#0 JMP TIME_HOUR TIME_HOUR: INC HOUR MOV R3,HOUR CJNE R3,#24,TIME_TF0 MOV HOUR,#0 JMP TIME_TF0 ;返回到定时器中断 /***************以下参考发表于2月24日的注释****************/ /***************分钟显示程序****************/ DISPLAY_MIN: MOV A,MIN MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************时钟显示程序****************/ DISPLAY_HOUR: MOV A,HOUR MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED3 CALL DELAY_10MS SETB LED3 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED2 CALL DELAY_10MS SETB LED2 CALL DELAY_10MS RET /**************延时程序****************/ DELAY_10MS: MOV R7,#10 D1: MOV R6,#250 D2: DJNZ R6,D2 DJNZ R7,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END |
1位数码管改成2位数码管了?可是你的电路图是4位数码管的啊! |
延续上次电路 /****************** 语言: 汇编 项目: 2位数码管显示 0-FF 芯片: STC 12C2052AD PDIP-20 日期: 2019.2.24 编写: ZCT P3.5 接数码管COM P3.4 接数码管COM P1.0-P1.7 接数码管段位a b c d e f g dp ******************/ LED BIT P3.5 ;用 LED 表示 I/O口P3.5 LED1 BIT P3.4 ORG 000H ;程序从地址 00H 开始 JMP MAIN ;调转到 MAIN 函数 MAIN: MOV SP,#60H ;堆栈地址设为 60H MOV P1,#0FFH ;P1口值1 MOV P3,#0FFH MOV DPTR,#TABLE ;表格数据放入指针 MOV R0,#0FFH ;显示赋初值,并放入寄存器 R0 DISP: MOV R1,#30 ;刷新次数,可以更改立即数看效果。 MOV A,R0 ;装入初值 MOV B,#16 ;16进制调整. 可以载人 10 看看效果。 DIV AB ;除 MOV 30H,B ;余数放B MOV 31H,A ;商放A LOOP: MOV A,31H ;装入商 MOVC A,@A+DPTR ;查表 MOV P1,A ;显示A的数据 CLR LED1 ;LED1 值0,打开 CALL DELAY_5MS ;延时 SETB LED1 ;LED1 值1,关闭 MOV A,30H ;同上 MOVC A,@A+DPTR MOV P1,A CLR LED CALL DELAY_5MS SETB LED DJNZ R1,LOOP ;刷新次数循环,一定要调至LOOP。动手改跳到DISP看看效果 INC R0 ;R0 加1 CJNE R0,#255,DISP ;判断R0 是否等于 255,不等调至DISP MOV R0,#0 ;清R0 JMP MAIN DELAY_5MS: MOV R3,#20 D3: MOV R4,#250 DJNZ R4,$ DJNZ R3,D3 RET TABLE: ;0-F 表格查询 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-9 DB 90H,88H,80H,0C6H,0C0H,86H,8EH ;A-F END |
本帖需要重新编辑补全电路原理图即可获得100+黑币(帖子下方有编辑按钮) |