8路LED的二进制加法器的实现
1.8路LED的二进制加法器对应的电路图为:
开发板样图
8052芯片图
LED流水灯模块图
8*8点阵模块图
8位数码管模块图
2. 8路LED的二进制加法器的中心思想:利用DB字节库取值显示加法过程
3.8路LED的二进制加法器的实现伪过程:
a.8路LED分成高4路和低4路,只取四路的0-15的值,令四路为关闭状态。
(这样取值后就只需做两个16字节的DB,不必做16X16这么大规模的数据,但是也提出了一个低4位向高4位进位的问题。下面就讨论这个问题)
两个16字节DB如下:
Table1: DB 0FFH,07FH,0BFH,03FH,0DFH,05FH,09FH,01FH,0EFH,06FH,0AFH,02FH,0CFH,04FH,08FH,00FH ;L位,即开发板上面右边4个LED灯的0~15
Table2: DB 0F7H,0FBH,0F3H,0FDH,0F5H,0F9H,0F1H,0FEH,0F6H,0FAH,0F2H,0FCH,0F4H,0F8H,0F0H,0FFH ;H位,即开发板上面左边4个LED灯的1~15 0
b.大致思路:高4位为0,低4位从0自加到15(取之于Table1);再加1,低4位清零,高四位加1。低4位再从0自加到15,然后加1同前面。
上述四路中存在一个问题,高低不能同时显示,需要处理同时显示问题。
详细思路:高4位为0——低4位从0自加到15取Table1中对应显示值送入P0;再加1,高4位加1,低4位清零,此时跳到“低4位为0”;
再在此基础上继续加,跳到“低4位不为0”然后对高4位判断是否为零;
如此循环进行。
低4位为0——直接取高4位数字对应Table2中显示值送入P0
低4位不为0——高4位为0——直接取低4位数字对应Table1中显示值送入P0
低4位不为0——高4位不为0——取低4位数字对应Table1中显示值 和 高4位数字对应Table2中显示值 后,相与然后送入P0
4.8路LED的二进制加法器的实现代码:
ORG 0000H LJMP START ;程序开始 START: ACALL INIT ;主程序 Main: MOV R0,#16 MOV R1,#16 MOV R2,#10H MOV R3,#10H MOV DPTR,#1000H MOV 1020H,#00H ;H位置零,存H位数值 MOV A,#0F7H ;H位LED值 PUSH ACC ADDHL: CLR A ;L位不为零操作 SETB P1.2 MOVC A,@A+DPTR MOV R4,A ;R4暂存L位的DB值 MOV A,1020H JZ ADDH ;H位为零跳转;H位不为零,继续执行 POP ACC ;H位不为零操作 MOV 1030H,A ANL A,R4 MOV P0,A MOV A,1030H PUSH ACC LJMP Next ADDH: MOV P0,R4 ;H位为零操作 Next: CLR P1.2 ACALL DELAY INC DPTR DEC R0 MOV A,R0 JNZ ADDHL ;不为零跳转 MOV DPL,R2 MOV DPH,R3 ADDHZ: POP ACC ;L位为零操作,并保存H位到累加器A CLR A SETB P1.2 MOVC A,@A+DPTR MOV P0,A PUSH ACC INC 1020H CLR P1.2 ACALL DELAY INC DPTR MOV R2,DPL MOV R3,DPH DEC R1 MOV A,R1 MOV R0,#16 MOV DPTR,#1000H JNZ ADDHL LJMP Main ;初始化函数 INIT: SETB P1.3 ;关闭点阵 MOV P0,#00H CLR P1.3 SETB P1.1 ;关闭数码管 MOV P0,#0FFH CLR P1.1 RET ;延时函数 DELAY: MOV R5,#20 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET ;数据表 ORG 1000H Table1: DB 0FFH,07FH,0BFH,03FH,0DFH,05FH,09FH,01FH,0EFH,06FH,0AFH,02FH,0CFH,04FH,08FH,00FH ;L位,即开发板上面右边4个LED灯的0~15 Table2: DB 0F7H,0FBH,0F3H,0FDH,0F5H,0F9H,0F1H,0FEH,0F6H,0FAH,0F2H,0FCH,0F4H,0F8H,0F0H,0FFH ;H位,即开发板上面左边4个LED灯的1~15 0 END ;程序结束
5.编写程序阶段需要注意的问题
注意事项:
(1)寄存器不够用的情况下,可以把dir做暂时寄存器
(2)关于堆栈的问题:a.先PUSH(压栈),后POP(出栈)【对称原则】
b.先进后出