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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于单片机的计算器的论文Word格式文档下载.docx

1、图2-4、下载口电路原理图三、程序流程图主程序流程图显示程序流程图键扫程序流程图3.1、程序清单程序清单见附录4。产品使用说明该产品16个按键作为输入信号,液晶为显示器,按键功能如下图所示。09为数字键,其中03有第二功能,一个小数点键,一个等号键,该键为四功能键,四个运算符号键。通电后显示器显示万年历、星期和脑钟,此时按0键可进行校时,可看到时钟已停,并且秒在闪烁,此时按1键可使秒加一,按2键可使秒减一,把秒设定好后,再按0键,秒停止闪烁,分开始闪烁,此时按1键和2键同样可对分进行修改,然后依次时、日、月、年、以及闹钟的秒、分、时进行修改,然后再按0键时钟恢复走时,万年历和闹钟的校准就完成啦

2、。如果要使用计算器功能,则直接按3键即可进入计算器模式,等号键单键为“=”,双键为清除,默认计算类型为加减乘除,若要进行其他类型的计算,则可使用等号键三键,然后选择运算类型进行运算,此时符号键所对应的运算符号也有相应的变化。该计算器的计算功能可实现加减乘除、正弦余弦正切余切、反正弦反余弦反正切反余切、平方、立方、m的k次方(m和k均由键盘输入)、e为底的m次方、自然对数、常用对数、开平方根。可谓功能齐全,操作简单,给使用带来极大方便。设计体会在这次设计中使我对步进机有了更深的了解,对单片机也有了更高成次的了解,单片机的种类多,而型号杂,也是我们学习中的困难,所以就MCS51系列的产品来说,就是

3、一个典型的学习方法。单片机编程是用汇编语言进行编程,也就需要我们对电路的分析,然后总结,查阅相关资料才能变成好的程序,编程讲究的是多动手写,自己写,用自己的思路,不怕写错,写错再改,懂得有新的思想这样才能提高。在这次单片机应用系统设计中遇到到很大的困难,主要原因是平时的知识掌握的不够,通过查阅很多资料和类似的论文,才做成的。以前也做过不少单片机设计,但面对这次设计,似乎也有一点束手五册了。在这次的设计中,让我们发自内心的明白了以下这几个道理。其实,这几个道理以前我们就懂,就知道,甚至每个人都知道,但真正到了关键时间,我们还会不会遵循它来办事就是一个问号啦。书读百遍,其义自现。三个臭皮匠胜过一个

4、诸葛亮。团结就是力量。温故而知新。正因为我开始没有遵循这几个道理所以在设计中走了不少弯路,表现出来了我很多的不足之处,就因为这样我们才会在这次设计中有进步、有发展,同时使自己的能力得到进一步的提升。我将好好地记录下这次设计的点点滴滴,我想,这不单是我的经历,更是我的一笔财富。参考文献(1) 李广弟 单片机原理及应用 北京航天航空大学出版社 2008.2(2) 潘新民 微型计算机控制技术 电子工业出版社 2008.5(3) 梅丽凤 单片机原理及接口技术 清华大学出版社 2004.6(4) 李陪金 C语言程序设计案例教程 西安电子科技大学出版社 2008.1(5) 戴佳 51单片机C语言应用程序设

5、计实例精讲 电子工业出版社 2006.4(6) 谭浩强 C程序设计 清华大学出版社附录1、元器件清单名称型号参数数量单片机AT89S522液晶SBY12864Z-ZK3一块双12V变压器1发光二极管LED3二极管IN40018三极管9013,90144,8稳压管7805排阻10K*8电阻若干晶振11.0592MHz下载口电源接口电解电容100f470f4电容104300.1f30pf4 插座单片机插座所存器插座40引脚,24引脚开关按键普通按键12排针排座附录2、系统原理图原理图附录3、程序清单#include stdio.hintrins.hmath.h#define uchar unsig

6、ned char#define uint unsigned int#define ulong unsigned long sbit rs=P20;sbit rw=P21;sbit en=P22;sbit psb=P23;sbit ret=P25;sbit rd=P37;sbit s=P10;sbit s1=P14;sbit s2=P15;sbit s3=P16;sbit s4=P17;uchar count,s1num;unsigned int nin,ss;char yue,re,qi,shi,fen,miao;uchar dshi,dfen,dmiao,ling,aa,t1,p;uchar

7、 command,data0,data1,data2,com0,j,l;unsigned char command,data1,data2,com0,bb,bb0,aa,cc,i,yun;/uchar lcdH,lcdL,key; float ds,m,k;ulong ds0;bit flag,flag1,flag2,flag3,flag4;uchar disbuf9=0; /定义显示缓冲区/uchar code table=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;uchar code table1=0xc8,0xd5,0x

8、d2,0xbb,0xb6,0xfe,0xc8,0xfd,0xcb,0xc4,0xce,0xe5,0xc1,0xf9;/日六/uchar code table2=0x32,0x30,0x30,0x39,0xc4,0xea,0x30,0x35,0xd4,0xc2,0x30,0x31,0xc8,0xd5; /年月日/uchar code table4=0xd0,0xc7,0xc6,0xda,0xc1,0xf9; /星期六/uchar code tabping=32,29,32,31,32,31,32,32,31,32,31,32;uchar code tabrun=32,30,32,31,32,31

9、,32,32,31,32,31,32;uchar code xing1=3,6,0,3,5,1,3,6,2,4,0,2;uchar code xing2=4,0,0,3,5,1,3,6,2,4,0,2;uchar xing12=0;uchar tab12=0; /延时/void delay(uint ms) /延时250us uchar i; while(ms-) for(i=0;i125;i+); /LCD初始化/void lcd_int() ret=0; delay(3); ret=1; _nop_(); psb=1; /将PSB置1,通信方式为8BIT数据并口/写指令程序/void wr

10、ite_command(uchar command) rs=0; rw=0; P0=command; en=1; en=0;/写数据程序/void write_data(uchar data0) rs=1; P0=data0;/LCD功能设置/void lcd_set() command=0x30; /基本指令集/ write_command(command); command=0x01; command=0x06; command=0x0c;/清屏程序/void clear_lcd () command=0x34;void display() command=com0; data2=lcdH

11、; write_data(data2); data1=lcdL; write_data(data1);void display1(uchar y, uchar x, uchar *p) switch (y) case 1:write_command(0x7f+x); break; /液晶第一行 case 2:write_command(0x8f+x); /0x90+(x-1) case 3:write_command(0x87+x);break; case 4:write_command(0x97+x); default: while(*p) write_data(*p+);void xiao

12、shu()/先判断k是否为小数,如果k为小数,就将k转化为小数/ uint mg=1; if(flag1)cc;i+) mg*=10; k=k/(mg*1.0); cc=0; flag1=0;/键扫描程序/uchar keyscan()uchar scancode,tmpcode; P1=0xf0; / 行全为0 if(P1&0xf0)!=0xf0) /有键按下 delay(100); /延时去抖动=0xf0) /判是否真的有键按下 scancode=0xfe; /诼行扫描 while(scancode&0x10)!=0) P1=scancode; if(P1&=0xf0) /本行有键按下 t

13、mpcode=(P1&0xf0)|0x0f; /返回特征字节码,为1的位即对应于行和列 return(scancode)+(tmpcode); else scancode=(scancode1)|0x01; /行扫描码左移一位 return(0); /无键按下,返回值为0 disjia() com0=0x83;lcdH=0xbc;lcdL=0xd3;display(); com0+; lcdH=0xb7;lcdL=0xa8; com0=0x87;disjian()lcdL=0xf5;discheng()lcdH=0xb3;lcdL=0xcb;dischu()lcdL=0xfd;void jis

14、hu()/把ds0处理后放入显示缓冲区中/ disbuf0=ds0/1000000000%10; disbuf1=ds0/100000000%10; disbuf2=ds0/10000000%10; disbuf3=ds0/1000000%10; disbuf4=ds0/100000%10; disbuf5=ds0/10000%10; disbuf6=ds0/1000%10; disbuf7=ds0/100%10; disbuf8=ds0/10%10; disbuf9=ds0%10;void disds() com0=0x98; for(i=0;10;i+) if(i%2=0) com0+;w

15、rite_command(com0); write_data(tabledisbufi); flag=0; com0=0x88;lcdH=0x20;lcdL=0x20;16;i+) display();com0+;zhixing()/计算/ xiaoshu(); if(bb0=1) switch (bb) case 1:ds=m+k;m=ds;k=0; case 2:ds=m-k; case 3:ds=m*k; case 4:ds=m/k; default: else if(bb0=2) m=m*3.1415926536;m=m/180.0;ds=sin(m);ds=cos(m);ds=tan

16、(m);ds=1.0/tan(m); else if(bb0=3)ds=asin(m);ds=ds*180.0;ds=ds/3.1415926536;ds=acos(m);ds=atan(m);ds=1.0/atan(m); else if(bb0=4)ds=m*m; /平方/ds=m*m*m; /立方/ds=1;for(i=0;k;i+)ds=ds*m; /m的k次方/ds=exp(m); /e的m次方/ else if(bb0=5)ds=log(m); /自然对数/ds=log10(m); /常用对数/ds=sqrt(m); /开方/ if(ds4294967295) clear_lcd(

17、);display1(1,3,得数大于display1(2,2,二的三十二次方display1(4,2,请你按复位键delay(65000); ds0=ds; if(dsds0) if(ds1000) ds0=ds*1000000;jishu();disbuf9=disbuf8;disbuf8=disbuf7;disbuf7=disbuf6;disbuf6=disbuf5;disbuf5=disbuf4;disbuf4=10; else if(ds10000)ds0=ds*100000;disbuf5=10;100000)ds0=ds*10000;disbuf6=10;1000000)ds0=ds*1000;disbuf7=10;10000000)ds0=ds*100;disbuf8=10; else jishu(); disds();void jiemian1() display1(1,1,请按所选类型序号 if(!yun) display1(2,2,0 加减乘除 display1(3,2,1 弦切值 display1(4,2,2 反弦切值 else if(yun=1)3 幂运算 else 4 对数、开方运算void jiemian2() display1(2,3,下面进行 switch(bb0)display1(3,2,加减乘除运算弦切值运算反弦切值运算幂运算 case 5:

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

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