123976027毕业设计(论文)基于单片机的多功能计算器的设计_第1页
123976027毕业设计(论文)基于单片机的多功能计算器的设计_第2页
123976027毕业设计(论文)基于单片机的多功能计算器的设计_第3页
123976027毕业设计(论文)基于单片机的多功能计算器的设计_第4页
123976027毕业设计(论文)基于单片机的多功能计算器的设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、 2011 届毕业设计说明书 题 目:基于单片机的多功能计算器的设计 系 、 部: 电 气 与 信 息 工 程 系 学生姓名: 指导教师: 职 称 高 级 讲 师 专 业: 通 信 技 术 班 级: 0 8 0 1 学 号: 完成时间: 2011年5月9号 目录摘要1一、系统设计21.1、功能介绍.21.1.1、基本功能.21.1.2、扩展功能.21.2、总体设计方案.21.2.1、总体设计思路.21.2.2、方案论证与比较.21.2.3、系统组成.8二、重要器件的知识介绍82.1、单片机的知识介绍.82.1.1、单片机的主要性能.82.1.2、单片机的功能特性描叙.92.1.3、单片机的内部

2、结构方框图及芯片引脚图.92.1.4、单片机各引脚功能说明.102.1.5、单片机时钟电路.112.1.6、单片机复位电路.122.1.7、单片机下载口电路.12三、软件设计133.1、液晶显示设计.133.2、键盘输入设计.153.3、计算器函数设计.153.4、程序流程图.183.5、程序清单.20产品使用说明21参考文献22附录1、元器件清单23附录2、系统原理图24附录3、实物照片24附录4、程序清单27致 谢46摘要本设计采用单片机作为控制芯片,用c语言对其进行编程实现,输入由4*4行列式键盘控制,输出采用人性化的sby12864k-zk型液晶实现。该计算器为多功能计算器,在未进行计

3、算时,它是一个万年历时钟,并且带脑钟和星期显示,所以数据均可随时进行校准,校准数据采用的是独立式键盘,是将4*4行列式键盘的一根线拉低,然后读取与这根线交叉的4根线的所处状态来判断按键是否被按下。对于计算这个部分我采用的是行列键盘,10个数字键,一个小数点键,四个符号键,一个多功能键,通过判别该多功能键连续按的次数来决定该键此时的命令。由于c语言库函数繁多,所以我采用调用c语言库函数来解决多种运算类型,这样编程更简单,运行起来也更可靠。关键字:单片机,点阵图形液晶,行列键盘,c语言库函数。abstract the design uses a single-chip microcomputer

4、as the control chip, using c programming language of its input from 4 * 4 matrix keyboard control, the output of the use of human sby12864k-zk-type liquid crystal to achieve. multi-function calculator for the calculator, before the calculation, it is a calendar clock and bell and weeks with the brai

5、n showed that there may at any time calibration data, calibration data is used in stand-alone keyboard, is a 4 * 4 matrix keyboard down one line, and then read with the root of the cross-line 4-line state to determine which button has been pressed, which is only four keys for the three calendar butt

6、on calibration and the control of the brain clock, and the other button is used to switch into the mode of calculation. for this part of the calculation i used the keyboard matrix, 10 numeric keys, a decimal point key, four symbol keys, a multi-function keys, multi-function through the identificatio

7、n of the row by the number of keys to determine the order of the key at this time. c language library function as a result of many, so i used to call c language library function to solve a wide range of operator types, such programming is much simpler, it is also more reliable. keywords: single-chip

8、, dot-matrix graphic lcd, matrix keyboard, c language library function. 一、系统设计1.1、功能介绍1.1.1、基本功能根据所学知识,自行设计一个计算器,要求自行设计供电电源,该计算器能够实现加减乘除四则混合运算,能够实现连续计算。1.1.2、扩展功能(1)、该计算器能够实现浮点数的运算。(2)、该计算器在不进行计算时能够当时钟用,并且该时钟可显示星期和日历,同时能够修改其值。(3)、该计算器能够实现加减乘除以外的其他运算。1.2、总体设计方案1.2.1、总体设计思路本设计主要采用以下基本模块来实现,控制器模块,输入模块,

9、输出模块和电源模块。通过对控制器进行编程。使其对输入模块的信号进行处理计算,然后通过输出模块反馈给使用者以计算结果。1.2.2、方案论证与比较1.2.2.1、控制部分的设计方案论证与选择根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。对于控制器的选择有以下三种方案。方案一:采用计算器专用芯片实现。用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。方案二:采用fpga(现场可编程门阵列)作为系统的控制器。f

10、pga将所有器件集成到一块芯片上,体积小,节省空间,提高了稳定性;直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,工作可靠性好。可以实现各种复杂的逻辑功能,规模大,密度高,采用并行的输入输出方式,系统处理速度高,适合作为大规模实时系统的控制核心。由fpga内部编程实现计算器功能,本设计对数据处理速度的要求不是很高,fpga的高速处理的优势得不到充分的体现,由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物电路板布线复杂,加重了电路设计和实际焊接的工作。并且fpga的价格相对较高,性价比太低。方案三、用单片机实现。由于单片机集成了运算器电路、控制电路、存

11、储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用c语言编写,对于一些复杂的计算功能,可以调用c语言库函数。使编写程序变得非常简单。所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。性价比也相当高。更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。综上所述,并通过各个方面综合比较为达到最佳效果。我们采用方案三利用单片机控制器。1.2.2.3、显示电路的设计方案论证与选择方案一:数码管显示方案

12、。数码管显示使用两个四位一体动态数码管显示方案,此设计电路如图1-1所示。采用动态数码管显示,具有程序简单, 对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。显示直观的特点。但只能显示数字和一些代码,不能显示汉字及一些常用的符号,且硬件设计比较复杂。图1-1、两个四位一体数码电路图方案二;采用at1602型液晶显示(一)、基本特性a、显示特性b、物理特性c外形尺寸如图1-2所示图1-2、液晶的外形尺寸(二)、接口定义at1602与单片机的接口电路如图1-3所示,该液晶有16个引脚,它能显示32个字符,并且硬件电路设计简单,显示美观,但驱动程序相对数码管来说要复杂一些,其次稳定

13、性也不如数码管。而且它只能显示ascii码,不能够显示汉字,人机交互能力较差。 图1-3、at1602与单片机接口电路方案三:采用汉字图形点阵液晶显示器rt12864显示方案。rt12864m汉字图形点阵液晶显示模块,可显示汉字及图形。供电电源为3.3v+5v(内置升压电路,无需负压),能采用并行和串行两种通信方式。并有光标显示、画面移位、自定义字符、睡眠模式等功能。综上所叙,12864的显示效果好、功能齐全,所以我们选用12864液晶显示。其与单片机的接口电路如图1-4所示。图1-4、12864与单片机的接口电路1.2.2.4、单片机电源部分的设计方案论证与选择由于本次设计中单片机工作电源为

14、5v,所以需要稳压,对于5v电源这里有以下两种方案。方案一:用固定式三端稳压器7805。如图1-5,7805系列稳压器输出固定的正电压5v,输入端接电容c1可以进一步滤除纹波,输出端接电容c2能改变负载的瞬态影响,使电路稳定工作c1、c2最好采用漏电流小的钽电容。如果采用电解电容,则电容要比图中数值增加10倍。图1-5、固定式三端稳压器方案二:用7805加一些外围器件。虽然7805三端集成稳压管内部有过流、过热和安全区的保护电路,但其输出仍有可能发生过压的危险。因此本电路加了过压保护电路,电路如图1-6所示,该电路由稳压管vd3、电阻r3和晶闸管vs组成。另外由于7805的最大输出电流为1.5

15、a,可以通过在7805的1脚与vt1的基极相连,7805的2脚与vt1的集电极相连,这样就可输出1.6a2a的电流。如需更大的电流,可再并联几个大功率三极管。图1-6、可扩流过压保护5v稳压电源综上所述,方案一电路简单,而且已符合本次设计的要求,再加上第二种方案所用元件较多,性能价格比不高,所以我们选择方案一,基于本次设计我们需要5v和12v电源,12v应用于步进电机。其电路如图1-7所示。图1-7、电源模块电路1.2.2.5、键盘设计方案与选择方案一:独立键盘。独立键盘为一端接地,另一端接i/o口,并且要接上拉电阻。这种键盘的硬件都很容易实现,但每一个按键就要用一个i/o口,非常的浪费单片机

16、的i/o口资源,不适合本次设计。方案二:通过ps2协义,用键盘同单片机相接,从而实现单片机与键盘通信。其电路如图1-8所示。现在pc机广泛采用的ps/2接口为minidin 6引脚的连接器。1数据线(data);未用;3电源地(gnd);4电源(+5 v);5时钟(clk);6未用。 图1-8、键盘与单片机接口图由此图可知,使用键盘硬件结构比较简单,但键盘的体积太大,所以此系统不采用此方案。方案三:自制编码键盘。编码键盘的电路如图1-9所示,这种键盘有编程简单,占用资源少,但其硬件比较复杂,要用很多的二极管,不是很理想。 图1-9、自制编码键盘电路图方案四:4*4行列式键盘。其电路图如图图1-

17、10所示,这种键盘的硬件简单,使用的i/o口也不多,而且这种键盘的编程方法已很成熟。所以本次设计采用这种行列式键盘。其电路图如图图1-10、4*4行列式键盘电路图1.2.3、系统组成经过方案比较与论证,最终确定的系统组成框图如图1-11所示。其中单片机作为主控设备对采集输入信号后并进行处理,最后通过输出设备输出给使用者。,该系统的结构框图如图。图1-11、系统组成方框图二、重要器件的知识介绍2.1、单片机的知识介绍由于atmel公司生产的at89s52型单片机是即便于下载又好用,而且能够满足本设计的要求。所以我选择at89s52型单片机。2.1.1、单片机的主要性能2.1.2、单片机的功能特性

18、描叙2.1.3、单片机的内部结构方框图及芯片引脚图如图2-1和图2-2所示图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后,被内部上拉为高,可用作输入

19、,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号

20、和控制信号。p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89s52的一些特殊功能口,如表3-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(

21、外部数据存储器读选通)p3口同时为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如

22、果微处理器在外部执行状态ale禁止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。2.1.5、单片机时钟电路时钟

23、电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。在mcs-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚x1,输出端为引脚x2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。 此电路采用12mhz的石英晶体。时钟电路如下图2-2: 图2.2时钟电路2.1.6、单片机复位电路复位是单片机的初始化操作,其主要功能是把pc初始化为0000h,使单片机从0000h单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁

24、状态时,为摆脱困境,也需要按复位键以重新启动。rst引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12mhz的晶振,则复位信号持续时间应超过4s才能完成复位操作。复位操作有上电自动复位和按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。按键电平复位是通过使复位端经电阻与vcc电源接通而实现的。在本设计中采用了按键电平复位方式,其复位电路如下图2-3。图2-3、复位电路2.1.7、单片机下载口电路下载口电路以一块74hc373芯片为主,电路原理图如图2-4所示。由于电路中只用了一片74hc373所以完全

25、可以把电路装在db25插针式并口插头内部,这个可以做到很小巧,可以很方便的使用。为了稳定也可以芯片外围加一些电阻、电容等元件,具体电路网上有提供下载。光是做好下载线是不行的,s51系统的isp下载方式还要求要下载程序单片机运行在最小化系统中。只要把的相应引脚连接起来就可以对s51进行isp下载了。要接的引线是s51的6,7,8,9,20,40引脚。晶振可以在3m24m间选用,当然是看你的目标板而选择。为了方便使用我们需要做一个下载头,电路简单接线正确的话一般无需要调整就可以正常使用,如有问题可以用软件中的isptest.exe(下载线调试程序) 检查你的74hc373芯片是否正常和你的电脑并口

26、是否正常。图2-4、下载口电路原理图三、软件设计本设计中采用c语言对单片机进行编程。采用的是自下而上的设计方式,先设计出每一个模块(子程序),然后再慢慢扩大,最后组成整个系统。3.1、液晶显示设计本次设计我采用syb12864k-zk型液晶来作显示模块。对这种器件只要会看时序图,那么所有的问题都会迎难而解。其时序图如图3-1。图3-1 (a)、液晶读时序图图3-1 (b)、液晶写时序图由时序图我们可以写出液晶的初始化函数、功能设置函数、清屏函数、写指令函数、写数据函数。/lcd初始化/void lcd_int()ret=0;delay(10);ret=1;_nop_();psb=1; /将ps

27、b置1,通信方式为8bit数据并口/_nop_();/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);comm

28、and=0x30;write_command(command); /写指令程序/ void write_command(uchar command)delay(5);rs=0;rw=0;p0=command;en=1;_nop_();_nop_();en=0;/写数据程序/void write_data(uchar data0) delay(5);rs=1;rw=0;p0=data0;en=1;_nop_();_nop_();en=0;3.2、键盘输入设计这里我先用4*4行列式键盘。键盘扫描函数如下:/键扫描程序/uchar keyscan()uchar scancode,tmpcode; p

29、1=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);

30、 /无键按下,返回值为03.3、计算器函数设计计算器的设计是本次设计的重点。因为考虑到该硬件中只有16个按键,所以我采用了按键复用的方式来解决这一难题。这16个键分别是09十个数字键。四个运算符号键,一个小数点键,一个多功能键。这个多功能键单击时为“=”,双击时为请零键,三击时为运算类型选择键。在待机时,该计算器显示万年历,如果要进行计算则按任意键即可进入计算界面。默认的计算是加减乘除,如果说要进行加减乘除以外的运算,那么就三键等号键,就可进入运算类型选择模式。选择好相应的类型就可以进行运算啦。下面我来介绍几个重要的函数。(1)、函数名:sin 功能:正弦函数 用法:doublesin(dou

31、blex); #include intmain(void) doubleresult,x=0.5; result=sin(x); printf(thesin()of%lfis%lfn,x,result); return0; (2)、函数名: cos 功 能: 余弦函数 用 法: double cos(double x); #include int main(void) double result; double x = 0.5; result = cos(x); printf(the cosine of %lf is %lfn, x, result); return 0; (3)、函数名:ta

32、n 功能:正切函数 用法:doubletan(doublex); #include intmain(void) doubleresult,x; x=0.5; result=tan(x); printf(thetanof%lfis%lfn,x,result); return0; (4)函数名: asin 功 能: 反正弦函数 用 法: double asin(double x); #include #include int main(void) double result; double x = 0.5; result = asin(x); printf(the arc sin of %lf i

33、s %lfn, x, result); return(0); (5)、函数名: acos 功 能: 反余弦函数 用 法: double acos(double x); #include int main(void) double result; double x = 0.5; result = acos(x); printf(the arc cosine of %lf is %lfn, x, result); return 0; (6)、函数名: atan 功 能: 反正切函数 用 法: double atan(double x); #include int main(void) double

34、 result; double x = 0.5; result = atan(x); printf(the arc tangent of %lf is %lfn, x, result); return(0); (7)、函数名: exp 功 能: 指数函数 用 法: double exp(double x); #include int main(void) double result; double x = 4.0; result = exp(x); printf(e raised to the power of %lf (e %lf) = %lfn, x, x, result); return

35、 0; 3.4、程序流程图主程序流程图显示程序流程图键扫程序流程图3.5、程序清单程序清单见附录4。产品使用说明该产品16个按键作为输入信号,液晶为显示器,按键功能如下图所示。09为数字键,其中03有第二功能,一个小数点键,一个等号键,该键为四功能键,四个运算符号键。如果要使用计算器功能,则直接按3键即可进入计算器模式,等号键单键为“=”,双键为清除,默认计算类型为加减乘除,若要进行其他类型的计算,则可使用等号键三键,然后选择运算类型进行运算,此时符号键所对应的运算符号也有相应的变化。该计算器的计算功能可实现加减乘除、正弦余弦正切余切、反正弦反余弦反正切反余切、平方、立方、m的k次方(m和k均

36、由键盘输入)、e为底的m次方、自然对数、常用对数、开平方根。可谓功能齐全,操作简单,给使用带来极大方便。参考文献1 李广弟 单片机原理及应用 北京航天航空大学出版社 2008.22 潘新民 微型计算机控制技术 电子工业出版社 2008.53 梅丽凤 单片机原理及接口技术 清华大学出版社 2004.64 戴佳 51单片机c语言应用程序设计实例精讲 电子工业出版社 2006.45 赵秀珍.单片微型计算机原理及其应用m.北京:中国水利水电出版社,2001 6 胡如龙,胡彪,邓湘凤.一种基于at89c51 单片机嵌入式系统的温湿度检测控制系统j. 中国科技论文在线,7 张毅刚.mcs-51单片机应用设

37、计m.哈尔滨:哈尔滨工大学出版社,1990 8 马忠梅,张凯,马岩,单片机的c语言应用程序设计,m,北京:北京航空航天大学出版社,2003.11 9 李华.mcs-51 系列单片机实用接口技术m.北京:北京航空航天大学出版社,199310 马忠梅.单片机的c语言windows环境编程宝典m. 北京:北京航空航天大学出版社,2003 11 李光飞.单片机c程序设计指导m.北京:北京航空航天大学出版社,200312 陈景初.单片机应用系统设计与实践m.北京:北京航空航天大学出版社,2004附录2、系统原理图原理图附录3、实物照片附录4、程序清单#include #include #include

38、#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,

39、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;u

40、char 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

41、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,通信方式为8b

42、it数据并口/_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(comma

43、nd);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;wri

44、te_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为小

45、数,就将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)

46、 /本行有键按下 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+; lcd

47、h=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%1

温馨提示

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

评论

0/150

提交评论