/头文件包含*/#include<reg51.h>#include<math.h>/宏定义/#define Uint8 unsigned char#define Uint16 unsigned int#define Uint32 unsigned long/管脚定义/sbit LCD_EN=P3^4;sbit LCD_RW=P3^5;sbit LCD_RS=P3^6;/定义变量和数组/long x=0,y=0,num=0;int operators,input,iny=0;char key;char error[5]="error";char overflow[8]="overflow";/函数声明/void SYS_INIT(void);//系统初始化函数char KEY_TRANSLATE(int keycode);//键值转化为键盘上按键值函数void ARITHMETIC(void);//算术运算函数void ERROR_DEAL(void);//错误处理函数void DATA_OVERFLOW_DEAL(void);//数值溢出处理函数void LCD_INIT(void);//LCD 初始化函数void LCD_WRITE_DAT(char ddata);//LCD 写数据函数void LCD_WRITE_COMT(char command);//LCD 写指令函数void LCD_CHEEK_BUSY(void);//LCD 检查忙碌函数void LCD_CLEAR(void);//LCD 清屏函数void LCD_DISPLAY(long a);//LCD 显示函数/主函数*/void main(void){ SYS_INIT();//系统初始化 while(1);}/*外部中断 0 处理函数/void irt_ex0(void) interrupt 0 using 1{ key=KEY_TRANSLATE(P2&0x0f); if(key<='9'&&key>='0') //判断按下的键是否为数值 { num=num10+(key-'0'); if (operators>0) { y=num; iny=1; } else x=num; if(num<134217728&&num>-134217728) //当前数值是否超出限定范围 { LCD_DISPLAY(num); } else DATA_OVERFLOW_DEAL();}else{ switch(key) { case 'c': x=0; y=0; num=0; iny=0; operators=0; LCD_DISPLAY(num); break; case '=': ARITHMETIC(); iny=0; operators=0; num=0; break; case '+': if (operators) ARITHMETIC(); operators=1; num=0; break; case '-': if (operators) ARITHMETIC(); operators=2; num=0; break; case '': if (operators) ARITHMETIC(); operators=3; num=0; break; case '/': if (operators) ARITHMETIC(); operators=4; num=0; break; } }}/系统初始化函数/void SYS_INIT(void){ EA=1; EX0=1; IT0=1; P2=0xff; LCD_DISPLAY(0); LCD_INIT(); LCD_WRITE_DAT(0x30);}/LCD 初始化函数*/void LCD_INIT(void){ LCD_WRITE_COMT(0x30); LCD_WRITE_COMT(0x30); LCD_WRITE_COMT(0x30); LCD_WRITE_COMT(0x38); LCD_WRITE_COMT(0x08); LCD_WRITE_COMT(0x01); LCD_WRITE_COMT(0x06); LCD_WRITE_COMT(0x0e);}/*LCD 写数据函数/void LCD_WRITE_DAT(char ddata){ LCD_RS=1;//写指令 LCD_RW=0; LCD_EN=1;//使能信号开 P1=ddata;//将数据送入 p1 口 LCD_EN=0;//使能信号关 LCD_CHEEK_BUSY();}/*LCD 写指令函数/void LCD_WRITE_COMT(char command){ LCD_RS=0;//写指令 LCD_RW=0; LCD_EN=1;//使能信号开 P1=command;//将数据送入 p1 口 LCD_EN=0;//使能信号关 LCD_CHEEK_BUSY();}/LCD 检查忙碌函数/void LCD_CHEEK_BUSY(void){ char i,x=0x80; P1=0xff; while(x&0x80) { LCD_RS=0; LCD_RW=1; LCD_EN=1; x=P1; LCD_EN=0; for (i=0;i<10;i++); } LCD_EN=0;/*关闭使能信号*/}/**********LCD 清屏函数**********/void LCD_CLEAR(void){ LCD_WRITE_COMT(0x01);}/**********LCD 显示函数**********/void LCD_DISPLAY(long a){ long temp,b,c=-1; int lenth=1,i,j; LCD_CLEAR(); if(a<0) { a=a*c; LCD_WRITE_DAT('-'); } temp=a; while((temp=temp/10)!=0) { lenth++; } for(i=lenth;i>0;i--) { b=1; for(j=0;j<i-1;j++) { b=b*10; } LCD_WRITE_DAT(0x30+a/b); a=a%b; }}/**********键值转化为键盘上按键值函数*************/char KEY_TRANSLATE(int keycode){ switch(keycode) { case 0: return '7'; break; case 1: return '4'; break; case 2: return '1'; break; case 3: return 'c'; break; case 4: return '8'; break; case 5: return '5'; break; case 6: return '2'; break; case 7: return '0'; break; case 8: return '9'; break; case 9: return '6'; break; case 10: return '3'; break; case 11: return '='; break; case 12: return '/'; break; case 13: return '*'; break; case 14: return '-'; break; case 15: return '+'; break; }}/**********算术运算函数*************/void ARITHMETIC(void){ if (iny) { switch(operators) { case 1: x=x+y; num=x; if(num<134217728&&num>-134217728) { LCD_DISPLAY(num); } else DATA_OVERFLOW_DEAL(); break; case 2: x=x-y; num=x; if(num<134217728&&num>-134217728) { LCD_DISPLAY(num); } else DATA_OVERFLOW_DEAL(); break; case 3: x=xy; num=x; if(num<134217728&&num>-134217728) { LCD_DISPLAY(num); } else DATA_OVERFLOW_DEAL(); break; case 4: if (y==0) ERROR_DEAL(); else { x=x/y; num=x; if(num<134217728&&num>-134217728) { LCD_DISPLAY(num); } else DATA_OVERFLOW_DEAL(); } break;}y=0; }}/错误处理函数/void ERROR_DEAL(void){ int i=0; LCD_CLEAR(); for(i=0;i<5;i++) LCD_WRITE_DAT(error[i]);}/数值溢出处理函数/void DATA_OVERFLOW_DEAL(void){ int i=0; LCD_CLEAR(); for(i=0;i<8;i++) LCD_WRITE_DAT(overflow[i]);}
麻烦你用代码块格式化一下吧,实在看不清楚