基于单片机设计计算器C语言编码.docx

上传人:PIYPING 文档编号:10606481 上传时间:2021-05-25 格式:DOCX 页数:22 大小:147.45KB
返回 下载 相关 举报
基于单片机设计计算器C语言编码.docx_第1页
第1页 / 共22页
基于单片机设计计算器C语言编码.docx_第2页
第2页 / 共22页
基于单片机设计计算器C语言编码.docx_第3页
第3页 / 共22页
基于单片机设计计算器C语言编码.docx_第4页
第4页 / 共22页
基于单片机设计计算器C语言编码.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于单片机设计计算器C语言编码.docx》由会员分享,可在线阅读,更多相关《基于单片机设计计算器C语言编码.docx(22页珍藏版)》请在三一文库上搜索。

1、基于单片机的计算器设计 目录1.设计概述 2.硬件设计 3.软件设计 4.设计总结 5.参考文献 1设计概述单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。在此次设计中,设计课题是基于单片机的计算器设计。由于计算器需要比较多的输入输出口,所以采用内部存储资源比较pic18f452单片机(本打算使用自己比较熟悉的AT89C52,但是在一些单片机论坛上大多数有设计经验者推荐使用pi

2、c18f452,所以在此也选用pic18f452),8位LCD动态显示,需要14根数据线,其中6根作为线选,相当于地址线,选择其中一位显示,另外8根作为LCD显示码输入线。根据计算器的输入功能需求,采用44矩阵键盘,采用矩阵键盘也是利用软件节省硬件,利用内部ROM,进行循环查询。扬声器可以用一个准IO口。采用pic18f452作为运算和控制单元完全满足系统的需求。计算器输出部分采用LCD,因为计算器是8位数据显示,所以用8位8段LCD,采用LCD动态显示,利用软件节省硬件外部资源。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面采用C语言进行编写。设计的结果能够完

3、成最高8位有效数字无浮点加、减、乘、除计算功能。 2硬件设计 2.1 计算器模拟系统功能要求:(1)要求模拟的计算器至少显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示;(2)设计44键盘,分别表示09、/ 、,输入的数字从设计的键盘输入;(3)第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个显示完毕后,再按下按键时,给出“嘀”提示音;(4)可以对计算结果小于256的两个无符号数进行加法运算,并显示计算结果。对于、/、和的运算为提高部分;2.2总体设计方案由于计算器需要比较多的输入输出口,所以采用内部存储资源比较多的p

4、ic18f452单片机,8位LCD动态显示,需要14根数据线,其中6根作为线选,相当于地址线,选择其中一位显示,另外8根作为LCD显示码输入线。根据计算器的输入功能需求,采用44矩阵键盘,采用矩阵键盘也是利用软件节省硬件,利用内部ROM,进行循环查询。扬声器可以用一个准IO口。采用pic18f452作为运算和控制单元完全满足系统的需求。2.3系统硬件设计复位电路:RST引脚是复位信号输入端,高电平有效。采用上电复位,因为本系统设计的计算器键盘具有复位键,所以不需要进行手动复位,以节省硬件资源。上电复位是利用电容充电来实现的,上电瞬间RST端口电位与VCC相同,随着充电电流的减少,RST电位下降

5、,最后被嵌位在0V。电容采用22F电容,电阻选择10K。时钟电路:时钟是时序的基础,51核片内由一个反相放大器构成振荡器,可以由它产生时钟,时钟可以由两种方式产生内部方式和外部方式。本系统采用内部方式,在XTAL1和XTAL2端外接石英晶体作为定时元件,内部反相放大器自激振荡,产生时钟。时钟发生器对振荡脉冲二分频。电容采用30pF电容。显示电路:采用8位8段共阴极LCD,P0口作为LCD显示码输出端,P2口接线选端。P0口因内部没有上拉电阻,无法提供较大电流,需连接上拉电阻。键盘电路:采用P3口与矩阵键盘连接。 3软件设计3.1仿真软件选择电路仿真软件选用Proteus ISIS,本来是选用伟

6、福仿真软件,但是在安装过程中,伟福仿真软件无法在本人WIN7 64位操作系统上正常安装,于是采用Proteus ISIS。3.1.1 Proteus ISIS简介 Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。该软件的特点是:(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2 C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示

7、波器、逻辑分析仪、信号发生器等。(3)目前支持的单片机类型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(4)支持大量的存储器和外围芯片。3.2仿真软件电路图在仿真软件Proteus ISIS上根据设计需求,设计出完整的电路图:3.3计算流程图设计键盘模块是否CL初始化YY+ABA=10A+key保存运算符B=10B+key是否+-*/是否A是否A代表按下运算符号前的数(程序中为A1),B代表按下运算符号后的数(程序中为B1)。程序中另外定义一个变量ab以区分A与B。流程图中省略了一些细节,

8、比如运算结果如果首位是0则不显示,开机显示0,每次按下键时将LCD移位显示,以及将最终运算结果的每一位上数字计算出来。3.4程序设计程序代码采用C语言:#include#define uchar unsigned char uchar data DispBuf8=0,16,16,16,16,16,16,16;/display the code of DispCode uchar code DispCode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00; / the CC

9、 code & bank!uchar code DispBitCode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/ select the LCD bituchar code GetKeyCode=0xee,0xed,0xeb,0xe7, 0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7, 0x7e,0x7d,0x7b,0x77;/ input the key and get the keycodeuchar code ActionCode= 7,4,1,10, 8,5,2,0, 9,6,3,11, 15,14,13,12;

10、/ the value of the key uchar code InitKeyCode= 0xef,0xdf,0xbf,0x7f;/ put the InitKeyCode to Keysbit P1_0 =P10;ucharab = 0; / distinguish the A1(0) or B1(1) (the first key and second key)uchar signal = 11; / distinguish the +、 -、 *、 / (11,12,13,14)uchar i,j,key; / i,j for the circulation key is the v

11、alueuchar KeyPos = 0; / the position of the keyuchar DispBitCount = 0;/ turn on the bit of 8 LCD by the DispBitCountunsigned long A1 = 0, B1 = 0;unsigned long Y= 0;void Delay(uchar t) / the delay programmewhile(t-)for(j=140;j0;) j-; void Ring() / make the speaker ringchar d;for(d=10;d0;d-)P1_0=P1_0;

12、Delay(1); /* Name: Display() Display the LCD by using the interrupt of T0*/void Display(void) interrupt 1 / using the ISR 1 T0TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; / Display the LCD by using the interrupt of T0 P1_0 = 0;P2 = DispBitCode DispBitCount ;/ select the bit of lcdP0 = DispCode Di

13、spBuf DispBitCount ; /put out the display codeDispBitCount+;Delay(1);if(DispBitCount = 8) DispBitCount = 0;/* Name:KeyScan() put the value of the keyboard to key*/ void KeyScan(void)uchar sender = 0x00;uchar count1 = 0x00;ucharcount2 = 0x00; for(count1 = 0; count1 4; count1+)P3=InitKeyCodecount1;sen

14、der = P3; for(count2 = 0; count2 16; count2+)if(sender = GetKeyCodecount2) Delay(20);/ delay 10 ms if(sender = P3)/ clear up the shiver key = ActionCodecount2;if(key = 10) /if put the C (Reset) ,Initialize the ProgrammeA1=0; B1=0; Y=0; ab=0; KeyPos = 0;DispBitCount = 0;DispBuf0 = 0;P1_0 = 0;for(i =

15、1; i 8 ,display E !DispBuf7 = 14;for(i=0;i0; i-)if(DispBufi = 0)DispBufi=16;continue;else break; / Dont display the highest bit if it is 0 / End key is =if(key = 12 | key = 13 | key = 14 | key = 15 ) /if key if + - * /signal = key; ab = !ab;/ swap A1(0) & B1(1) KeyPos = 0; / End key is + - * / !if(k

16、ey = 0 | key=1 | key=2 | key=3 | key=4 | key=5 | key=6 | key=7 | key=8 | key=9) /if key is the numberif(KeyPos KeyPos;i-)DispBufi=16;for(i = KeyPos; i0; i-)DispBufi = DispBufi-1;DispBuf0 = key;KeyPos+;if(KeyPos = 8)/Make the bell ringRing();switch (ab)case 0:A1 = 10 * A1 + key; break;case 1:B1 = 10

17、* B1 + key; break;/End key is Number ! /End if (sender = P3)/End the if(sender = GetKey)/End the 16 circle/End the 4 circle /End the KeyScan()void main( )TMOD = 0x01; /MODE 1: 16 bit timer ,Make the Timer0 ON&OFF by the TRi TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;EA = 1; /Enable the interrupt

18、of the cpuET0 = 1; /turn on the Timer0TR0 = 1;/Enable the Timer0 A1=0;B1=0;Y=0;ab=0;KeyPos = 0;DispBitCount = 0;DispBuf0 = 0;while(1) KeyScan();3.5键盘设计在初始化时,先将0xEF,0xDF,0xBF,0x7F输给P3口,再读取P3口状态,保存至变量sender,然后将变量sender与保存在程序存储器ROM中预先计算好的16个键值依次进行比较判断,如果相等,表明可能该值被按下,再延迟10MS然后第二次循环再次判断P3口状态是否与变量sender中的

19、值相等,如果相等,则表明的确有代表该值的键被按下。然后根据所按下的键值分步执行分支程序。3.5 LCD动态显示如图 LCD动态显示3.5.2 LCD移位显示计算器程序设计中,难度最大的就是实现LCD的移位显示。当输入一个数字,利用一个循环和一个记录按键变量,将低位数字依次送到高位数字,最后把按键的显示码送到最低位,如此一来便实现了LCD的移位。当依次输入5,1,7时显示效果如图所示:显示数字“”显示数字“”显示数字“”3.6电路设计效果运行Proteus程序后,进入软件的主界面。通过左侧工具栏中的P(从库中选择元件命令)命令,在Pick Devices 左侧窗口中选择所需元件的关键字,然后放置

20、元件并调整方向和位置以及参数设置,最后进行连线。Proteus仿真效果载入通过编译软件编译后的hex文件进行模拟仿真,可以全速运行也可以单步调试运行。模拟加法:123+456=579如图所示:输入数字“”输入数字“”得出结果“”模拟减法:654-321=333如图所示:输入数字“”输入数字“”得出结果“”模拟乘法:123*4567561741如图所示:输入数字“”输入数字“”得出结果“”模拟除法:05如图所示:输入数字“”输入数字“”得出结果“” 设计总结设计这个课题时其实对我来说是有不小难度的,毕竟我所学习的单片机知识是非常有限的,在设计思路有了之后,就把大量的时间放在了单片机论坛和一些参考

21、书籍上。首先是硬件选择上,本来单片机我个人准备选择AT89C52,但是在论坛上的不少高手推荐我使用PIC18f452,所以在设计过程中便放弃了AT89C52。然后就是比较关键的键盘设计,开始44键盘的设计,寻找矩阵键盘资料。找到单片机课程里面的键盘扫描程序,觉得有点复杂,后来在网络上看到一个以空间换取时间的键盘扫描程序,设计思路是将预先计算好的数据保存在ROM中,然后把从键盘端口读取的状态与保存的数据对比,相等就表示这个按键被按下。但键盘扫描的源程序并没有延时和消除抖动环节,不能直接利用,但是他的程序设计思想很值得借鉴和学习。之后就是软件设计,在选择仿真软件时,我自己首选地就是伟福的仿真软件,

22、但是在安装过程中出现了问题,在我的WIN7 64位操作系统上总是出现安装错误,最后便选用了Proteus ISIS。紧接着就是设计流程图和程序设计。在程序设计时仍然遇到了问题,多次在仿真软件上运行时无效,最后不得不求助论坛里的高手,才得以成功设计出程序,让仿真软件实现设计要求。 总之在设计过程中遇到了不少问题,都是在其他书籍及论坛网友的帮助下才得以解决。 参考文献 1李泉溪主编 单片机原理与应用实例仿真 北京航空航天大学出版社2何立民编著 单片机中级教程(原理与应用).北京:北京航天大学出版社 3张迎新编著 单片微型计算机原理应用及接口技术.北京:国防工业出版社 4李光飞,楼然苗,胡佳文等.单片机课程设计实例指导. 北京:北京航空航天大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1