當前位置:編程學習大全網 - 編程語言 - c語言編程動態小人

c語言編程動態小人

下面是我用STC89C52單片機編寫的程序,使用4*4矩陣鍵盤,連接P3口,使用六位數碼管(* * *陰極)顯示。數碼管位置選擇和芯片選擇信號分別通過兩個鎖存器連接到P0端口,位置選擇存儲器連接到P 7端口,段選擇存儲器連接到P2^6端口。矩陣鍵盤的具體連接和妳們每個人所表達的意思,從程序中就能看出來。樓主可以根據自己的硬件修改我的程序,應該不錯。下面的程序是我自己設計的,經過硬件測試,可以實現兩個整數的加、減、乘、除、平方。祝妳成功!

# 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);

}

}

  • 上一篇:指揮信息系統就業前景
  • 下一篇:瑞星全功能和NOD32安全套裝哪個保護和殺毒能力強
  • copyright 2024編程學習大全網