本文内容列表:
如果只显示最低两位,可以用正常显示模式(8位)扫描显示,但将七段码其余6位全部改为不显示(0x00或0xff),或者可以选择所有数字闭合(即0x00或0xff),另一种方法是只扫描低2位,其余不打开。
1。首先实现对数码管数码显示的控制
2。需要扫描两个数码管显示,扫描频率自己控制
3。两个数码管分别显示数字
如何使用键盘控制使用51单片机的数码管显示。
参考如下:
1。首先,编写代码并点亮数码管。
2。编写完源代码后,请确保原始代码正确。
3。确认代码正确后,进行下一步,就是删除这行代码中的这四个字(箭头所指)。
4。然后如图所示,四个字已经被删除了,修改对应的码号即可。
5。这里将代表数字0的代码进行了修改,如图所示。
6。最后编写代码,将生成的十六进制文件写入单片机进行响应,数码管上显示的数字变为0。
动态显示有固定格式、分配、显示开启、延迟、显示关闭。假设P0口接数据显示位,P2口低4位接片选,
P2=TAB[1]; //赋值
P3_0=0; //开启显示第一位数字
FOR(I=0;I200:I++);//延迟
P3_0=1; //关闭第一位数字显示
P2=TAB[2];
P3_1=0; //打开第二位显示
FOR(I=0;I200:I++);
P3_1=1;
该程序是让两个数码管分别显示1和2。请注意,头文件 regx52.h 包含在程序的开头。如果包含reg52.h则无法编译
#include "reg51.h"
#define uchar 无符号字符
uchar display_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar时间[8]={2,0,1,2,1,1,4,5};
//uchar time[3]={0,0,0};
无效延迟(void)
{
uchar i;
for(i=250;i0;i--);
}
无效显示()
{
P2=0x80;
P0=显示代码[时间[0]];
延迟();
P2=0x00;
P2=0x40;
P0=显示代码[时间[1]];
延迟();
P2=0x00;
P2=0x20;
P0=显示代码[时间[2]];
延迟();
P2=0x00;
P2=0x10;
P0=显示代码[时间[3]];
延迟();
P2=0x00;
P2=0x08;
P0=显示代码[时间[4]];
延迟();
P2=0x00;
P2=0x04;
P0=显示代码[时间[5]];
延迟();
P2=0x00;
P2=0x02;
P0=显示代码[时间[6]];
延迟();
P2=0x00;
P2=0x01;
P0=显示代码[时间[7]];
延迟();
P2=0x00;
}
空主(空)
{
uchar i;
同时(1)
{
for(i=0;i100;i++)
{
显示();
}
}
}
主要:
MOV DPTR,#TAB
MOV R7,#00H;十位计数
MOV R2,#00H;个位计数
DSUP0:
MOV R6,#00H;扫描速度计数
DSUP:
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
CLR P20;显示个位
SETB P21
LCALL YSH2S
MOV A,R7
MOVC A,@A+DPTR
MOV P0,A
SETB P20
CLR P21
LCALL YSH2S
INC R6
CJNE R6,#3FH,DSUP
INC R2
ACALL YSH2S
CJNE R2,#0AH,DSUP0
INC R7
MOV R2,#00H
CJNE R7,#0AH,DSUP0
AJMP 主
YSH2S:MOV R3,#01H
LOOP2:MOV R4,#028H
LOOP21:MOV R5,#05AH
XHD3:DJNZ R5,XHD3
DJNZ R4,LOOP21
DJNZ R3,LOOP2
RET
TAB:DB 0C0H
DB 0F9H
DB 0A4H
DB 0B0H
DB 099H
DB 092H
DB 082H
DB 0F8H
DB 080H
DB 090H
DB 088H
DB 083H
DB 0C6H
DB 0A1H
DB 086H
DB 08EH
完