ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:17.14KB ,
资源ID:6586539      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6586539.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新单片机简易计算器C代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新单片机简易计算器C代码.docx

1、最新单片机简易计算器C代码单片机简易计算器C代码*/ #include #include #include #define uchar unsigned char#define DATA=P0sbit RS=P20;sbit RW=P21;sbit EN=P22;/*-函数声明-*/void delay(unsigned int i);uchar keyscan(void);void LCD_Init(void);bit LCD_Busy(void);void LCD_Write_CMD(uchar command);void LCD_Write_DATA(uchar date);/*-del

2、ay-*/void delay(unsigned int i)/延时函数 while(i-);/*-keyscan-*/uchar keyscan(void)/逐行扫描法 uchar H_line,L_line,Num=0;/行列值 P3=0x1e; /行线第一条为0 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) /先检测有无按键按下 delay(100); /去抖 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) switch(L_line) case 0x0f:Num=7;break;/7 按下相应的键显示相对应的码值 cas

3、e 0x17:Num=8;break;/8 case 0x1b:Num=9;break;/9 case 0x1d:Num=F;break;/F case 0x1e:Num=+;break;/+ while(P1!=0xff) /一次按键检测,松手跳出循环 H_line=P3&0x1f; delay(50); P3=0x1d; /行线第二条为0 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) /先检测有无按键按下 delay(100); /去抖 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) switch(L_line) case

4、0x0f:Num=4;break;/4 按下相应的键显示相对应的码值 case 0x17:Num=5;break;/5 case 0x1b:Num=6;break;/6 case 0x1d:Num=E;break;/E case 0x1e:Num=-;break;/- while(P1!=0xff) /一次按键检测,松手跳出循环 H_line=P3&0x1f; delay(50); P3=0x1b; /行线第三条为0 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) /先检测有无按键按下 delay(100); /去抖 L_line=P1&0x1f; /读入列线值

5、 if(L_line!=0x1f) switch(L_line) case 0x0f:Num=1;break;/1 按下相应的键显示相对应的码值 case 0x17:Num=2;break;/2 case 0x1b:Num=3;break;/3 case 0x1d:Num=D;break;/D case 0x1e:Num=*;break;/* while(P1!=0xff) /一次按键检测,松手跳出循环 H_line=P3&0x1f; delay(50); P3=0x17; /行线第四条为0 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) /先检测有无按键按下

6、delay(100); /去抖 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) switch(L_line) case 0x0f:Num=0;break;/0 按下相应的键显示相对应的码值 case 0x17:Num=A;break;/A case 0x1b:Num=B;break;/B case 0x1d:Num=C;break;/C case 0x1e:Num=/;break;/ while(P1!=0xff) /一次按键检测,松手跳出循环 H_line=P3&0x1f; delay(50); P3=0x0f; /行线第五条为0 L_line=P1&0x1f

7、; /读入列线值 if(L_line!=0x1f) /先检测有无按键按下 delay(100); /去抖 L_line=P1&0x1f; /读入列线值 if(L_line!=0x1f) switch(L_line) case 0x0f:Num=b;break;/b 按下相应的键显示相对应的码值 case 0x17:Num=o;break;/o case 0x1b:Num=h;break;/h case 0x1d:Num=R;break;/R case 0x1e:Num=;break;/=号 while(P1!=0xff) /一次按键检测,松手跳出循环 H_line=P3&0x1f; while

8、(Num!=0) return Num;/*-LCD_Init-*/void LCD_Init(void) EN=0; LCD_Write_CMD(0x38); delay(15); LCD_Write_CMD(0x38); delay(15); LCD_Write_CMD(0x38); delay(15); LCD_Write_CMD(0x0d); delay(15); LCD_Write_CMD(0x06); delay(15); LCD_Write_CMD(0x01);/*-LCD_Busy-*/bit LCD_Busy(void) bit result; RS=0; /读指令 RW=1

9、; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80); EN=0; return result;/*-LCD_Write_CMD-*/void LCD_Write_CMD(uchar command) bit Busy_flag; Busy_flag=LCD_Busy(); while(Busy_flag) Busy_flag=LCD_Busy(); / 判 RS=0; RW=0; EN=1; P0=command; delay(100); EN=0;/*-LCD_Write_DATA-*/void LCD_Writ

10、e_DATA(uchar date) bit Busy_flag; Busy_flag=LCD_Busy(); while(Busy_flag) Busy_flag=LCD_Busy(); / 判断 LCD 是否忙碌 RS=1; RW=0; EN=1; P0=date; delay(10); EN=0;/*-main-*/void main(void) uchar key; long int num1=0,num2=0,result=0; int cnt1=0,cnt2=0,k; unsigned int flagcal=0,flagtrs=0;/运算符标志 uchar rem0,rem1,r

11、em2;/存放运算符 char num; unsigned char data Str110=0;/存放数据 LCD_Init(); LCD_Write_CMD(0x80);/ 设置显示位置 ( 第一行开头 ) delay(500); LCD_Write_DATA(0);/测试用 LCD_Write_CMD(0x80); while(1) key=keyscan(); if(key=R) LCD_Write_CMD(0x01); LCD_Write_CMD(0x80); LCD_Write_DATA(0); LCD_Write_CMD(0x80); break; /*-基本运算-*/ if (

12、!(key=o|key=b|key=h) if(flagtrs=1) /进制转换启动条件 Str1cnt1+=key; /能存上了 if(rem1=o) if(key=A&key=A&key=2&key=A&key=0&key99999999|num199999999|num2=num2)result=num1-num2;else result=num2-num1;break; case *:result=num1*num2;num2=0;num1=0;break; case /:if(num2!=0)result=num1/num2;else result=999999999;num2=0;

13、num1=0;break; default :result=num1;break; if(result99999999|result-99999999) /溢出错误 LCD_Write_CMD(0x01); LCD_Write_CMD(0x80); LCD_Write_DATA(E); LCD_Write_DATA(r); LCD_Write_DATA(r); break; result=0; LCD_Write_CMD(0x01); LCD_Write_CMD(0x80); LCD_Write_DATA(0); LCD_Write_CMD(0x80); for(;result!=0;) nu

14、m=result%10+0; LCD_Write_DATA(num); result/=10; if(num1num2) LCD_Write_DATA(-); /*- 进制转换-*/ else if(flagtrs=0) LCD_Write_DATA(key); flagtrs=1; switch(key) case o:rem1=o;break; case b:rem1=b;break; case h:rem1=h;break; else LCD_Write_DATA(key); flagtrs=2; switch(key) case o:rem2=o;break; case b:rem2=

15、b;break; case h:rem2=h;break; if(rem1=o&rem2=b)/10-2 LCD_Write_CMD(0xc0); LCD_Write_DATA(o); LCD_Write_DATA(-); LCD_Write_DATA(b); LCD_Write_CMD(0x8f); LCD_Write_CMD(0x04); cnt2=cnt1-1; num1=cnt1+0; LCD_Write_DATA(b); num1=0; /num=cnt2+0; /LCD_Write_DATA(num); /测试用。发现Str里面没有数据 /* for(cnt1=0;cnt1=cnt

16、2;cnt1+) num1=num1*10+Str1cnt1-0; for(;num1!=0;) /测试正确 num=num1%2+0; LCD_Write_DATA(num); num1=num1/2; */ num1=0; if(rem1=o&rem2=h)/10-16 LCD_Write_CMD(0xc0); LCD_Write_DATA(o); LCD_Write_DATA(-); LCD_Write_DATA(h); LCD_Write_CMD(0x8f); LCD_Write_CMD(0x04); cnt2=strlen(Str1); for(cnt1=0;cnt1cnt2;cnt

17、1+) num1=num1*10+Str1cnt1-0; for(;num1!=0;) num=num1/16+0; LCD_Write_DATA(num); num1=num1%16; num1=0; if(rem1=h&rem2=b)/16-2 LCD_Write_CMD(0xc0); LCD_Write_DATA(h); LCD_Write_DATA(-); LCD_Write_DATA(b); LCD_Write_CMD(0x8f); LCD_Write_CMD(0x04); cnt2=strlen(Str1); for(cnt1=0;cnt1cnt2;cnt1+) switch(St

18、r1cnt1) caseF:LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(1);break; caseE:LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(0);break; caseD:LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(1);break; caseC:LCD_Write_DATA(1);LCD_Write_DAT

19、A(1);LCD_Write_DATA(0);LCD_Write_DATA(0);break; caseB:LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(1);break; caseA:LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(0);break; case9:LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(1);brea

20、k; case8:LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(0);break; case7:LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(1);break; case6:LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(1);LCD_Write_DATA(0);break; case5:LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(1);break; case4:LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(0);LCD_Write_DATA(0);break; case3:LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(1);break; c

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1