1、基于51单片机1602液晶显示简易计算器设计R2TRTLCEd3 .T&T-灼U1WXTMIOWXT.U2P2TM,%二的层STMTPS”C3::4-幵 / AC6:A IAN M.V1X&rxairnfixvnxvnj2crriF3“Tnew灼#include#includemath h#define uint unsigned int#define uchar unsigned chardefine PI 3. 141592sbit RS 二 P2P;sbit RW 二 P2l;sbit EN 二 P22;sbit led=P24;sbit speek=P3*7;uchar tableO.
2、j = Welcome to use; uchar tablelrj = /zmade by Ms. Li; uchar table2Lj = /zerrorz,;uchar count;void main(void)uchar error=0, i, first=0, dotl, dot2, dotl_num, dot2_num, minusl, minus2;/错 误 标 志、第一次淸屏标志、小数点标志以及小数点个数负号标志、负号个数uchar Sin, Cos, Tan, In;uchar Key_num, ast_key_num;/键号uchar flag=0, equal_flag;
3、运算符、等于符double numlO, num2=0, numO, result=0, save_result; /第一个数、第二个数、计算结果uchar first_num二0, Ans二0, second_num=0;InitLcdO ;EA二 1;ETO二1;TMOD二0X01;THO=(65536-500)/256;TLO=(65536-500)%256;write_com(0x80+0x40+15); write_Dat ( O);write_com(0x80);while(l)while(key_scan0 =0xff);TRO=1;if(first=0)first=l; wri
4、te_com(0x01);Key_num=key_scan 0;switch(key_scan 0)case 1:if (last_key_num! =Key_num) uTite_Dat C 1); uTite_Dat C n); ln=l;break;case 2:if (last_key_num! =Key_num) write_Dat ( s); write_Dat ( i); write_Dat ( n ); Sin=l;break;case 3:if (last_key_num! =Key_num) write_Dat ( c ); write_Dat ( o); write_Da
5、t ( s); Cos=l;break;case 4:if (last_key_num! =Key_num)write_Dat ( t ); write_Dat ( a ); write_Dat ( n );Tan=l;break;case 5:if (last_key_num! =Key_num)writjDat ( r );flag=5;break;case 6:write_Dat( 7);num=7;break; case 7:write_Dat C 8);num二8;break; case 8:write_Dat ( 9*) inum;break; case 9:if (last_ke
6、y_num!二 Key_num)write_Dat ( +);flag=l;break;case 10:if(last_key_num!=Key_num)write_Dat ( T );flag=6;break;case 11:write_Dat C 4):num=4;break; case 12:write_Dat C o ) intimS;break; case 13:write_Dat( 6);num二6;break; case 14:if(last_key_num!=Key_num)write_Dat ( -);flag二2;break;case 15:if(last_key_num!
7、=Key_num)if(equal_flag=l) write_com(0x01); write_com(0x80); write_Dat ( A); write_Dat ( n); write_Dat ( s); write_Dat (=); save_result=result;else if(Key_num!=l&Key_num!=2&Key_num!=3&Key_num!=4&Key_num!=22&Key_num!=23 &Key_num!二25)write_Dat( A) ;write_Dat C n ) ;write_Dat ( s); if(flag=O)numl=save_r
8、esult; first_num=l;elsenum2=save_re sult; second_num=l;break;case 16:write_Dat(* V):num=l;break;case 17:write_Dat( 2):num=2;break;case 18:write_Dat(* 3):num=3;break;case 19:if(last_key_num!=Key_num)write_Ddt ( *); flag=3;break;case 21:write_Dat ( O) ;num二0;break;case 22:if (last_key_num! =Key_num)辻(
9、flag=O) minusl+; if(minusl=l)writjDat ( -);elseminus2+;if(minus2=l)uTite_Dat -); break;case 23:if (last_key_num!=Key_num)if(flag=O)dotl+;if(dotl=l)write_Dat();elsedot2+;辻(dot2=l)uTite_Dat(); break;case 24:if (last_key_num! =Key_num)write_Dat ( /);flag二4;break;case 25:if (last_key_num! =Key_num) writ
10、e_Dat (=); equal_flag=l;break;if (Key_num! =l&Key_num! =2&Key_num! =3&Key_num! =4&Key_num! =15&Key_num !=22 &Key_num 匸23&Key_num!二 25) /第一个数if(flag=O)num1二num1*1O+num;num二0;if(dotl!=0)dotl_num+;first_num=l;if(flag!二0)num2=num2*l0+num;num=0;if(dot2!=0)dot2_num+;second_num=l;if (equal_f1ag=l&f i r s t
11、_num=1)if(dotl!=0)numl=numl/pow(10, dotl_num):dotl=0;if(dot2!=0)num2=num2/pow(10, dot2_num);dot2=0;if(minusl!=0)numl=numl*(-l);if(minus2!=0) num2=num2*(-l);if(second_num!=0)switch(flag)case 1: resul t=numl+nuni2: break;case 2: result=numl-nuni2: break;case 3: result=numl*nuni2; break;case 4:if(num2!
12、=0)result =num1/num2;elsewrit e_c om(0x80+0x40+10);for(i=0;i0)result=log(numl)+0. 005; elsewrite_com(0x80+0x40+10); for(i=0;i50)TRO二0; count=0;void delay(uint x)uchar y;while(x) for (y=0;y120;y+);void write_com(unsigned char c) RS 二0;RW二 0;EN=1;delay (5);P0二c;EN=0;void writeDat(unsigned char c) RS二
13、1;RW二 0;EN=1;delay (5);P0 二c;EN=0;void InitLcdOwrite_com(0x38); /display modewrite_com(0x06); /显示光标移动位置 write_com(0x0c); /显示开及光标设置 write_com(0x01); /显示淸屏uchar key_scan()uchar key_num=0xff;uint temp;P3=0x03;Pl=OxeO; temp=(P38) Pl; if(temp&0x03e0)!=0x03e0)delay (10);if(temp&0x03e0)!=0x03e0)P3=0x03; /第
14、一行Pl=0xfe;temp=(P38) Pl;switch(temp)case 0x03de:key_num=l; break;case 0x03be:key_num=2; break;case OxO37e:key_num=3; break;case 0x02fe:key_num=4; break;case 0x01fe:key_num=5; break;P3=0x03: /第二行Pl=0xfd;temp=(P38) Pl;switch(temp)case 0x03dd:keyumG; break;case 0x03bd:key_num=7; break;case OxO37d:key_n
15、um=8; break;case 0x02fd:key_num=9; break;case 0x01fd:key_num=10; break;P3=0x03; /第三行Pl=0xfb;temp=(P38) Pl;break; break; break; break; break;switch(temp)case 0x03db:key_num=l1case 0x03bb:key_num=12case 0x037b:key_num=13case 0x02fb:key_num=14case 0x01fb:key_num=15 P3=0x03;/第四行Pl=0xf7;temp=(P38) Pl; sw
16、itch(temp)case0x03d7:key_num=16;break;case0x03b7:key_num=17;break;case0x0377:key_num=18;break;case0x02f7:key_num=19;break;case0x01f7:key_num=20;break;jP3=0x03;Pl=0xef;/第五行temp=(P38) Pl; switch(temp)casecasecasecasecase0x03cf:key_num=21;0x03af:key_num=22;0x036f:key_num=23;0x02ef:key_num=24;0x0lef:key
17、_num=25;break; break; break; break; break;returnkey_num;void display(double Data) uchar xs=0, fs=0,i;if(Data(long)Data)xs=l;09if(Data10)if(xs=l)Data=Data*100; write_.com (0x80+0x40+11); 辻(fs=l) write_Dat(-);elsewrite_Dat ();write_Dat(long)Data/100+* 0*);writeDat ();write_Dat(long)Data/10%10+,0);writ
18、e_Dat(long)Data弔10+ 0*);else if (xs=0)write_com(0x80+0x40+14);if(fs=l)writeDat ( -);elsewrite_Dat ();write_Dat(long)Data+,0,);else 辻(Data100) /10、99if (xs=l)Data=Data*100;write_com(0x80+0x40+10);if(fs=l)write_Datelsewrite_Dat ();write_Dat(long)Data/1000+,O);write_Dat(long)Data/100%10+,0);write_Dat (
19、);write_Dat(long)Data/10%10+,O); writeDat(long)Data%10+* 0);else if (xs=0)write_com(0x80+0x40+13);if(fs=l)write_Datelsewrite_Dat ();write_Dat (long)Data/10+* 0);write_Dat (long)Data%10+* O);辻(xs=l)Data=Data*100;write_com(0x80+0x40+9);if(fs=l)write_Datelsewrite_Dat ();writjDat (long)Data/10000+ O); w
20、rite_Dat(long)Data/1000%10 +O); write_Dat(long)Data/100%10+,O);write_Dat ();write_Dat(long)Data/10%10+,O);write_Dat(long)Data%10+* 0*);else if (xs=0)write_com(0x80+0x40+12); if(fs=l)write_Datelsewrite_Dat ();write_Dat(1ong)Data/100+,O); write_Dat(1ong)Data/10%10+,O);write_Dat(long)Data%10+* O);else
21、辻(Data10000) 7/10009999if (xs=l)Data=Data*100;wr ite_com(0x80+0x40+8);if(fs=l)writeDatelsewrite_Dat ();write_Dat (long)Data/100000+,O);writeDat(long)Data/10000%10+,O);write_Dat(long)Data/1000%10 +O);write_Dat(long)Data/100%10+,0*);write_Dat ();write_Dat(long)Data/10%10+,O);write_Dat(long)Data%10+* 0
22、,);else if (xs=0)write_com(0x80+0x40+11);if(fs=l)write_Datelsewrite_Dat ();write.Dat(long)Data/1000+,CT ); write.Dat(long)Data/100%10+,0*);write.Dat (long)Data/10%10+,O);write_Dat(long)Data%10+,0);else 辻(Data 0); write_Dat(long)Data/100000%10+,0*); write_Dat(long)Data/10000%10+ O);write_Dat(long)Dat
23、a/1000%10 +0);write.Dat (long)Data/100%10+,O);write_Dat ();write_Dat (long)Data/10%10+,0*); write_Dat(long)Data%10+* 0*);else if(xs=0)write_com(0x80+0x40+10);if(fs=l)write_Dat ();elsewrite_Dat ();write_Dat(long)Data/10000+* O); write.Dat (long)Data/1000%10+O); write_Dat(long)Data/100%10+,O); write_D
24、at(long)Data/10%10+,O); write.Dat(long)Data%10+* O);else 辻(Data1000000) /100000999999if (xs=l)Data=Data*100;writ e_c om(0x80+0x40+7);辻(fs=l)write_Dat ();elsewrite_Dat ();write_Dat (仃ong) Data/10000000+ 0); write_Dat(long)Data/1000000%10+? 0); write_Dat(long)Data/100000%10+O); write_Dat(long)Data/10000%10+ 0); write_Dat(long)Data/1000%10 +0); write_Dat(long)Data/100%10+,O); write_Dat ();write.Dat (long)Data/100000%10+,0*); write.Dat(long)Data/100000%10+,O); write_Dat(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1