# include & ltreg52.h & gt
#定義uint無符號整數
#定義uchar無符號字符
sbit dula=p2^6;
sbit wela=p2^7;
void顯示(長z);
龍k,temp,num,num1,num2,num3,num4,f,f1,f2,f3,天鵝,萬,錢,白,石,葛,鄂,彪;
/*f1=1:按鍵已按下。f=1 f2=1:已按下簽名鍵。f3=0/1:輸入第壹個數字/輸入第二個數字,Biao = 1/2。
Equ=1:按等號,num:keyscan中的鍵值為num1:得到連續輸入值num2:第壹個輸入值,num3:第二個輸入值。
num4的值:顯示的值*/
uchar代碼表[]={
0x3f,0x06,0x5b,0x4f,
0x66、0x6d、0x7d、0x07、
0x7f、0x6f、0x77、0x7c、
0x39,0x5e,0x79,0x71,0 };//數碼管段選擇代碼
uchar碼表1[]={0xfe,0xfd,0xfb,0xf7,0xef,0x df };//數碼管位置選擇代碼
Void delay(uint z)//延遲函數
{
uint x,y;
for(x = z;x & gt0;x -)
for(y = 110;y & gt0;y-);
}
Long keyscan()//鍵盤掃描函數
{
P3 = 0x Fe;
P3 & amp;0xf0
while(temp!=0xf0)
{
延時(10);
P3 & amp;0xf0
while(temp!=0xf0)//鍵盤去抖
{
temp = P3;
開關(溫度)
{
案例0x ee:num = 7;f 1 = 1;F2 = 0;打破;
案例0x de:num = 8;f 1 = 1;F2 = 0;打破;
案例0x be:num = 9;f 1 = 1;F2 = 0;打破;
案例0x7e:num = '/';f 1 = 1;f = 1;F2 = 1;F3 = 1;Biao = 4;打破;
}
while(temp!=0xf0)//放開檢測
{
temp = P3;
溫度和濕度。= 0xf0
顯示(num 4);
}
}
}
P3 = 0x FD;
P3 & amp;0xf0
while(temp!=0xf0)
{
延時(10);
P3 & amp;0xf0
while(temp!=0xf0)
{
temp = P3;
開關(溫度)
{
案例0x ed:num = 4;f 1 = 1;F2 = 0;打破;
案例0x DD:num = 5;f 1 = 1;F2 = 0;打破;
案例0x BD:num = 6;f 1 = 1;F2 = 0;打破;
案例0x7d:num = ' * ';f 1 = 1;f = 1;F2 = 1;F3 = 1;Biao = 3;打破;
}
while(temp!=0xf0)
{
temp = P3;
溫度和濕度。= 0xf0
顯示(num 4);
}
}
}
P3 = 0x FB;
P3 & amp;0xf0
while(temp!=0xf0)
{
延時(10);
P3 & amp;0xf0
while(temp!=0xf0)
{
temp = P3;
開關(溫度)
{
case 0xeb:num = 1;f 1 = 1;F2 = 0;打破;
案例0x db:num = 2;f 1 = 1;F2 = 0;打破;
案例0x bb:num = 3;f 1 = 1;F2 = 0;打破;
案例0x7b:num = '-';f 1 = 1;f = 1;F2 = 1;F3 = 1;Biao = 2;打破;
}
while(temp!=0xf0)
{
temp = P3;
溫度和濕度。= 0xf0
顯示(num 4);
}
}
}
P3 = 0xf 7;
P3 & amp;0xf0
while(temp!=0xf0)
{
延時(100);
P3 & amp;0xf0
while(temp!=0xf0)
{
temp = P3;
開關(溫度)
{
案例0xe 7:num = ' c ';f 1 = 1;F2 = 1;Biao = 5;equ = 1;打破;
案例0xd 7:num = 0;f 1 = 1;F2 = 0;打破;
case 0xb 7:num = ' = ';f 1 = 1;f = 1;F2 = 1;equ = 1;打破;
案例0x 77:num = '+';f 1 = 1;f = 1;F2 = 1;F3 = 1;標= 1;打破;
}
while(temp!=0xf0)
{
temp = P3;
溫度和濕度。= 0xf0
顯示(num 4);
}
}
}
退貨數量;
}
Void顯示(long z)//顯示功能
{
swan = z/100000;
wan = z % 100000/10000;
錢= z % 10000/1000;
白= z % 1000/100;
Shi = z % 100/10;
ge = z % 10;
If(swan==0)//數碼管最高位為0,不現實。
{
P0 = table 1[0];
wela = 1;
wela = 0;
P0 =表[16];
杜拉= 1;
杜拉= 0;
}
其他
{
P0 = table 1[0];
wela = 1;
wela = 0;
P0 =表[swan];
杜拉= 1;
杜拉= 0;
延遲(2);
}
如果(!(天鵝| |萬))//前兩位都為0不現實(後面類似)
{
P0 = table 1[1];
wela = 1;
wela = 0;
P0 =表[16];
杜拉= 1;
杜拉= 0;
}
其他
{
P0 = table 1[1];
wela = 1;
wela = 0;
P0 =表[wan];
杜拉= 1;
杜拉= 0;
延遲(2);
}
如果(!(天鵝| |萬| |錢))
{
P0 = table 1[2];
wela = 1;
wela = 0;
P0 =表[16];
杜拉= 1;
杜拉= 0;
}
其他
{
P0 = table 1[2];
wela = 1;
wela = 0;
P0 =表[錢];
杜拉= 1;
杜拉= 0;
延遲(2);
}
如果(!(萬| |萬| |錢| |白))
{
P0 = table 1[3];
wela = 1;
wela = 0;
P0 =表[16];
杜拉= 1;
杜拉= 0;
}
其他
{
P0 = table 1[3];
wela = 1;
wela = 0;
P0 =表[Bai];
杜拉= 1;
杜拉= 0;
延遲(2);
}
如果(!(萬| |萬| |錢| |白| |石))
{
P0 = table 1[4];
wela = 1;
wela = 0;
P0 =表[16];
杜拉= 1;
杜拉= 0;
}
其他
{
P0 = table 1[4];
wela = 1;
wela = 0;
P0 =表[Shi];
杜拉= 1;
杜拉= 0;
延遲(2);
}
P0 = table 1[5];
wela = 1;
wela = 0;
P0 =表[ge];
杜拉= 1;
杜拉= 0;
延遲(2);
}
Void jisuan()//計算連續按鍵時按下的值(例如按1計算1,按2計算12,按3計算123)。
{
k = key scan();
If(f1==1)//鍵被按下。
{
f 1 = 0;
If(f==1)//簽名鍵按下
{
f = 0;
num 1 = 0;
}
其他
num 1 = 10 * num 1+k;
If(f2==0)//有數字鍵被按下。
{
如果(f3==0)
{
num 2 = num 1;
num4 = num2
}
其他
{
num 3 = num 1;
num4 = num3
}
}
}
}
Void郭解()//按等號進行相應的計算,計算出結果。
{
如果(等式==1)
{
開關(表)
{
案例1:num 4 = num 2+num 3;打破;
情況二:num 4 = num 2-num 3;打破;
情況三:num4 = num2 * num3打破;
情況四:num 4 = num 2/num 3;打破;
情況5:num 4 = num 2 * num 2;打破;
}
}
}
void main()
{
while(1)
{
吉蘇安();
郭解();
顯示(num 4);
}
}