首页 51单片机计算器程序

51单片机计算器程序

举报
开通vip

51单片机计算器程序51单片机计算器程序 //**************************计算器程序************************************ //0-9数字 //12加 //13减 //14乘 //15除 //P0 1602 //P1矩阵键盘 //第一行显示算式 //第二行显示结果 //2015.2.6 #include #include #define GPIO_KEY P1 unsigned char KeyValue; int sin; //保存运算符号 int...

51单片机计算器程序
51单片机计算器程序 //**************************计算器程序************************************ //0-9数字 //12加 //13减 //14乘 //15除 //P0 1602 //P1矩阵键盘 //第一行显示算式 //第二行显示结果 //2015.2.6 #include #include #define GPIO_KEY P1 unsigned char KeyValue; int sin; //保存运算符号 int x=0; //保存运算立即数 int num1=0;//保存第一个运算数 int num2=0;//保存第二个运算数 int xianshi=-1;//显示地址 int result;//结果 int re; int show; sbit E=P2^7; sbit RW=P2^5; sbit RS=P2^6; //1602 //***********延时函数 10ms************************************************************************** **** void delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } //*****************************************************1602******************** ************************************************************** void wrcmd(int cmd) { int m; RW=0; RS=0; P0=cmd; for(m=0;m<=2;m++); E=1; for(m=0;m<=2;m++); E=0; } void wrdate(int shuju) { int m; RW=0; RS=1; P0=shuju; for(m=0;m<=2;m++); E=1; for(m=0;m<=2;m++); E=0; } void init() { RW=0; E=0; wrcmd(0x38); wrcmd(0x0c); wrcmd(0x06); wrcmd(0x01); } void disp(int x,int y,int ch) { int m; wrcmd(0x80+x*0x40+y); for(m=0;m<=252;m++); wrdate(ch); } //*********************************矩阵键盘******************************************************************************* ********************* void key(void) { char a = 0; A: GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay10ms();//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //测试列 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=4;break; case(0X0d): KeyValue=8;break; case(0X0e): KeyValue=12;break; } //测试行 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue+3;break; case(0Xb0): KeyValue=KeyValue+2;break; case(0Xd0): KeyValue=KeyValue+1;break; case(0Xe0): KeyValue=KeyValue;break; } while((a<50) && (GPIO_KEY!=0xf0)) //检测按键松手检测 { delay10ms(); a++; } } else{ goto A; } } else {goto A; } } //*****************************拆字程序 ******************************************************************************* ************************** void takeapart() {int i; int a; for(i=0;i<16;i++) { a=result%10; result=result/10; disp(1,15-i,'0'+a); if(result==0) {break;} } } //****************************输入函数 ******************************************************************************* *********************** void main() //输入函数 { init(); for(;;) { B: key(); if(KeyValue<=9) //如果输入的是数字 { x=10*x+KeyValue;//前一个数×10+键值 xianshi=xianshi+1; //显示地址,1 disp(0,xianshi,'0'+KeyValue); } else { //保存x xianshi=xianshi+1;//显示地址,1 if(KeyValue==12){ disp(0,xianshi,'+');num1=x; x=0; sin=KeyValue; goto B; }//保存运输符 号 else if(KeyValue==13){ disp(0,xianshi,'-');num1=x; x=0; sin=KeyValue; goto B; }//保存运输符号 else if(KeyValue==14){ disp(0,xianshi,'*');num1=x; x=0; sin=KeyValue; goto B; }//保存运输符号 else if(KeyValue==15){ disp(0,xianshi,'/');num1=x; x=0; sin=KeyValue; goto B; }//保存运输符号 else //如果是等号 { num2=x; if(sin==12) { result=num1+num2; takeapart(); }//拆字程序 else if(sin==13) { result=num1-num2; takeapart(); }//拆字程序 else if(sin==14) { result=num1*num2; takeapart(); }//拆字程序 else if(sin==15) { result=num1/num2; takeapart(); }//拆字程序 else {disp(1,1,'!'); } } } } }
本文档为【51单片机计算器程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_083599
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-18
浏览量:14