基于单片机的计算器结构设计.doc_第1页
基于单片机的计算器结构设计.doc_第2页
基于单片机的计算器结构设计.doc_第3页
基于单片机的计算器结构设计.doc_第4页
基于单片机的计算器结构设计.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的计算器结构设计1 系统设计1.1 功能介绍1.1.1 基本功能根据所学知识,自行设计一个计算器,要求自行设计供电电源,该计算器能够实现加减乘除四则混合运算,能够实现连续计算。1.1.2 扩展功能(1)该计算器能够实现浮点数的运算。(2)该计算器在不进行计算时能够当时钟用,并且该时钟可显示星期和日历,同时能够修改其值。(3)该计算器能够实现加减乘除以外的其他运算。1.2 总体设计方案1.2.1 总体设计思路本设计主要采用以下基本模块来实现,控制器模块,输入模块,输出模块和电源模块。通过对控制器进行编程。使其对输入模块的信号进行处理计算,然后通过输出模块反馈给使用者以计算结果。1.2.2 方案论证与比较(1)控制部分的设计方案论证与选择根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。对于控制器的选择有以下二种方案。方案一:采用计算器专用芯片实现。用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。方案二、用单片机实现。由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数。使编写程序变得非常简单。所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。性价比也相当高。更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。综上所述,并通过各个方面综合比较为达到最佳效果。我们采用方案二利用单片机控制器。(2)显示电路的设计方案论证与选择方案一:数码管显示方案。数码管显示使用两个四位一体动态数码管显示方案,此设计电路如图1-1所示。采用动态数码管显示,具有程序简单, 对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。显示直观的特点。但只能显示数字和一些代码,不能显示汉字及一些常用的符号,且硬件设计比较复杂。图1-1 两个四位一体数码电路图方案二:采用汉字图形点阵液晶显示器RT12864显示方案。RT12864M汉字图形点阵液晶显示模块,可显示汉字及图形。供电电源为3.3V+5V(内置升压电路,无需负压),能采用并行和串行两种通信方式。并有光标显示、画面移位、自定义字符、睡眠模式等功能。综上所叙,12864的显示效果好、功能齐全,所以我们选用12864液晶显示。其与单片机的接口电路如图1-2所示。图1-2 12864与单片机的接口电路 (3)单片机电源部分的设计方案论证与选择由于本次设计中单片机工作电源为5V,所以需要稳压,对于5V电源这里有以下两种方案。方案一:用固定式三端稳压器7805。如图1-5,7805系列稳压器输出固定的正电压5V,输入端接电容C1可以进一步滤除纹波,输出端接电容C2能改变负载的瞬态影响,使电路稳定工作C1、C2最好采用漏电流小的钽电容。如果采用电解电容,则电容要比图中数值增加10倍。图1-3 固定式三端稳压器方案二:用7805加一些外围器件。虽然7805三端集成稳压管内部有过流、过热和安全区的保护电路,但其输出仍有可能发生过压的危险。因此本电路加了过压保护电路,电路如图1-4所示,该电路由稳压管VD3、电阻R3和晶闸管VS组成。另外由于7805的最大输出电流为1.5A,可以通过在7805的1脚与VT1的基极相连,7805的2脚与VT1的集电极相连,这样就可输出1.6A2A的电流。如需更大的电流,可再并联几个大功率三极管。图1-4 可扩流过压保护5V稳压电源综上所述,方案一电路简单,而且已符合本次设计的要求,再加上第二种方案所用元件较多,性能价格比不高,所以我们选择方案一。(4)键盘设计方案与选择方案一:独立键盘。独立键盘为一端接地,另一端接I/O口,并且要接上拉电阻。这种键盘的硬件都很容易实现,但每一个按键就要用一个I/O口,非常的浪费单片机的I/O口资源,不适合本次设计。方案二:4*4矩阵式键盘。其电路图如图图1-5所示,这种键盘的硬件简单,使用的I/O口也不多,而且这种键盘的编程方法已很成熟。所以本次设计采用这种矩阵式键盘。其电路图如图图1-5 4*4矩阵式键盘电路图 1.2.3 系统组成经过方案比较与论证,最终确定的系统组成框图如图1-6所示。其中单片机作为主控设备对采集输入信号后并进行处理,最后通过输出设备输出给使用者,该系统的结构框图如图。图1-6 系统组成方框图2 重要器件的知识介绍2.1 单片机的知识介绍由于ATMEL公司生产的AT89S52型单片机是即便于下载又好用,而且能够满足本设计的要求。所以我选择AT89S52型单片机。2.1.1 单片机的主要性能(1) 与MCS-51单片机产品兼容 (2) 8K节在系统可编程Flash存储器(3) 1000次擦写周期(4) 全静态操作:0Hz-33Hz(5) 三级加密程序存储器(6) 32个可编程IO口线(7) 三个16位定时器计数器(8) 八个中断源(9) 全双工UART串行通道(10) 低功耗空闲和掉电模式(11) 掉电后中断可唤醒(12) 看门狗定时器(13) 双数据指针2.1.2 单片机的功能特性描叙 AT89S52是一种低功耗,高性能CMO58位微控制器,具有8K在系统可编程Flash存储器。使用ATMEL公司高密度非易使性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,迹适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能:8K字节Flash、256字节RAM、32位IO口线、看门狗定时器、2个数据指针、三个16位定时器计数器、一个6向量2级中断结构、全双工串行口、片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2钟软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM定时器计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2.1.3 单片机的内部结构方框图及芯片图2-1 单片机的内部结构方框图2.1.4 单片机各引脚功能说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,如图表2.1。 表2.1 AT89S52的一些特殊功能口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1 (记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.1.5 单片机时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。 此电路采用12MHz的石英晶体。时钟电路如下图2-2: 图2-2 时钟电路2.1.6 单片机复位电路 复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12MHz的晶振,则复位信号持续时间应超过4s才能完成复位操作。复位操作有上电自动复位和按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。在本设计中采用了按键电平复位方式,其复位电路如下图2-3。图2-3 复位电路2.1.7 单片机下载口电路下载口电路以一块74HC373芯片为主,电路原理图如图2-4所示。由于电路中只用了一片74HC373所以完全可以把电路装在DB25插针式并口插头内部,这个可以做到很小巧,可以很方便的使用。为了稳定也可以芯片外围加一些电阻、电容等元件,具体电路网上有提供下载。光是做好下载线是不行的,S51系统的ISP下载方式还要求要下载程序单片机运行在最小化系统中。只要把的相应引脚连接起来就可以对S51进行ISP下载了。要接的引线是S51的6,7,8,9,20,40引脚。晶振可以在3M24M间选用,当然是看你的目标板而选择。为了方便使用我们需要做一个下载头,电路简单接线正确的话一般无需要调整就可以正常使用,如有问题可以用软件中的IspTest.exe(下载线调试程序) 检查你的74HC373芯片是否正常和你的电脑并口是否正常。图2-4 下载口电路原理图3 程序流程图主程序流程图显示程序流程图键扫程序流程图致 谢毕业设计是我大学学习生活的最后一项学习任务,是对我大学学习的综合考核。在为期三个多月的毕业设计过程中,我不仅较为系统的复习了以前学过的知识,而且又学习了许多新知识,使我的只是结构更加系统化,也更加完善。同时,也提高了我独立分析问题、解决问题的能力。在本文的选题、构思、写作和修改直至最终定稿的过程中,更是浸透了导师大量的心血,感激之情难以言表。而且,在和老师的交流过程中,还学到了许多做人、处事的道理,使我终身受益。我要诚挚地向培养我的各位领导以及实验室的各位老师表示感谢!在此,我表示衷心感谢。三年的学习生活,他们无形中给了我很大的帮助,使我顺利完成学业。掌握了一技之长。同时,我要感谢我的母校襄阳汽车职业技术学院,特别是我即将踏上工作岗位时,给我这样一个锻炼、学习的机会,使我加深了对以前知识的理解,拓宽了知识面,也提高了我对所学知识的综合应用能力。在此我谨向我的导师以及在毕业设计过程中给予我很大帮助的老师、同学们致以最诚挚的谢意。 参考文献(1) 李广弟 单片机原理及应用 北京航天航空大学出版社 2008.2(2) 潘新民 微型计算机控制技术 电子工业出版社 2008.5(3) 梅丽凤 单片机原理及接口技术 清华大学出版社 2004.6(4) 李陪金 C语言程序设计案例教程 西安电子科技大学出版社 2008.1(5) 戴佳 51单片机C语言应用程序设计实例精讲 电子工业出版社 2006.4(6) 谭浩强 C程序设计 清华大学出版社 2006.4附录1 系统原理图 附录2 程序清单#include #include #include #include #define uchar unsigned 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 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,0xd2,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,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) /延时250usuchar i;while(ms-)for(i=0;i125;i+);/LCD初始化/void lcd_int()ret=0;delay(3);ret=1;_nop_();psb=1; /将PSB置1,通信方式为8BIT数据并口/_nop_();/写指令程序/void write_command(uchar command)delay(3);rs=0;rw=0;P0=command;en=1;_nop_();_nop_();en=0;/写数据程序/void write_data(uchar data0) delay(3);rs=1;rw=0;P0=data0;en=1;_nop_();_nop_();en=0;/LCD功能设置/void lcd_set()command=0x30; /基本指令集/write_command(command);command=0x01;write_command(command);command=0x06;write_command(command);command=0x0c;write_command(command);/清屏程序/void clear_lcd ()command=0x01;write_command(command);command=0x34;write_command(command);command=0x30;write_command(command);void display()command=com0;write_command(command);data2=lcdH;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); break; /0x90+(x-1)case 3:write_command(0x87+x);break;case 4:write_command(0x97+x);break;default:break;while(*p) write_data(*p+); void xiaoshu()/先判断k是否为小数,如果k为小数,就将k转化为小数/uchar i;uint mg=1;if(flag1)for(i=0;icc;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); /延时去抖动 if(P1&0xf0)!=0xf0) /判是否真的有键按下 scancode=0xfe; /诼行扫描 while(scancode&0x10)!=0) P1=scancode; if(P1&0xf0)!=0xf0) /本行有键按下 tmpcode=(P1&0xf0)|0x0f; /返回特征字节码,为1的位即对应于行和列 return(scancode)+(tmpcode); else scancode=(scancode1)|0x01; /行扫描码左移一位 return(0); /无键按下,返回值为0disjia()com0=0x83;lcdH=0xbc;lcdL=0xd3;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;disjian()com0=0x83;lcdH=0xbc;lcdL=0xf5;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;discheng()com0=0x83;lcdH=0xb3;lcdL=0xcb;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;dischu()com0=0x83;lcdH=0xb3;lcdL=0xfd;display();com0+; lcdH=0xb7;lcdL=0xa8;display();com0=0x87;void jishu()/把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()uchar i;com0=0x98;for(i=0;i10;i+)if(i%2=0) com0+;write_command(com0); write_data(tabledisbufi);flag=0;com0=0x88;lcdH=0x20;lcdL=0x20;for(i=0;i16;i+) display();com0+;com0=0x87; zhixing()/计算/xiaoshu();if(bb0=1)switch (bb)case 1:ds=m+k;m=ds;k=0;break;case 2:ds=m-k;m=ds;k=0;break;case 3:ds=m*k;m=ds;k=0;break;case 4:ds=m/k;m=ds;k=0;break;default:break; else if(bb0=2) switch (bb)case 1:m=m*3.1415926536;m=m/180.0;ds=sin(m);break; case 2:m=m*3.1415926536;m=m/180.0;ds=cos(m);break; case 3:m=m*3.1415926536;m=m/180.0;ds=tan(m);break; case 4:m=m*3.1415926536;m=m/180.0;ds=1.0/tan(m);break; default:break; else if(bb0=3) switch (bb)case 1:ds=asin(m);ds=ds*180.0;ds=ds/3.1415926536;break; case 2:ds=acos(m);ds=ds*180.0;ds=ds/3.1415926536;break; case 3:ds=atan(m);ds=ds*180.0;ds=ds/3.1415926536;break; case 4:ds=1.0/atan(m);ds=ds*180.0;ds=ds/3.1415926536;break; default:break; else if(bb0=4) switch (bb)case 1:ds=m*m;break; /平方/case 2:ds=m*m*m;break; /立方/case 3:ds=1;for(i=0;ik;i+)ds=ds*m;break; /m的k次方/case 4:ds=exp(m);break; /e的m次方/default:break; else if(bb0=5) switch (bb)case 1:ds=log(m);break; /自然对数/case 2:ds=log10(m);break; /常用对数/case 3:ds=sqrt(m);break; /开方/default:break; if(ds4294967295)clear_lcd();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;jishu();disbuf9=disbuf8;disbuf8=disbuf7;disbuf7=disbuf6;disbuf6=disbuf5;disbuf5=10;else if(ds100000)ds0=ds*10000;jishu();disbuf9=disbuf8;disbuf8=disbuf7;disbuf7=disbuf6;disbuf6=10;else if(ds1000000)ds0=ds*1000;jishu();disbuf9=disbuf8;disbuf8=disbuf7;disbuf7=10;else if(ds2)yun=0;jiemian1();break;default:break; void set()ds=0;m=0;k=0;bb=0;cc=0;flag1=0;/键功能程序/void keyproc(uchar key)key=keyscan();switch (key) Case 0x11:lcdH=0xa3;lcdL=0xb0;if(flag1)cc+; com0+;p=0;k=k*10+p;display();aa=0;break;case 0x21:lcdH=0xa3;lcdL=0xb1;if(flag1)cc+; com0+;p=1;k=k*10+p;display();aa=0;break; case 0x41:lcdH=0xa3;lcdL=0xb2;if(flag1)cc+; com0+;p=2;k=k*10+p;display();aa=0;break;case 0x81:lcdH=0xa3;lcdL=0xb3;if(flag1)cc+; com0+;p=3;k=k*10+p;display();aa=0;break; case 0x12:lcdH=0xa3;lcdL=0xb4;if(flag1)cc+; com0+;p=4;k=k*10+p;display();aa=0;break;case 0x22:lcdH=0xa3;lcdL=0xb5;if(flag1)cc+; com0+;p=5;k=k*10+p;display();aa=0;break;case 0x42:lcdH=0xa3;lcdL=0xb6;if(flag1)cc+; com0+;p=6;k=k*10+p;display();aa=0;break; case 0x82:lcdH=0xa3;lcdL=0xb7;if(flag1)cc+; com0+;p=7;k=k*10+p;display();aa=0;break; case 0x14:lcdH=0xa3;lcdL=0xb8;if(flag1)cc+; com0+;p=8;k=k*10+p;display();aa=0;break; case 0x24:lcdH=0xa3;lcdL=0xb9;if(flag1)cc+; com0+;p=9;k=k*10+p;display();aa=0;break;case 0x44:lcdH=0xa3;lcdL=0xae;com0+;flag1=1;display();aa=0;break; /清除 / case 0x84:aa+;if(aa=1)zhixing();if(aa=2)clear_lcd();lcd_int();lcd_set();com0=0x8f;set();else if(aa=3)bb0=0;jiemian1();while(bb0=0)keyproc0(key);yun=0;clear_lcd();jiemian2();elseflag4=1; break;/计算 /case 0x18:if(bb=0) xiaoshu();m=k;k=0;bb=1;disjia();flag1=0; elsezhixing();bb=1;disjia(); aa=0;break;/加法,这四句中的flag1=0可去掉,因为在xiaoshu()中已有/case 0x28:if(bb=0) xiaoshu();m=k;k=0;bb=2;disjian();flag1=0; elsezhixing();bb=2;disjian(); aa=0;break;/减法/case 0x48:if(bb=0) xiaoshu();m=k;k=0;bb=3;discheng();flag1=0;elsezhixing();bb=3;discheng();aa=0;break;/乘法/case 0x88:if(bb=0) xiaoshu();m=k;k=0;bb=4;dischu();flag1=0; elsezhixing();bb=4;dischu(); aa=0;break;/除法/default:break; void shuc1(uchar com1,uchar date)uchar sh,ge;sh=date/10;ge=date%10;com0=com1; lcdH=tablesh;lcdL=tablege;display();write_command(com0-);void shuc2(uchar com2,unsigned int x)uchar x0,x1,x2,x3;x0=x/1000;x1=x/100%10;x2=x/10%10;x3=x%10;com0=com2;lcdH=tablex0;lcdL=tablex1;display();com2+; com0=com2;lcdH=tablex2;lcdL=tablex3;display();write_command(com0-);void qix(uchar com3,uchar qi)com0=com3;lcdH=table1qi*2;lcdL=table1qi*2+1;display();void init()com0=0x7f; rd=1;nin=2009;yue=5; re=1; qi=6;shi=7; fen=59;miao=55;dshi=6; dfen=30;dmiao=0;TMOD=0x01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;EA=1;ET0=1;TR0=1;lcd_int();lcd_set();for(j=0;j14;j+)if(j%2=0)com0+;command=com0;write_command(command);write_data(table2j);com0=0x92;lcdH=0xa1;lcdL=0xc3;display();com0=0x94;display();com0=0x99;display();com0=0x9b;display();shuc1(0x91,shi);shuc1(0x93,fen);shuc1(0x95,miao);shuc1(0x98,dshi);shuc1(0x9a,dfen);s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论