51单片机类 在四位共阳极数码管上显示键盘输入
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
bit flag;
unsigned char key_scannum[] = {0xef,0xdf,0xbf,0x7f};
unsigned char table[]= {0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};//?ü?ì°′?ü??
unsigned char led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //P0?ú????±à??
void delay(uint x) //?óê±3ìDò
{
uint y;
for(x;x>0;x--)
for(y=0;y<100;y++);
}
unsigned char keyscan(void) //?ü?ìé¨?è?μoˉêy
{
unsigned char i,j;
P1=0x0f; //?ì2éê?·?óD?ü°′??
if(P1!=0x0f) //±íê?óD°′?ü°′??
{
delay(1); //�?
if(P1!=0x0f)
for(i = 0;i < 4;i++)
{
P1 = key_scannum[i];
if(P1 != key_scannum[i])//′?DDóD?ü°′??
for(j = 0;j < 16;j++)
{
if(P1 == table[j])
{
flag=1;
return(j);
}
}
}
}
while((P1 & 0x0f)<0x0f);
return(0);
}
void display(uint num)
{
uint ge,shi,bai,qian;
qian=num/1000;
P0=led[qian];
P2=0xf7;
delay(1);
P2=0xff;
bai=num%1000/100;
P0=led[bai];
P2=0xfb;
delay(1);
P2=0xff;
shi=num%100/10;
P0=led[shi] & 0x7f;
P2=0xfd;
delay(1);
P2=0xff;
ge=num%10;
P0=led[ge];
P2=0xfe;
delay(1);
P2=0xff;
}
void main(void)
{
uint que,num=0;
while(1)
{
que=keyscan();
if(flag==1)
{
num=num*10+que;
flag=~flag;
}
display(num);
}
}
这是写的程序,出不来结果,各位大神看一下,是哪里出问题了?
#define uint unsigned int
#define uchar unsigned char
bit flag;
unsigned char key_scannum[] = {0xef,0xdf,0xbf,0x7f};
unsigned char table[]= {0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};//?ü?ì°′?ü??
unsigned char led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //P0?ú????±à??
void delay(uint x) //?óê±3ìDò
{
uint y;
for(x;x>0;x--)
for(y=0;y<100;y++);
}
unsigned char keyscan(void) //?ü?ìé¨?è?μoˉêy
{
unsigned char i,j;
P1=0x0f; //?ì2éê?·?óD?ü°′??
if(P1!=0x0f) //±íê?óD°′?ü°′??
{
delay(1); //�?
if(P1!=0x0f)
for(i = 0;i < 4;i++)
{
P1 = key_scannum[i];
if(P1 != key_scannum[i])//′?DDóD?ü°′??
for(j = 0;j < 16;j++)
{
if(P1 == table[j])
{
flag=1;
return(j);
}
}
}
}
while((P1 & 0x0f)<0x0f);
return(0);
}
void display(uint num)
{
uint ge,shi,bai,qian;
qian=num/1000;
P0=led[qian];
P2=0xf7;
delay(1);
P2=0xff;
bai=num%1000/100;
P0=led[bai];
P2=0xfb;
delay(1);
P2=0xff;
shi=num%100/10;
P0=led[shi] & 0x7f;
P2=0xfd;
delay(1);
P2=0xff;
ge=num%10;
P0=led[ge];
P2=0xfe;
delay(1);
P2=0xff;
}
void main(void)
{
uint que,num=0;
while(1)
{
que=keyscan();
if(flag==1)
{
num=num*10+que;
flag=~flag;
}
display(num);
}
}
这是写的程序,出不来结果,各位大神看一下,是哪里出问题了?
不要只是说出不来结果,把问题的详细情况说清楚,比如设计的功能是怎样的,在什么样的操作下出不来结果,有什么反应没有,把异常描述清楚别人才好帮你分析,不然很少有人有时间去仔细看你的程序帮你一句句分析问题的。
数码管只显示两位,键盘按下没反应
深圳万达行电子,厂家直销,专业生产整流二极管以及整流桥堆,M7 SS14 MB10S MB10F M7F 特价销售,详情请咨询QQ2471806688,欢迎咨询下单
控制位没有声明 单片机不知道电平跳变他要干嘛
