ImageVerifierCode 换一换
格式:DOC , 页数:43 ,大小:2.01MB ,
资源ID:3911426      下载积分:12 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(简易计算器设计报告.doc)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

简易计算器设计报告.doc

1、1602液晶显示计算器设计报告2023年10月一、摘要计算器是人们的平常生活最常见的电子产品之一,应用广泛,功能强大。本次我们小组设计制作了一个简易计算器,可以在-99999999999999的范围内进行整数、小数的四则运算运算,并求解ax+ex=b类型方程。该计算器以AT89C51单片机芯片作为核心,采4*4矩阵键盘作为输入,将数据输入单片机内部解决,用LCD1602工业字符液晶显示出运算和结果。进行显示。通过检查可以实现预设功能,具有很高的实用价值。关键词:单片机;简易计算器;AT89C51;LCD1602。本设计具有以下功能:1、可以实现-99999999999999范围内整数,小数的基

2、本运算(超过范围后报错)。2、储存运算结果,掉电不丢失。3、实现6位及以上有效数字。4、解ax+ex=b方程。5、可以连续运算,即上次运算结果作为下次的输入。6、可以在一次操作中连续运算。二、方案论证方案描述:方案一:以51单片机为核心,4*4矩阵键盘输入,数码管显示输入数字和运算结果。方案二:以51单片机为核心,4*4矩阵键盘输入,LCD1602显示输入数字和运算结果。方案比较与选择:LCD1602作为一个成熟的产品,使用简朴,模式固定,便于移植到各种类型的程序,又有微功耗、体积小、显示内容丰富超薄轻巧等优点,而数码管虽然亮度高,但是操作复杂、能耗高、且不能显示符号,本设计对亮度规定不是特别

3、高,故采用方案二。三、解方程算法ax+ex=b为非线性方程,采用牛顿法迭代求解。原理是运用泰勒公式在X0处展开,且展开到一阶,即f(X)=f(X0)+(X- X0)f(X0),求解X=X1= X0-f(X0)/f(X0),进而推出Xn+1=Xn-f(Xn)/f(Xn)。通过迭代,这个式子必然在f(x)=0的时候收敛,进而得到方程的解。四、电路与程序系统组成:电源系统,复位电路,晶振电路,4*4矩阵键盘,独立按键,STC80C52, LCD1602。具体设计如下:S171K1、复位电路2、键盘电路3、晶振电路4、1602显示屏16025、STC89C52电路6、电源电路系统软件与流程图:1)、总

4、流程图开始初始化读取Function value存入eeprom扫描4*4矩阵键盘生成Function value计算扫描mode键显示选择界面(短按),显示上次计算结果(长按)解方程否是是否按下Fuction value2)、计算部分流程图09为数字运算符等号1015为符号091014生成num2扫描4*4矩阵键盘1602显示显示num2扫描4*4矩阵键盘记录符号生成num11602显示计算生成num2015?keyvalue015?计算生成num23)、解方程部分流程图初值x0=009为数字09为数字是否15为确认15为确认生成参数a生成参数b扫描4*4矩阵键盘扫描4*4矩阵键盘1602显

5、示1602显示显示结果XnXn+1=Xn-f(Xn)/f(Xn)015?015?f(Xn)0.0005?使用说明:1、接入电源,按下电源开关后进入上次关闭时的界面(计算或解方程界面)。2、计算时,输入数字和符号,按等号键输出结果,超过运算范围则报错,按AC键退出;3、解方程时,先输入参数a,b,按等号键确认,后输出ax+ex=b的解。按任意键继续解方程。4、在任意时刻短按mode键进入菜单界面,按1进入计算界面,按2进入解方程界面。5、长按mode键为记忆功能,即显示上次的计算结果。测试方案及结果:1、 菜单界面2、 加法运算3、 减法运算4、乘法运算5、除法运算6、连续运算7、上次运算结果作

6、为下次输入8、报错9、解方程10、记忆功能参考书目新概念51单片机C语言教程电子工业出版社附录 源代码:/键盘接P3,1602接P0,STC89C58RC/by-FCY 2023-10#include /单片机头文献#include#include#include#include #define uchar unsigned char#define uint unsigned int #define RdCommand 0x01/定义ISP的操作命令#define PrgCommand 0x02#define EraseCommand 0x03#define Error 1#define Ok

7、 0#define WaitTime 0x01 /定义CPU的等待时间sfr ISP_DATA=0xe2; /寄存器申明sfr ISP_ADDRH=0xe3;sfr ISP_ADDRL=0xe4;sfr ISP_CMD=0xe5;sfr ISP_TRIG=0xe6;sfr ISP_CONTR=0xe7;sbit lcden=P11; /定义1602能使端和数据命令选择端sbit lcdrs=P10;/*sbit lcden=P34;/TX开发板调试sbit lcdrs=P35;sbit dula=P26;sbit wela=P27;*/sbit mode=P12;/定义功能键sbit led=

8、P15;/定义1602背光Kuchar time;/定义中断计时时间char cnumf14;char csign5=.,+,-,*,/;/定义整数,小数,符号数组float num1,num2;/定义运算数字uchar key_value,sign_value=11,fun_value=1;/定义键值,符号值,功能值void delay(uint z);/函数声明uchar keyscan();void function_choose();void write_com(uchar com);void write_data(uchar date);void memoryread();float

9、 num_input();float num_input0();void num_output(float num);void display(int s,char str16,uchar l);/*=延时函数=*/void delay(uint z)/延时z毫秒uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*=键盘扫描函数=*/uchar keyscan()uchar num=100,temp;TR0=1;/计时开始while(num=100)/只有有键按下的时候才跳出P3=0xfe;temp=P3;temp=temp&0xf0;/扫描mode键if(mo

10、de=0)delay(10);if(mode=0)delay(500);/按下500毫秒if(mode=0)while (!mode);/等待释放memoryread();/读取记忆else/短按while (!mode);function_choose();/功能选择ISP_CONTR=0X20;/系统复位/扫描矩阵键盘while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xee:num=7;break;case 0xde:num=8;break;case 0xb

11、e:num=9;break;case 0x7e:num=11;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=12;break;while(temp!=0xf0)

12、temp=P3;temp=temp&0xf0;P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xeb:num=1;break;case 0xdb:num=2;break;case 0xbb:num=3;break;case 0x7b:num=13;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;P3=0xf7;temp=P3;temp=temp&0xf0;

13、while(temp!=0xf0)delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0)temp=P3;switch(temp)case 0xe7:num=0;break;case 0xd7:num=10;break;case 0xb7:num=15;break;case 0x77:num=14;break;while(temp!=0xf0)temp=P3;temp=temp&0xf0;led=0;/亮屏time=0;/有键按下时清零计时return num;/*=数据储存部分=*/打开 ISP,IAP 功能void ISP_IAP_enable(v

14、oid)EA=0;/关中断 ISP_CONTR =ISP_CONTR & 0x18; / 0001,1000ISP_CONTR =ISP_CONTR | WaitTime;/写入硬件延时ISP_CONTR =ISP_CONTR | 0x80; /ISPEN=1/关闭 ISP,IAP 功能void ISP_IAP_disable(void)ISP_CONTR=ISP_CONTR & 0x7f;/ISPEN = 0ISP_TRIG=0x00;EA= 1;/开中断/公用的触发代码void ISPgoon(void)ISP_IAP_enable();/打开 ISP,IAP 功能ISP_TRIG=0x4

15、6;/ 触发ISP_IAP命令字节1ISP_TRIG=0xb9;/ 触发ISP_IAP命令字节2_nop_();/读取数据unsigned char byte_read(unsigned int byte_addr)ISP_ADDRH = (unsigned char)(byte_addr 8);/地址赋值ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD& 0xf8;/清除低3位ISP_CMD = ISP_CMD| RdCommand;/ 写入读命令ISPgoon();/触发执行ISP_IAP_disable()

16、;/关闭ISP,IAP功能return (ISP_DATA);/ 返回读到的数据/扇区擦除void SectorErase(unsigned int sector_addr)unsigned int iSectorAddr;iSectorAddr = (sector_addr & 0xfe00); /取扇区地址ISP_ADDRH = (unsigned char)(iSectorAddr 8);ISP_ADDRL = 0x00;ISP_CMD= ISP_CMD & 0xf8;/清空低3位ISP_CMD= ISP_CMD | EraseCommand;/擦除命令3ISPgoon();/触发执行I

17、SP_IAP_disable();/关闭ISP,IAP功能/写入数据void byte_write(unsigned int byte_addr, unsigned char original_data)ISP_ADDRH =(unsigned char)(byte_addr 8); /取地址ISP_ADDRL =(unsigned char)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD & 0xf8;/清低3位ISP_CMD = ISP_CMD | PrgCommand; /写命令2ISP_DATA = original_data;/写入数据准备ISPgoon

18、();/触发执行ISP_IAP_disable();/关闭IAP功能/储存浮点数函数void memory(float num) char i=13;float a;a=num;sprintf(cnumf,%14.6f,a);while (cnumfi=48|cnumfi=46)i=i-1;if(cnumfi+1=46)break; /将浮点数拆提成数组并去除尾数的0(或小数点)SectorErase(0x2200);/擦除扇区byte_write(0x2200,i);/储存位数for(;i=0;i-)byte_write(0x2201+i,cnumfi);/储存数组/读取浮点数函数void

19、memoryread()char i;i=byte_read(0x2200);/读取位数write_com(0x01);/清屏display(0x80, memory number ,16);write_com(0x80+0x4f);/定位指针为第二行第16位(最后一位)write_com(0x0c);/不显示光标 write_com(0x04);/写一个字符指针减一for(;i=0;i-)/读取数组cnumfi=byte_read(0x2201+i);write_data(cnumfi);write_com(0x06);/还原1602设立:写一个字符指针加一/*=1602相关函数=*/写指令

20、void write_com(uchar com)lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;/写数据void write_data(uchar date)lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0; delay(5);/清除某行函数void clear(int s)/光标起始位(第一行0x80,第二行0x80+0x40) uchar i=0;write_com(s);/定位指针位置write_com(0x06);write_com(0x0c);/不显示光标while(i=16)wri

21、te_data(32);i+;/输入16个空格write_com(s);/指针归位write_com(0x0e);/显示光标/显示字符函数void display(int s,char str16,uchar l)/定义显示起点,显示的数组,显示字符的个数int j=0;write_com(s);write_com(0x06);for(j=0;jl;j+)write_data(strj);/*=初始化函数=*/void init()lcden=0;/写命令模式num1=0;num2=0;/数据清零led=0;/亮屏write_com(0x38);/设立16*2显示,5*7点阵,8位数字据接口w

22、rite_com(0x0e);/光标不闪烁write_com(0x06);/写字符后指针自动加一write_com(0x01);/显示清零,指针清零write_com(0x80);/指针定位为第一行首位TMOD=0x01;/开定期器T0,并设立为16位定期模式,且启动仅受TR0控制 TH0=0x4c;TL0=0x00;/装入初值65536-46080,初值=216-计数个数N,N=(计数时长*晶振频率/12)(50ms)EA=1;ET0=1;/打开T0中断允许/*=数字输入函数=*/数字输入函数float num_input()float num=0;char key,i=1;char sig

23、n=1;key=keyscan();if(key=12)sign=-1;write_data();write_data(-);key=keyscan();/解决负数运算if(key10)num=0;while(key10)num=num*10+key;write_data(key+0x30);key=keyscan();if (key=10)write_data(csign0);for(key=keyscan();key10;key=keyscan()num=num+key/pow(10,i);write_data(key+0x30);i+;if(sign=11&key=14)/假如按下运算符

24、write_data(csignkey-10);/显示运算符key_value=key;/记录运算符num=sign*num;return num;/数字输入函数0float num_input0()float num=num2;/无操作返回num2char key,i=1;key=keyscan();clear(0x80);/清除第一行if(key10)num=0;while(key10)num=num*10+key;write_data(key+0x30);key=keyscan();if (key=10)write_data(csign0);for(key=keyscan();key=1

25、1&key=9999999|num=0;j-)/显示数字num,不显示尾数的零(如12.00000显示为12)write_data(cnumfj);write_com(0x06);/还原1602设立:写一个字符指针加一/*=功能选择函数=*/void function_choose()uchar j=0;while(1) switch(j%2)/页面选择case 0:display(0x80,1 calculate +,16);/显示菜单display(0x80+0x40,2 advance +,16);/显示菜单display(0x80+0x40,4 information=200)/1mi

26、n 灭屏led=1;/*=计算函数=*/void calculate()num2=num_input0();/获取num2,记录运算符,并判断是否为连续运算while(key_value=11)/假如没有输入等号sign_value=key_value;/转移运算符的符号值num1=num_input();/获取num1,记录下一个运算符switch(sign_value)case 11:num2=num2+num1;break; case 12:num2=num2-num1;break;case 13:num2=num2*num1;break; case 14:num2=num2/num1;

27、break;/计算,将结果赋给num2if(key_value=15)/假如符号为等号 num_output(num2);/显示运算结果write_com(0x80+0x40);write_data(=);/显示等号/*=高级计算=*/void advanced()uchar k=0; float x=0,y=0;float z=0;while(1)display(0x80,1xy 3cos 5ln +,16);/显示菜单display(0x80+0x40,2sin 4tan 6ra 0&ky)init();display(0x80+0x40, Error ,16);while(1);doz=

28、rand()%(int)x-(int)y-1)+(int)x;num_output(z);k=keyscan();while(k=15);continue;case 2:display(0x80,sin ,4);x=num_input();/获取xz=sin(x);break;case 3:display(0x80,cos ,4);x=num_input();/获取xz=cos(x);break; case 4:display(0x80,tan ,4);x=num_input();/获取xz=tan(x);break;case 5:display(0x80,ln ,3);x=num_input

29、();/获取xz=log(x);break;write_data(=);/显示等号num_output(z);keyscan();/等待任意键/*=解方程函数=*/void equation() long i=0;float a=0,b=0;float x=20;/定义方程中的变量a b x init();write_data(a);write_data(=);a=num_input();/显示并获取awrite_com(0x80+0x40);write_data(b);write_data(=);b=num_input();/显示并获取bif(floor(a)+floor(b)=fabs(a

30、)+fabs(b)&a*b!=0)/假如a,b均为正整数if(a=1&b=1)x=0;for(;fabs(a*x+exp(x)-b)1e-5;i+)/设立精度为10(5) x=x-(a*x+exp(x)-b)/(a+exp(x);/牛顿法重要循环x1=x0-f(x)/f(x) if(i=1000)/1000次迭代没有达成精度就跳出 break;write_com(0x01);/清屏num_output(x);/第二行显示方程的解display(0x80+0x40,x=,2);/显示x=elsewrite_com(0x01);/清屏display(0x80+0x40, Error ,16);/报错while(1);/程序停止display(0x80,any key

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服