C51单片机实现自定义数码管显示三位数
效果图:
代码:
#include <reg52.h>
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
sbit WE = P2^7; //位定义数码管位选锁存器接口
sbit DU = P2^6; //位定义数码管段选锁存器接口
uchar code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
};
//毫秒级延时函数
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--);
for(y = 114; y > 0 ; y--);
}
void display(uint num){
uchar bai, shi, ge;
bai=num/100;
shi=num%100/10;
ge=num%10;
//bai的显示
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFE; //1111 1110
WE = 0;//锁存位选数据
DU = 1;//打开段选锁存器
P0 = leddata[bai];//
DU = 0;//锁存段选数据
delay(5);
//shi的显示
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFD; //1111 1101
WE = 0;//锁存位选数据
DU = 1;//打开段选锁存器
P0 = leddata[shi];//
DU = 0;//锁存段选数据
delay(5);
//ge的显示
P0 = 0XFF;//清除断码
WE = 1;//打开位选锁存器
P0 = 0XFB; //1111 1011
WE = 0;//锁存位选数据
DU = 1;//打开段选锁存器
P0 = leddata[ge];//
DU = 0;//锁存段选数据
delay(5);
}
void main(){
while(1)
{
display(985); //数码管显示函数
}
}
但是,以上代码中有两处需要大家根据自己的实际情况修改:
1.
sbit WE = P2^7; //位定义数码管位选锁存器接口
sbit DU = P2^6; //位定义数码管段选锁存器接口
这里段选和位选的接口大家可能与我的不同。
2.
void main(){
while(1)
{
display(985); //数码管显示函数
}
}
大循环里的display的参数可以修改,改成什么就显示什么,但是只能显示3位数字。
比如我这里改成“211”,数码管显示的就不是原来的“985”了,而是“211”.
本文中提到的display()函数是通用的,可以搬运~
如果要显示其他位数的数字,display()和一些变量的数据类型要有改动