单片机计算器讲述.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机计算器讲述

#include reg52.h #include math.h //#include lcd1602_8.h #define uint unsigned int #define uchar unsigned char uint temp , num; //键盘扫描数值 uchar keynum1=0,keynum2=0,sign=0,i=0,j=0; //按键计数,符号标示 uchar num1[8]={0},num2[8]={0}; //按键存储数组 float ans1=0,ans2=0,ans=0,point=0; //运算数据 bit conflag=0; //继续运算标志位 bit newcalc=0; //新运算标志位 bit ac=0; //清零标志,1为清零 bit beepflag=0; //蜂鸣器标志位 bit sqrtflag1=0; //开方1标志位 bit sqrtflag2=0; //开方2标志位 sbit keybeep=P3^3; //蜂鸣器开关按键 sbit beep=P2^7; //蜂鸣器控制口 sbit keysqrt=P3^4; //开方按键 sbit keypow=P3^5; //任意次方按键 sbit LCDRS=P2^0; sbit LCDRW=P2^1; sbit LCDEN=P2^2; uchar keyscan(); void maininit(void); //附4:LCD1602显示程序 //#includereg52.h //#includelcd1602_8.h //#includemath.h //延时1ms程序 void delayms(uint x) //12M延时1ms { unsigned int TempMS=x*110; while(TempMS--); } //写命令 void lcdwrite_com(uchar i) { P0=i; LCDRS=0; LCDRW=0; LCDEN=0; delayms(1); LCDEN=1; } //写数据 void lcdwrite_data(uchar i) { P0=i; LCDRS=1; LCDRW=0; LCDEN=0; delayms(1); LCDEN=1; } //写字符串 void lcdwrite_string(uchar *s) { while(*s) { lcdwrite_data(*s); s++; } } //设置lcd光标值 void lcd_setxy(uchar x,uchar y) { uchar address; y=0x0f; if(!x) address=0x80+y; // 0在第一行 else address=0xc0+y; // 1在第二行 lcdwrite_com(address); } //显示1位数字 void lcdwrite_num1(uint n) { lcdwrite_data(n+48); } //显示任意位数字 void lcdwrite_num(long n) { uchar length=0,j,a[8]={0,0,0,0,0,0,0,0}; long nx; if(n==0) { lcdwrite_data(0); return; } if(n0) { lcdwrite_data(-); n=0-n; } nx=n; for(j=0;j8;j++) { if(nx=1) length++; nx/=10; } nx=n; for(;length0;length--) { a[length-1]=nx%10+0x30; nx/=10; } lcdwrite_string(a); } //显示7位小数 void lcdwrite_float(float n) { uchar i=0; uint j=0; long nxtemp; if(n==0) { lcdwrite_data(0); return; } if(n0) { lcdwrite_data(-); n=0-n; } nxtemp=n; n=n;//+0.000002; lcdwrite_num(nxtemp); if((n-nxtemp)0.000

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档