我的学习板上是3*3的键盘,数码管位选是直接接P2口的,我的目的是按几数码管就显几,不按的时候就不显,但现在发现我按几是显示了几,但不按的时候数码管还是有显示
程序如下,看看问题出在哪,有位高手说要用定时动态扫描,能不能具体说下
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dig1=P2^0 ;
sbit dig2=P2^1 ;
sbit dig3=P2^2 ;
sbit dig4=P2^3 ;
uchar temp,num,a;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
void display(uchar );
void delay(uint z);
void main()
{
while(1)
{
display( num);
P3=0xfb;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
delay(5);
P3=0xfb;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
switch(temp)
{
case 0xc3:num=1;break;;
case 0xa3:num=2;break;
case 0x63:num=3;break;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
delay(5);
P3=0xf7;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
switch(temp)
{
case 0xc3:num=4;break;;
case 0xa3:num=5;break;
case 0x63:num=6;break;
}
}
}
P3=0xef;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
delay(5);
P3=0xef;
temp=P3;
temp=temp&0xe3;
if(temp!=0xe3)
{
switch(temp)
{
case 0xc3:num=7;break;
case 0xa3:num=8;break;
case 0x63:num=9;break;
}
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
此帖出自
小平头技术问答
一周热门 更多>