单片机计算器程序设计
时间:2018-09-28 09:20:01
手机看文章
扫描二维码
随时随地手机看文章
[导读]按键和液晶,可以组成我们最简易的计算器。下面我们来写一个简易整数计算器提供给大家学习。为了让程序不过于复杂,我们这个计算器不考虑连加,连减等连续计算,不考虑小数情况。加减乘除分别用上下左右来替代,回车
按键和液晶,可以组成我们最简易的计算器。下面我们来写一个简易整数计算器提供给大家学习。为了让程序不过于复杂,我们这个计算器不考虑连加,连减等连续计算,不考虑小数情况。加减乘除分别用上下左右来替代,回车表示等于,ESC 表示归0。程序共分为三部分,一部分是 1602 液晶显示,一部分是按键动作和扫描,一部分是主函数功能。
/***************************Lcd1602.c文件程序源代码*****************************/#include#defineLCD1602_DBP0sbitLCD1602_RS=P1^0;sbitLCD1602_RW=P1^1;sbitLCD1602_E=P1^5;/*等待液晶准备好*/voidLcdWaitReady(){unsignedcharsta;LCD1602_DB=0xFF;LCD1602_RS=0;LCD1602_RW=1;do{LCD1602_E=1;sta=LCD1602_DB;//读取状态字LCD1602_E=0;//bit7等于1表示液晶正忙,重复检测直到其等于0为止}while(sta&0x80);}/*向LCD1602液晶写入一字节命令,cmd-待写入命令值*/voidLcdWriteCmd(unsignedcharcmd){LcdWaitReady();LCD1602_RS=0;LCD1602_RW=0;LCD1602_DB=cmd;LCD1602_E=1;LCD1602_E=0;}/*向LCD1602液晶写入一字节数据,dat-待写入数据值*/voidLcdWriteDat(unsignedchardat){LcdWaitReady();LCD1602_RS=1;LCD1602_RW=0;LCD1602_DB=dat;LCD1602_E=1;LCD1602_E=0;}/*设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标*/voidLcdSetCursor(unsignedcharx,unsignedchary){unsignedcharaddr;if(y==0){//由输入的屏幕坐标计算显示RAM的地址addr=0x00+x;//第一行字符地址从0x00起始}else{addr=0x40+x;//第二行字符地址从0x40起始}LcdWriteCmd(addr|0x80);//设置RAM地址}/*在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针*/voidLcdShowStr(unsignedcharx,unsignedchary,unsignedchar*str){LcdSetCursor(x,y);//设置起始地址while(*str!='