/*现在问题是按下键盘,键值如何输出*/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
int m , num , firstflot ;
void delay( uint m ) //延时函数
{
uint x , y ;
for( x = m ; x > 0 ; x--)
for( y = 110 ; y > 0 ; y--);
}
void keyscan() //扫描键盘
{
int temp ;
P2=0x7f;
temp=P2;
temp=temp&0x0f; //判断第一行按键
if(temp != 0x0f )
{
delay( 10 ) ;
temp = P2 ; //重读P2口值
temp = temp & 0x0f ;
if( temp != 0x0f )
{
temp = P2 ;
switch(temp)
{
case 0x77: num=1; //1
firstflot=1 ;
break;
case 0x7b: num=2; //2
firstflot=1 ;
break;
case 0x7d: num=3; //3
firstflot=1 ;
break;
case 0x7e: num = '+' ; //+
break;
}
while(temp != 0x0f) //等待按键释放
{
temp = P2;
temp = temp & 0x0f;
}
}
}
P2 = 0xbf ; //扫描第二行键盘
temp = P2 ;
temp = temp & 0x0f;
if( temp != 0x0f )
{
delay( 10 ) ; //消抖
temp = P2 ;
temp = temp & 0x0f ;
if( temp != 0x0f )
{
temp = P2 ;
switch( temp )
{
case 0xb7: num=4; //4
firstflot=1 ;
break;
case 0xbb: num=5; //5
firstflot=1 ;
break;
case 0xbd: num=6; //6
firstflot=1 ;
break;
case 0xbe: num = '-' ; //-
break;
}
while( temp != 0x0f )
{
temp = P2 ;
temp = temp & 0x0f ;
}
}
}
P2 = 0xdf ; //扫描第三行键盘
temp = P2 ;
temp = temp & 0x0f ;
if( temp != 0x0f )
{
delay( 10 ) ; //消抖
temp = P2 ;
temp = temp & 0x0f ;
if( temp != 0x0f )
{
temp = P2 ;
switch( temp )
{
case 0xd7: num=7; //7
firstflot=1 ;
break;
case 0xdb: num=8; //8
firstflot=1 ;
break;
case 0xdd: num=9; //9
firstflot=1 ;
break;
case 0xde: num = '*' ; //*
break;
}
while( temp != 0x0f )
{
temp = P2;
temp = temp & 0x0f ;
}
}
}
P2 = 0xef ; //扫描第四行键盘
temp = P2 ;
temp = temp & 0x0f ;
if( temp != 0x0f )
{
delay( 10 ) ; //消抖
temp = P2 ;
temp = temp & 0x0f;
if( temp != 0x0f )
{
temp = P2 ;
switch( temp )
{
case 0xe7: num = '$' ; //归0
break;
case 0xeb: num = 0 ; //0
firstflot=1 ;
break;
case 0xed: num = '=' ; //=
break;
case 0xee: num = '/' ; //除
break;
}
}
}
// return num ;
}
void jisuan()
{
m=m*10+num;
num=0;
}
void display(m)
{
if(m<10)
{
P0=0x7f ;
P1=table[m];
delay(1);
}
// if(m>10&&m<100)
// {
// P0=0x7f;
// P1=table[m%10];
// delay(1);
// P0=0xbf;
// P1=table[m/10];
// delay(1);
// }
// if(m>100&&m<1000)
// {
// P0=0xdf ;
// P1=table[m/100];
// delay(1);
// P0=0xbf;
// P1=table[m%100/10];
// delay(1);
// P0=0x7f ;
// P1=table[m%100%10];
// delay(1);
// }
// if(m>1000&&m<10000)
// {
// P0=0xef ;
// P1=table[m/1000];
// delay(1);
// P0=0xdf ;
// P1=table[m%1000/100];
// delay(1);
// P0=0xbf;
// P1=table[m%1000%100/10];
// delay(1);
// P0=0x7f ;
// P1=table[m%1000%100%10];
// delay(1);
// }
// if(m>10000&&m<100000)
// {
// P0=0xf7 ;
// P1=table[m/10000];
// delay(1);
// P0=0xef ;
// P1=table[m%10000/1000];
// delay(1);
// P0=0xdf ;
// P1=table[m%10000%1000/100];
// delay(1);
// P0=0xbf;
// P1=table[m%10000%1000%100/10];
// delay(1);
// P0=0x7f ;
// P1=table[m%10000%1000%100%10];
// delay(1);
// }
}
void main()
{
while(1)
{
keyscan() ;
jisuan() ;
display(m) ;
}
}
|