亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: C51簡單計算器設計思想、Proteus仿真及源代碼 [打印本頁]

作者: 51黑電子    時間: 2015-12-9 00:36
標題: C51簡單計算器設計思想、Proteus仿真及源代碼










硬件部分比較簡單,當鍵盤按鍵按下時它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是哪個鍵被按下。

二、主程序流程圖



程序的主要思想是:將按鍵抽象為字符,然后就是對字符的處理。將操作數分別轉化為字符串存儲,操作符存儲為字符形式。然后調用compute()函數進行計算并返回結果。具體程序及看注釋還有流程圖。


三、程序源代碼

#include <reg51.h>#include <intrins.h>

#include <ctype.h>

#include <stdlib.h>


#define uchar unsigned char

#define uint unsigned int


uchar operand1[9], operand2[9];

uchar operator;


void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

uint compute(uint va1,uint va2,uchar optor);


uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0xff};


uchar dbuf[8] = {10,10,10,10,10,10,10,10};



void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}



uchar keyscan()

{

uchar skey;



P1 = 0xfe;

while((P1 & 0xf0) != 0xf0)

{

delay(3);


while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xee: skey = '7'; break;

case 0xde: skey = '8'; break;

case 0xbe: skey = '9'; break;

case 0x7e: skey = '/'; break;


default: skey = '#';

}


while((P1 & 0xf0) != 0xf0)

;

}

}



P1 = 0xfd;

while((P1 & 0xf0) != 0xf0)

{

delay(3);


while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xed: skey = '4'; break;

case 0xdd: skey = '5'; break;

case 0xbd: skey = '6'; break;

case 0x7d: skey = '*'; break;


default: skey = '#';

}


while((P1 & 0xf0) != 0xf0)

;

}

}




P1 = 0xfb;

while((P1 & 0xf0) != 0xf0)

{

delay(3);


while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xeb: skey = '1'; break;

case 0xdb: skey = '2'; break;

case 0xbb: skey = '3'; break;

case 0x7b: skey = '-'; break;


default: skey = '#';

}


while((P1 & 0xf0) != 0xf0)

;

}

}




P1 = 0xf7;

while((P1 & 0xf0) != 0xf0)

{

delay(3);


while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xe7: skey = '$'; break;

case 0xd7: skey = '0'; break;

case 0xb7: skey = '='; break;

case 0x77: skey = '+'; break;


default: skey = '#';

}


while((P1 & 0xf0) != 0xf0)

;

}

}


return skey;

}


void main()

{

uint value1, value2, value;

uchar ckey, cut1 = 0, cut2 = 0;

uchar operator;

uchar i, bool = 0;


init:


buf(0);

disp();

value = 0;

cut1 = cut2 = 0;

bool = 0;

for(i = 0;i < 9;i++)

{

operand1 = '\0';

operand2 = '\0';

}


while(1)

{

ckey = keyscan();

if(ckey != '#')

{

if(isdigit(ckey))

{

switch(bool)

{

case 0:

operand1[cut1] = ckey;

operand1[cut1+1] = '\0';

value1 = atoi(operand1);

cut1++;

buf(value1);

disp();

break;

case 1:

operand2[cut2] = ckey;

operand2[cut2+1] = '\0';

value2 = atoi(operand2);

cut2++;

buf(value2);

disp();

break;


default: break;

}

}

else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

{

bool = 1;

operator = ckey;

buf(0);

dbuf[7] = 10;

disp();

}

else if(ckey == '=')

{

value = compute(value1,value2,operator);

buf(value);

disp();

while(1)

{

ckey = keyscan();

if(ckey == '$')

goto init;

else

{

buf(value);

disp();

}

}

}

else if(ckey == '$')

{ goto init;}

}

disp();

}


}



uint compute(uint va1,uint va2,uchar optor)

{

uint value;


switch(optor)

{

case '+' : value = va1+va2; break;

case '-' : value = va1-va2; break;

case '*' : value = va1*va2; break;

case '/' : value = va1/va2; break;


default : break;

}

return value;

}



void buf(uint val)

{

uchar i;

if(val == 0)

{

dbuf[7] = 0;

i = 6;

}


else

for(i = 7; val > 0; i--)

{

dbuf = val % 10;

val /= 10;

}


for( ; i > 0; i--)

dbuf = 10;

}



void disp(void)

{

uchar bsel, n;


bsel=0x01;

for(n=0;n<8;n++)

{

P2=bsel;

P0=table[dbuf[n]];

bsel=_crol_(bsel,1);

delay(3);

P0=0xff;

}

}

C51簡單計算器.zip

1.24 MB, 下載次數: 244, 下載積分: 黑幣 -5


作者: Fandy    時間: 2016-4-10 10:08
樓主你好,我剛入門,對51引腳不懂,下載你的帖子還是一部分看不懂,你能幫我改下這個嗎?

E1A{TO2{G5LH8BKS$@OG134.png (15.72 KB, 下載次數: 178)

E1A{TO2{G5LH8BKS$@OG134.png

作者: 劉一朗    時間: 2016-5-10 18:33
Fandy 發表于 2016-4-10 10:08
樓主你好,我剛入門,對51引腳不懂,下載你的帖子還是一部分看不懂,你能幫我改下這個嗎?

你現在回了嗎
作者: 1033161327    時間: 2016-5-14 16:19
先謝樓主的分享
作者: 我愛學習123    時間: 2016-11-2 14:34
負數能運算不
作者: 吃秘密的人    時間: 2016-11-6 14:01
初學者來參考參考
作者: 江丹    時間: 2016-12-22 16:07
計算按鍵和顯示屏元件名是什么呀
作者: 598479759    時間: 2016-12-27 08:53
謝謝樓主
作者: liuzhaoxin1020    時間: 2017-1-1 12:22
很詳細的資料
作者: ljq888    時間: 2017-3-16 20:05
謝謝樓主
作者: lyz-laurance    時間: 2017-3-17 08:57
厲害,厲害
作者: liudehua    時間: 2017-6-19 09:26
有沒有匯編語言的
作者: wanglingl    時間: 2017-10-24 17:59
可以共享一下嗎
作者: sumeipingshebg    時間: 2018-5-24 14:52
被認為是不安全的文件不能下載,想要下載下來學習學習的。

捕獲.PNG (6.08 KB, 下載次數: 118)

捕獲.PNG

作者: 144569155    時間: 2020-7-1 15:35
樓主你好,用了你的代碼,有一些問題,不知道如何修改,想詢問一下您,不知道如何上傳圖片。。。
  1. operand1 = '\0';
復制代碼
這里出現錯誤
error C213: left side of asn-op not an lvalue,是下面這部分代碼中的
  1. init:

  2. buf(0);
  3. disp();
  4. value = 0;
  5. cut1 = cut2 = 0;
  6. bool = 0;
  7. for(i = 0;i < 9;i++)
  8. {
  9. operand1 = '\0';
  10. operand2 = '\0';
  11. }
復制代碼

作者: 144569155    時間: 2020-7-1 17:00
上面那個我加了個[i]就可以了,但是運行的時候為什么數碼管不顯示數字啊




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1