level 9
奥巴小鸟free
楼主
仿真原理图如下

程序如下
sbit P3_0 =P3^0;
unsigned char LedChar[]= //0-F
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
void delay(unsigned long int i)
{
unsigned long int k;
for(k=0;k<i;k++);
}
unsigned int KeyDriver();
void KeyAction(unsigned int x);
bit flag;
void main()
{
unsigned int A;
P0 = 0x0f;
P1=LedChar[0];
P3_0 = 1;
while(1)
{
A=KeyDriver();
if(A)
KeyAction(A-1);
}
}
#define High_PORT P0
#define Low_PORT P2
unsigned int KeyDriver()
{
unsigned char i;
unsigned int back;
unsigned char P2_data = 0;
Low_PORT=0xF0;// P2: 1111 0000
if((High_PORT&0x0f)!=0x0F){//µÚÒ»´ÎÅжÏ
delay(200);
if((High_PORT&0x0f)!=0x0F){//µÚ¶þ´ÎÅÐ¶Ï ´¥·¢P2ÒÆ¶¯
P2_data = 0xFE;
for(i=0;i<4;i++){
Low_PORT = (P2_data<<i);
back = (High_PORT & 0x0f);
if(back!=0x0F){
switch(back){//ÐÐ
case 0x0E:back= 0*4+i;break;// 0000 1110 10:A 11:b 12:C 13:D 14:E 15:f
case 0x0D:back =1*4+i;break;//0000 1101
case 0x0b:back= 2*4+i;break; //0000 1011
case 0x07:back= 3*4+i;break; //0000 0111
default:break;
}
return (back +1);
}
}
}
}
return 0;
}
void KeyAction(unsigned int x)
{
P1=LedChar[x];
}
2022年05月19日 08点05分
1

程序如下sbit P3_0 =P3^0;
unsigned char LedChar[]= //0-F
{
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
void delay(unsigned long int i)
{
unsigned long int k;
for(k=0;k<i;k++);
}
unsigned int KeyDriver();
void KeyAction(unsigned int x);
bit flag;
void main()
{
unsigned int A;
P0 = 0x0f;
P1=LedChar[0];
P3_0 = 1;
while(1)
{
A=KeyDriver();
if(A)
KeyAction(A-1);
}
}
#define High_PORT P0
#define Low_PORT P2
unsigned int KeyDriver()
{
unsigned char i;
unsigned int back;
unsigned char P2_data = 0;
Low_PORT=0xF0;// P2: 1111 0000
if((High_PORT&0x0f)!=0x0F){//µÚÒ»´ÎÅжÏ
delay(200);
if((High_PORT&0x0f)!=0x0F){//µÚ¶þ´ÎÅÐ¶Ï ´¥·¢P2ÒÆ¶¯
P2_data = 0xFE;
for(i=0;i<4;i++){
Low_PORT = (P2_data<<i);
back = (High_PORT & 0x0f);
if(back!=0x0F){
switch(back){//ÐÐ
case 0x0E:back= 0*4+i;break;// 0000 1110 10:A 11:b 12:C 13:D 14:E 15:f
case 0x0D:back =1*4+i;break;//0000 1101
case 0x0b:back= 2*4+i;break; //0000 1011
case 0x07:back= 3*4+i;break; //0000 0111
default:break;
}
return (back +1);
}
}
}
}
return 0;
}
void KeyAction(unsigned int x)
{
P1=LedChar[x];
}