|
#include "reg51.h"
char code pos[]={0xE0,0XD0,0XB0,0X70};
char val[4],n;
char mode=0;
int num=0,num1=0,num2=0;
char opt,innum; //操作命令,操作次數;
sbit Col1=P1^4;
sbit Col2=P1^5;
sbit Col3=P1^6;
sbit Col4=P1^7;
char keyvalue;
void delay(char n) //減速
{
char i,j;
for(i=0;i<n;i++)
for(j=0;j<100;j++)
;
}
void main()
{
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
EA=1;
ET0=1;
IT0=1;
EX0=1;
P1=0xf0;
while(1)
{
val[0]=num/1000;
val[1]=num%1000/100;
val[2]=num%1000%100/10;
val[3]=num%10;
;
}
}
void u1_func() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P2=pos[n]+val[n];
n++;
n=n%4;
}
void key_click() interrupt 0
{
delay(5);
if(P1!=0xf0)
{
EA=0;
P1=0xfe; //1111 1110
if(Col1==0) keyvalue = 0;
else if(Col2==0) keyvalue = 1;
else if(Col3==0) keyvalue = 2;
else if(Col4==0) keyvalue = 3;
P1=0xfd; //1111 1101
if(Col1==0) keyvalue = 4;
else if(Col2==0) keyvalue = 5;
else if(Col3==0) keyvalue = 6;
else if(Col4==0) keyvalue = 7;
P1=0xfb; //1111 1011
if(Col1==0) keyvalue = 8;
else if(Col2==0) keyvalue = 9;
else if(Col3==0) keyvalue = 10; //代表*
else if(Col4==0) keyvalue = 11; //代表/
P1=0xf7; //1111 0111
if(Col1==0) keyvalue = 12; //代表+
else if(Col2==0) keyvalue = 13; //代表-
else if(Col3==0) keyvalue = 14; //代表=
else if(Col4==0) keyvalue = 15; //代表AC
P1=0xf0;
switch(keyvalue)
{
case 10:
case 11:
num1=num;
num=0;
opt=keyvalue;
innum=0;
break;
case 12: //+
case 13: //-
num1=num;
num=0;
opt=keyvalue;
innum=0;
break;
case 14: //等于
num2=num;
if(opt==12) //+
{
num=num1+num2;
if(num>9999)
{
num=9999;
}
}
if(opt==13) //-
{
num=num1-num2;
if(num<0)
{
num=0;
}
}
if(opt==10) //*
{
num=num1*num2;
if(num>9999)
{
num=9999;
}
}
if(opt==11) //除
{
num=num1/num2;
if(num<0)
{
num=0;
}
}
break;
case 15: num=0; break; //清零
default:
innum++;
if(innum<5)
{
num=num*10+keyvalue;
}
}
}
EA=1;
}
|
-
-
0417.rar
2020-3-13 10:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
54.16 KB, 下載次數: 4, 下載積分: 黑幣 -5
程序和仿真
|