按下按键1,8位共阴极数码管输出2022-606。
按下按键2,8位共阴极数码管输出606-1132。
在1和2之间显示内容切换。
哪位路人知道的,请帮我解答一下,万能的CSDN区
#include<reg52.h>
#define DataPort P0
sbit K1=P3^0;
sbit K2=P3^1;
sbit LATCH1=P2^2;
sbit LATCH2=P2^3;
unsigned char seg7code[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选
unsigned char str1[9]={0x7d,0x3f,0x7d,0x40,0x06,0x06,0x4f,0x5b};//606-1132
unsigned char str2[9]={0x5b,0x3f,0x5b,0x5b,0x40,0x7d,0x3f,0x7d};//2022-606
unsigned char i=0;
unsigned char j=0;
void Delay(int x) //@12.000MHz
{ //延时函数x,参数代表延时的毫秒数
while(x--){
unsigned char i, j;
i = 2;
j = 239;
do{
while (--j);
} while (--i);
}
}
void key_scan()
{//按键扫描
if(!K1){Delay(20);if(!K1){while(!K1);j=1;}}
if(!K2){Delay(20);if(!K2){while(!K2);j=2;}}
}
void display()
{
if(j==1)
{
DataPort=seg7code[i];//送位选
LATCH2=1;//开位选
LATCH2=0;//关位选,到这里完成了位选信号的输送
DataPort=str2[i];//送段选(2022-606)
LATCH1=1;//开段选
LATCH1=0;//关段选,到这里,完成了段选信号的输送
Delay(1);//延时一下,让数码管稳定显示1毫秒
i++; //让位选码和段选码数组下标加1
if(8==i) //因为数码管只有8位,数组长度也只有八位,i不能超过8
i=0; //超过8要让i=0;
}
if(j==2) //同上
{
DataPort=seg7code[i];
LATCH2=1;
LATCH2=0;
DataPort=str1[i];//606-1132
LATCH1=1;
LATCH1=0;
Delay(1);
i++;
if(8==i)
i=0;
}
}
main()
{
while(1)
{
key_scan();//按键扫描
display();//显示
}
}