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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于511602的可连续运算计算器.docx

1、基于511602的可连续运算计算器#include #include #include #include #include #include LCD1602.h#define uchar unsigned charuchar k=0,result1;void shortdelay(uchar i)/短延时 for(;i0;i-);/长延时void longdelay(uint i) uint j; for(;i0;i-) for(j=100;j0;j-);/延时程序void delay(int i)int j; for(;i0;i-) for(j=0;j100;j+);/初试状态void io

2、_init()P1=0xff;/?-键盘扫描部分-/ unsigned char key_scan() unsigned char key; unsigned char temp; uint flag; io_init(); P1=0xf0; flag=0;loop: temp=P10xf0; while(temp) P1=0xfe; delay(1); if(P1&0xfe)!=0xfe) switch(P1) case 0xee: key=0x11;flag=1;break;/读7键和值 case 0xde: key=0x12;flag=1;break; case 0xbe: key=0x

3、13;flag=1;break; case 0x7e: key=0x14;flag=1;break;/读除键的值 if(flag) goto exit; else P1=0xfd; delay(1); if(P1&0xfd)!=0xfd) switch(P1) case 0xed: key=0x21;flag=1;break; case 0xdd: key=0x22;flag=1;break; case 0xbd: key=0x23;flag=1;break; case 0x7d: key=0x24;flag=1;break; /读4到乘的键值 if(flag) goto exit; else

4、 P1=0xfb; delay(1); if(P1&0xfb)!=0xfb) switch(P1) case 0xeb: key=0x31;flag=1;break; case 0xdb: key=0x32;flag=1;break; case 0xbb: key=0x33;flag=1;break; case 0x7b: key=0x34;flag=1;break;/读1到减的键值 if(flag) goto exit; else P1=0xf7; delay(1); if(P1&0xf7)!=0xf7) switch(P1) case 0xe7: key=0x41;flag=1;break

5、;/后退 case 0xd7: key=0x42;flag=1;break;/0 case 0xb7: key=0x43;flag=1;break;/等于 case 0x77: key=0x44;flag=1;break;/加 exit: return key; if(temp=0) goto loop; /-键盘扫描完-/-显示初始化?-/P0口初始化void initpindata(bit i) if(i=1) pindata=0xff; else pindata=0X00;/寄存器选择信号void setRS(bit i) if(i=1) pinRS=1; else pinRS=0;/读

6、写操作控制void setRW(bit i) if(i=1) pinRW=1; else pinRW=0;/使能信号void setE(bit i) if(i=1) pinE=1; else pinE=0;/读BF以及AC的值uint read_BF_AC() uint temp; initpindata(1); setRS(0); setRW(1); setE(1); shortdelay(1); temp=pindata; shortdelay(10); setE(0); return(temp); /判忙bit statuscheck() return(bit)(read_BF_AC()

7、&0x80);/写指令函数void writeinstruc(uint instruc) while(statuscheck(); initpindata(0); setRS(0); setRW(0); setE(0); pindata=instruc; /short delay(1); setE(1); shortdelay(10); setE(0);/写数据到RAMvoid writedata(uint data1) initpindata(0); setRS(1); setRW(0); setE(0); pindata=data1; setE(1); shortdelay(10); se

8、tE(0);/从RAM中读数据函数uint readdata(void) uint temp; initpindata(1); setRS(1); setRW(1); setE(1); shortdelay(1); temp=pindata; shortdelay(10); setE(0); return(temp);/显示程序 X为行号,Y为列号,date为要显示的数据void dispcharacter(int x,uint y,uint data1) uint temp; while(statuscheck(); temp=y&0x0f; x&=0x01; if(x) temp|=0x4

9、0; setDDRAM_Add(temp); writedata(data1);/ writedata(data1);/LCD复位函数void LCDreset() clearscreen(); cursorreturn();/LCD初始化void initLCD() LCDreset(); inputmode(0x06);/增量方式,不移位 dispcontrol(0x0c);/显示开,光标关,闪烁关 functionset(0x38);/8位,2行,5*7/-准备工作完成-/-计算器-/ compute(char key1,i) signed char m,n,c,act; long in

10、t num1,num2,result; signed char str44=7,8,9,/, 4,5,6,*, 1,2,3,-, c,0,=,+; signed char str111,string12; m=(key1&0xf0); m=m/16; m=m-1; n=key1&0x0f; n=n-1; c=strmn; sprintf(string1,%c,c); strcat(str1,string1); if(c=+)|(c=-)|(c=*)|(c=/) act=c; num1=atoi(str1); memset(str1,0,11); memset(string1,0,2); if(

11、c=) num2=atoi(str1); switch(act) case+: if(k=0) result=num1+num2;k+;break; else result+=num2;k+;break; case-: if(k=0) result=num1-num2;k+;break; else result-=num2;k+;break; case*: if(k=0) result=num1*num2;k+;break; else result*=num2;k+;break; case/: if(k=0) result=num1/num2;k+;break; else result/=nu

12、m2;k+;break; if(c=c)act=0;num1=str10;num1=str18;memset(str1,0,11);memset(string1,0,2);num1=str10;num1=str18;k=0; longdelay(350); switch(key1) /显示部分 case 0x11: dispcharacter(0,i,7);i+;break; case 0x12: dispcharacter(0,i,8);i+; break; case 0x13: dispcharacter(0,i,9);i+; break; case 0x14: dispcharacter

13、(0,i,/);i+;break; case 0x21: dispcharacter(0,i,4);i+;break; case 0x22: dispcharacter(0,i,5);i+;break; case 0x23: dispcharacter(0,i,6);i+;break; case 0x24: dispcharacter(0,i,*);i+;break; case 0x31: dispcharacter(0,i,1);i+;break; case 0x32: dispcharacter(0,i,2);i+;break; case 0x33: dispcharacter(0,i,3

14、);i+;break; case 0x34: dispcharacter(0,i,-);i+;break; case 0x41: clearscreen(); break; case 0x42: dispcharacter(0,i,0);i+;break; case 0x43: dispcharacter(0,i,=);i+; m=result/10000; result1=result%10000; if(m!=0|result=0) n=0; m=m+0; dispcharacter(0,i,m);i+; m=result1/1000; result1=result1%1000; if(m

15、!=0|n=0) m=m+0; n=0; dispcharacter(0,i,m);i+; m=result1/100; result1=result1%100; if(m!=0|n=0) m=m+0; n=0; dispcharacter(0,i,m);i+; m=result1/10; result1=result1%10; if(m!=0|n=0) m=m+0; n=0; dispcharacter(0,i,m);i+; m=result1; if(m!=0|n=0) m=m+0; dispcharacter(0,i,m);i+;break; case 0x44: dispcharact

16、er(0,i,+);i+;break; return(i); /-/-主函数-/ void main() char key1,i; start:initpindata(0); P2=0X00; initLCD(); i=0; scan:key1=key_scan(); i=compute(key1,i); if(key1=0x41) goto start; else goto scan; #define uint unsigned int #define uchar unsigned charsbit pinRS=P20;sbit pinRW=P21;sbit pinE=P22;#define

17、 pindata P0#define clearscreen() writeinstruc(0x01)#define cursorreturn() writeinstruc(0x02)#define inputmode(temp) writeinstruc(temp)/temp取值如下:/0x04:减量方式,不移位/0x05:减量方式,移位/0x06:增量方式,不移位/0x07:增量方式,移位#define dispcontrol(temp) writeinstruc(temp)/temp取值如下:/0x08:显示关,光标关,闪烁关/0x0c:显示关,光标关,闪烁关/0x0d:显示开,光标关,

18、闪烁开/0x0e:显示开,光标开,闪烁关/0x0f:显示开,光标开,闪烁开#define dispshift(temp) writeinstruc(temp)/temp取值如下:/0x10:光标左移/0x14:光标右移/0x18:显示整体左移/0x1c:显示整体右移#define functionset(temp) writeinstruc(temp)/temp取值如下:/0x20:4位,1行,5*7/0x24:4位,1行,5*10/0x28:4位,2行,5*7/0x2c:4位,2行,5*10/0x30:8位,1行,5*7/0x34:8位,1行,5*10/0x38:8位,2行,5*7/0x3c

19、:8位,2行,5*10#define setCGRAM_Add(address) writeinstruc(0x40|address)#define setDDRAM_Add(address) writeinstruc(0x80|address)/短延时/void shortdelay(uchar i);/长延时/void longdelay(uint i);/P2口初始化/void initP2(bit i);/寄存器选择信号/void setRS(bit i);/读写操作控制/void setRW(bit i);/使能信号/void setE(bit i);/读BF以及AC的值/uint read_BF_AC();/判忙/bit statuscheck();/写指令函数/void writeinstruc(uint instruc);/写数据到RAM/void writedata(uint data1);/从RAM中读数据函数/uint readdata(void);/显示程序 X为行号,Y为列号,date为要显示的数据/void dispcharacter(int x,uint y,uint data1);/LCD复位函数/void LCDreset();

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

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