利用8个数码管显示座位号+字母+学号后六位 可以了解到此程序实现了数码管显示OFF 我们可以改的简单一点如下 实现的效果如图,程序如下 下面分享一下:共阳极、共阴极数码管编码表 共阳极: 位选为高电平(即1)选中数码管, 各段选为低电平(即0接地时)选中各数码段。 共阴极:
位选为低电平(即0)选中数码管, 各段选为高电平(即1接+5V时)选中各数码段。
#include "reg51.h" //引入块
unsigned char a_code[]{0x3f,0x71,0x00}; //共阴级数码管字段编码,我们选取重要的几个
unsigned char a_disp[]{16,0,1,1};//四位数码管的显示缓冲区,在不改编图中程序主体的情况下确定显示区域
#incldue "reg51.h"//引入块
unsigned char a_coddde[]={0x5b,0x76,0x5b,0x55b,0x3f,0x3f,0x6d,0x6d};//共阴级数码管字段编码,我们选取重要的几个
unsigned char a_disp[]={0,1,2,3,4,5,6,7,8};//四位数码管的显示缓冲区,在不改编图中程序主体的情况下确定显示区域
sbit WX1=P2^0;//定义数码管的位置和端口
sbit WX2=P2^1;
sbit WX3=P2^2;
sbit WX4=P2^3;
sbit WX5=P2^4;
sbit WX6=P2^5;
sbit WX7=P2^6;
sbit WX8=P2^7;
void delay(unsigned int xms);//延时子函数声明
//主函数
void main(void)
{
while(1)
{
WX1=0;//点亮第一个数码管
P0=a_code[a_disp[0]];//送第一个显示数字至P0
delay(2);
WX1=1;
WX2=0;
P0=a_code[a_disp[1]];
delay(2);
WX2=1;
WX3=0;
P0=a_code[a_disp[2]];
delay(2);
WX3=1;
WX4=0;
P0=a_code[a_disp[3]];
delay(2);
WX4=1;
WX5=0;
P0=a_code[a_disp[4]];
delay(2);
WX5=1;
WX6=0;
P0=a_code[a_disp[5]];
delay(2);
WX6=1;
WX7=0;
P0=a_code[a_disp[6]];
delay(2);
WX7=1;
WX8=0;
P0=a_code[a_disp[7]];
delay(2);
WX8=1;
}
}
//下面是延时子函数
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms,i>0,i--)
for(j=102;j--);
}
0xc0,//0
0xf9,//1
0xa4,//2
0xb0,//3
0x99,//4
0x92,//5
0x82,//6
0xf8,//7
0x80,//8
0x90,//9
0x88,//A
0x83,//B
0xc6,//C
0xa1,//D
0x86,//E
0x8e, //F
0x8c, //P
0xc1,//U
0x91,//Y
0x7c,//L
0x00,//全亮
0xff //熄灭 0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00 //熄灭