该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
编写程序实现80C51的P0口控制一个数码管显示,让它循环显示0~9等十位数字,时间间隔为1秒钟。
利用查表程序可以完成BCD与七段码的转换,从而取代硬件七段译码电路,查表程序本身并无复杂之处,需要注意的是七段码的取值,因为七段数码管有共阳极及共阴极之分(参考本站数码管的相关文章)。
共阳极是低电平有效时有效输入。共阴极是高电平时有效输入(所以在C51单片机要使发光二极管点亮,数码管是共阳极的就要让I/O口的电位变为低电位.如果是共阴极的就是合I/O口的电位变为高电位),因些不同的器件会有不同的数码值。另外引脚信号与码位的对应关系也会影响码值,即引脚可以由高到低排列(7-1),也可以由低到高排列(1-7)。本实验的数码管为共阳极,采用由高到低的排列(特别说明.本站的学习工具全部为共阳极接法)。
例如对应0的二进制代码为11000000本实验在本站推出的实验板及学习套件上可直接使用。请参照本站产品实验部份原理图。
***************************源程序******************************
ORG 0100H ;程序起始地址
MAIN: MOV R2,#00H ;段码地址表指针清零
MOV DPTR,#TAB ;指向段码地址表起始地址
DSUP: MOV A,R2 ;将R2的内容送入累加器A
MOVC A,@A+DPTR ;累加器的值与从数据表中取出的数码显示值相加后送入累加器A
MOV P0,A ;将累加器的值送入P0口显示
MOV R1,#11111110B ;将11111110B(位选P2.0)送入寄存器R1
MOV P2,R1 ;将R1的值送入P2口进行位选
LCALL YSH1S ;调用延时1秒子程序
INC R2 ;段码地址表指针加1
CJNE R2,#0AH,DSUP ;如果0-9显示完毕,程序重新开台执行
SJMP MAIN ;跳转到MAIN入口
YSH1S:MOV R3,#05H ;延时1秒子程序
LOOP0:MOV R4,#0C8H
LOOP1:MOV R5,#0FAH
XHD: DJNZ R5,XHD
DJNZ R4,LOOP1
DJNZ R3,LOOP0
RET
TAB: DB 0C0H ;0-9段码表
DB 0F9H
DB 0A4H
DB 0B0H
DB 99H
DB 92H
DB 82H
DB 0F8H
DB 80H
DB 90H
END