欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: C51簡(jiǎn)單計(jì)算器設(shè)計(jì)思想、Proteus仿真及源代碼 [打印本頁(yè)]

作者: 51黑電子    時(shí)間: 2015-12-9 00:36
標(biāo)題: C51簡(jiǎn)單計(jì)算器設(shè)計(jì)思想、Proteus仿真及源代碼










硬件部分比較簡(jiǎn)單,當(dāng)鍵盤(pán)按鍵按下時(shí)它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是哪個(gè)鍵被按下。

二、主程序流程圖



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


三、程序源代碼

#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簡(jiǎn)單計(jì)算器.zip

1.24 MB, 下載次數(shù): 244, 下載積分: 黑幣 -5


作者: Fandy    時(shí)間: 2016-4-10 10:08
樓主你好,我剛?cè)腴T(mén),對(duì)51引腳不懂,下載你的帖子還是一部分看不懂,你能幫我改下這個(gè)嗎?

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

E1A{TO2{G5LH8BKS$@OG134.png

作者: 劉一朗    時(shí)間: 2016-5-10 18:33
Fandy 發(fā)表于 2016-4-10 10:08
樓主你好,我剛?cè)腴T(mén),對(duì)51引腳不懂,下載你的帖子還是一部分看不懂,你能幫我改下這個(gè)嗎?

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

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

捕獲.PNG

作者: 144569155    時(shí)間: 2020-7-1 15:35
樓主你好,用了你的代碼,有一些問(wèn)題,不知道如何修改,想詢問(wèn)一下您,不知道如何上傳圖片。。。
  1. operand1 = '\0';
復(fù)制代碼
這里出現(xiàn)錯(cuò)誤
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. }
復(fù)制代碼

作者: 144569155    時(shí)間: 2020-7-1 17:00
上面那個(gè)我加了個(gè)[i]就可以了,但是運(yùn)行的時(shí)候?yàn)槭裁磾?shù)碼管不顯示數(shù)字啊




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