




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*/ #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);/*-delay-*/void delay(unsigned int i)/延时函数while(i-);/*-keyscan-*/uchar keyscan(void)/逐行扫描法uchar H_line,L_line,Num=0;/行列值P3=0x1e; /行线第一条为 0L_line=P1 /读入列线值if(L_line!=0x1f) /先检测有无按键按下delay(100); /去抖L_line=P1 /读入列线值 if(L_line!=0x1f)switch(L_line)case 0x0f:Num=7;break;/7 按下相应的键显示相对应的码值case 0x17:Num=8;break;/8case 0x1b:Num=9;break;/9case 0x1d:Num=F;break;/Fcase 0x1e:Num=+;break;/+while(P1!=0xff) /一次按键检测,松手跳出循环H_line=P3 delay(50);P3=0x1d; /行线第二条为 0L_line=P1 /读入列线值if(L_line!=0x1f) /先检测有无按键按下delay(100); /去抖L_line=P1 /读入列线值 if(L_line!=0x1f)switch(L_line)case 0x0f:Num=4;break;/4 按下相应的键显示相对应的码值case 0x17:Num=5;break;/5case 0x1b:Num=6;break;/6case 0x1d:Num=E;break;/Ecase 0x1e:Num=-;break;/-while(P1!=0xff) /一次按键检测,松手跳出循环H_line=P3 delay(50);P3=0x1b; /行线第三条为 0L_line=P1 /读入列线值if(L_line!=0x1f) /先检测有无按键按下delay(100); /去抖L_line=P1 /读入列线值 if(L_line!=0x1f)switch(L_line)case 0x0f:Num=1;break;/1 按下相应的键显示相对应的码值case 0x17:Num=2;break;/2case 0x1b:Num=3;break;/3case 0x1d:Num=D;break;/Dcase 0x1e:Num=*;break;/*while(P1!=0xff) /一次按键检测,松手跳出循环H_line=P3 delay(50);P3=0x17; /行线第四条为 0L_line=P1 /读入列线值if(L_line!=0x1f) /先检测有无按键按下delay(100); /去抖L_line=P1 /读入列线值 if(L_line!=0x1f)switch(L_line)case 0x0f:Num=0;break;/0 按下相应的键显示相对应的码值case 0x17:Num=A;break;/Acase 0x1b:Num=B;break;/Bcase 0x1d:Num=C;break;/Ccase 0x1e:Num=/;break;/while(P1!=0xff) /一次按键检测,松手跳出循环H_line=P3 delay(50);P3=0x0f; /行线第五条为 0L_line=P1 /读入列线值if(L_line!=0x1f) /先检测有无按键按下delay(100); /去抖L_line=P1 /读入列线值 if(L_line!=0x1f)switch(L_line)case 0x0f:Num=b;break;/b 按下相应的键显示相对应的码值case 0x17:Num=o;break;/ocase 0x1b:Num=h;break;/hcase 0x1d:Num=R;break;/Rcase 0x1e:Num=;break;/=号while(P1!=0xff) /一次按键检测,松手跳出循环H_line=P3 while(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; EN=1; _nop_();_nop_();_nop_();_nop_();result=(bit)(P0EN=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_Write_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,rem2;/存放运算符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 (!(key=o|key=b|key=h) if(flagtrs=1) /进制转换启动条件Str1cnt1+=key; /能存上了if(rem1=o) if(key=Aelse 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;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;) num=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;elseLCD_Write_DATA(key);flagtrs=2;switch(key)case o:rem2=o;break;case b:rem2=b;break;case h:rem2=h;break;if(rem1=oLCD_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=cnt2;cnt1+)num1=num1*10+Str1cnt1-0;for(;num1!=0;) /测试正确num=num1%2+0;LCD_Write_DATA(num);num1=num1/2;*/num1=0;if(rem1=oLCD_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;cnt1+)num1=num1*10+Str1cnt1-0;for(;num1!=0;)num=num1/16+0;LCD_Write_DATA(num);num1=num1%16;num1=0; if(rem1=hLCD_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(Str1cnt1)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_DATA(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);break;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; case2:LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(1);LCD_Write_DATA(0);break;case1:LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(1);break;case0:LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(0);LCD_Write_DATA(0);break; if(rem1=hLCD_Write_DATA(h);LCD_Write_DATA(-);LCD_Write_DATA(o);LCD_Write_CMD(0x8f);LCD_Write_CMD(0x04); cnt2=strlen(Str1);for(cnt1=0;cnt1cnt2;cnt1+) num1=num1*16+Str1cnt1-0;for(;num1!=0;) num=num1%10+0;LCD_Write_DATA(num);num1/=10;num1=0;if(rem1=bLCD_Write_DATA(b);LCD_Write_DATA(-);LCD_Write_DATA(o);LCD_Write_CMD(0x8f);LCD_Write_CMD(0x04);cnt2=strlen(Str1);for(cnt1=0;cnt1cnt2;cnt1+) num1=num1*2+Str1cnt1-0;for(;num1!=0;) num=num1%10+0;LCD_Write_DATA(num);num1/=10;num1=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晚生晚育面试题及答案
- 船舶雷达试题及答案
- 人格游戏测试题及答案
- 山东省考试题及答案
- 2025年助理医师之中西医结合助理医师题库附答案(典型题)
- 21.2.3二次根式的除法(教学课件)数学华东师大版九年级上册
- 保安培训课件现场
- 保安培训日常知识课件
- 保安和消防知识培训总结课件
- 客服运营分红方案(3篇)
- 浪潮社会招聘在线测评题
- 电缆价格自动核算表
- 2024年内蒙古呼伦贝尔农垦拉布大林上库力三河苏沁农牧场招聘115人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 【魔镜洞察】2024药食同源保健品滋补品行业分析报告
- 2024年全国网络安全行业职业技能大赛(数据安全管理员)考试题库-下(多选、判断题)
- 储藏室买卖协议模板
- 《基于核心素养的提升小学生数学文本阅读能力的行动研究》中期报告
- 知识题库-人社练兵比武竞赛测试题及答案(九)
- 2024年浙江温州乐清市公安局警务辅助人员招聘笔试参考题库附带答案详解
- 妊娠纹的预防与治疗方法的课件
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
评论
0/150
提交评论