#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
unsigned char code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陰極數碼管
unsigned char keynum,flag;
unsigned char num1,num2,flag1,flag2,flag3,flag4;
uchar keyscan(void);
void display();
void keyfind();
void keyprocess(void);
void delay(unsigned int z)
{
unsigned int x,y;
for(x=110; x>0; x--)
for(y=z; y>0; y--);
}
void main(void)
{
while(1)
{
keyfind();
keyprocess();
display();
}
}
uchar keyscan(void)
{
unsigned char cord_l,cord_h;
P1=0xf0;
if ((P1&0xf0)!=0xf0)
{
delay(50);
if ((P1&0xf0)!=0xf0)
{
cord_l = P1 & 0xf0;
P1 = cord_l | 0x0f;
cord_h = P1 & 0x0f;
flag++;
while( (P1 & 0x0f) != 0x0f );
return (cord_l + cord_h);
}
}
}
void keyfind()
{
switch( keyscan() )
{
//第一行鍵值碼
case 0xee:
keynum=1;
break;
case 0xde:
keynum=2;
break;
case 0xbe:
keynum=3;
break;
case 0x7e:
keynum=4;
break;
//第二行鍵值碼
case 0xed:
keynum=5;
break;
case 0xdd:
keynum=6;
break;
case 0xbd:
keynum=7;
break;
case 0x7d:
keynum=8;
break;
//第三行鍵值碼
case 0xeb:
keynum=9;
break;
case 0xdb:
keynum=10;
break;
case 0xbb:
keynum=11;
break;
case 0x7b:
keynum=12;
break;
//第四行鍵值碼
case 0xe7:
keynum=13;
break;
case 0xd7:
keynum=14;
break;
case 0xb7:
keynum=15;
break;
case 0x77:
keynum=16;
break;
}
}
void keyprocess(void)
{
switch(keynum)
{
case 1:
if(flag==1)
num1=7;
if(flag==3)
num2=7;
break;
case 2:
if(flag==1)
num1=4;
if(flag==3)
num2=4;
break;
case 3:
if(flag==1)
num1=1;
if(flag==3)
num2=1;
break;
case 5:
if(flag==1)
num1=8;
if(flag==3)
num2=8;
break;
case 6:
if(flag==1)
num1=5;
if(flag==3)
num2=5;
break;
case 7:
if(flag==1)
num1=2;
if(flag==3)
num2=2;
break;
case 8:
if(flag==1)
num1=0;
if(flag==3)
num2=0;
break;
case 9:
if(flag==1)
num1=9;
if(flag==3)
num2=9;
break;
case 10:
if(flag==1)
num1=6;
if(flag==3)
num2=6;
break;
case 11:
if(flag==1)
num1=3;
if(flag==3)
num2=3;
break;
case 4:
flag1=1;
break;
case 12:
flag1=2;
break;
case 13:
flag2=1;
break;
case 14:
flag2=2;
break;
case 15:
flag2=3;
break;
case 16:
flag2=4;
break;
}
keynum=0;
}
void display()
{
unsigned char num,num_shi,num_ge;
if(flag1==1)
{
num1=0;
num2=0;
num=0;
flag=0;
flag1=0;
flag2=0;
flag3=0;
flag4=0;
P2=0xff;
}
if(flag==1|flag3==1)
{
flag3=1;
P2=0xfe;
P0=table[num1];
delay(10);
}
if(flag==3|flag4==1)
{
flag4=1;
P2=0xfd;
P0=table[num2];
delay(10);
}
if(flag2==1&&flag1==2)
{
num=num1/num2;
}
if(flag2==2&&flag1==2)
{
num=num1*num2;
}
if(flag2==3&&flag1==2)
{
num=num1-num2;
}
if(flag2==4&&flag1==2)
{
num=num1+num2;
}
num_shi=num/10;
num_ge=num%10;
if(flag==4)
{
P2=0xfb;
P0=table[num_shi];
delay(10);
P2=0xf7;
P0=table[num_ge];
delay(10);
}
}
不正常的計算器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.