您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机课设--电子计算器
湖南大学电气与信息工程学院本科生课程设计题目:电子计算器课程:单片机课程设计专业:自动化班级:学号:姓名:同组成员:无指导老师:设计时间:2014年4月------2014年6月目录1任务及设计要求…………………………………………………31.1任务………………………………………………………31.2要求………………………………………………………32系统原理框图……………………………………………………33硬件原理图………………………………………………………43.1ADUC848学习板……………………………………………43.2各模块原理图及其作用……………………………………63.3芯片………………………………………………………63.4电源……………………………………………………63.5键盘………………………………………………………63.6LCD1602…………………………………………………74程序和流程图……………………………………………………75使用说明………………………………………………………276心得体会………………………………………………………287参考文献………………………………………………………28一、任务及设计要求1、任务设计一个四则运算的电子计算器,采用LED或LCD显示。2、要求1)利用小键盘作为数据和命令的输入装置2)利用LED或LCD作为过程和结果的输出装置3)可实现基本的数据运算,包括:加、减、乘、除、开方等4)未工作时显示北京时间,可调整5)当数据超出范围,可声音提示或报警6)可通过按键控制,随机模拟滚动显示乘法口诀表二、系统原理框图通过单片机的计算、控制功能和lcd1602的显示功能,行列键盘的输入功能,可以实现一个计算器的基本功能如加、减、乘、除、乘方,开方,三角函数的功能,但由于AduC848单片机位数的限制和内存的不足,限制了显示的位数和计算功能。本计算器只能在0到32768的计数范围内正确的处理和显示得数,因为采用按键复用的设计,克服了键盘上按键不够的难题。由于内存不足和函数调用不精确等原因,在本计算器内并没有使用keil自带的math头文件来获取乘方开方的函数,而是自己编写了一个整数的乘方开方函数,在适用范围内有可以得到正确得数。同时,设计了一个简易的时间显示。在计算器进行计算的同时,时钟程序也在运行,不会因计算的过程对时间的参数造成影响。ADUC848独立键盘电源LCD1602液晶显示三、硬件原理图ADUC848学习板1、两路16位ADC输入、可作差分输入;2、12位DAC输出;3、运放LM358;4、RS232串口;5、步进电机(5V、70欧、6线4相)接口;6、PS/2接口;7、插针11,用于选择PS/2或者红外接收头;8、红外接收头;9、线性稳压芯片7805;10、复位按键和下载按键;11、开关以及功能选择插针1~10(从左至右)12、4X4矩阵式键盘,左边4个可以作独立按键;13、直流电源输入;14、USB电源输入接口;15、IIC接口;16、RTCDS1307;17、EEPROMAT24C08;18、8位数码管;19、SPI接口;20、上排图形点阵LCD12864的接口、下排LCD1602的接口;21、红外二极管;22、8路LED;23、蜂鸣器;24、P3口扩展接口;25、单片机AduC848;26、P2口扩展接口;27、P0口扩展接口.学习板原理图:各模块原理图及作用:单片机引脚分布Pin1~4:(P1.0~P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。若P2、P3、P0口要作为输入,则应往相应引脚写1。Pin5、6:AVDD、AGND,模拟电源输入。Pin7、8:外部参考电压接入,Pin7接AGND。片内DAC有2.5V内部参考,ADC有1.25V内部参考。Pin9、10:(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。Pin11、12:(P1.6、P1.7)各200uA激励电流源,可配合RTD等做应用。Pin13:两路AD输入做普通输入时的电压参考端,AD输入电压不能低于此引脚电压。Pin14:片内DAC输出。Pin15:复位引脚。Pin16、17:单片机RS232接口的RXD(P3.0)TXD(P3.1)。Pin18:(P3.2)外部中断0,用于红外接收和PS/2接口。Pin19:(P3.3)LCD1602,LCD12864A的EN引脚,控制第一位数码管。Pin20、21:DVDD、DGND数字电源输入。Pin22:(P3.4)PS/2接口的data信号。Pin23:(P3.5)LCD1602和LCD12864A的RW。Pin24:(P3.6)LCD1602和LCD12864A的RS。Pin25:LCD12864A的CS1。Pin26:IIC接口时钟信号。Pin27:IIC接口data信号。Pin28:(P2.0)SPI接口时钟信号。Pin29:(P2.1)SPI接口MOSI信号、控制第6位数码管的位码。Pin30:(P2.2)SPI接口MISO信号、控制第7位数码管的位码。Pin31:(P2.3)SPI接口SS信号、控制第8位数码管的位码;P2.0~3也作为4X4矩阵式键盘的扫描输出信号、步进电机的控制信号、数码管第数码管第6、7、8位位码。但是SPI、4X4矩阵式键盘、步进电机、数码管第6、7、8位功能不能同时实现。Pin32、Pin33:接外部32.768KHz晶振。Pin34、Pin35:DVDD、DGND。Pin36:(P2.4)LCD12864A的CS2。Pin37:(P2.5)内部PWM模块输出,控制红外LED。Pin38:(P2.6)内部PWM模块输出,控制蜂鸣器。Pin39:(P2.7)内部PWM模块的外部时钟输入(也可以用内部时钟)。Pin40:EA,低电平有效,正常使用时拉低。Pin41:PSEN,在此引脚电平为低时按复位键进入debug模式,可以下载和调试程序。Pin42:ALE。Pin47、Pin48:DGND、DVDD。Pin43、44、45、46、49、50、51、52:P0口、LCD1602和LCD12864的数据总线,数码管的段码。电源模块本学习板共有如下3种供电方式:(1)5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽)。将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第1、2脚(插针1下面两脚)接跳线帽,DVDD直接连接到电源适配器输入端,即为5V电源适配器供电模式。(2)7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽)将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第2、3脚(插针1上面两脚)接跳线帽,DVDD连接到稳压芯片7805的输出,而7805的输入端连接到电源适配器输入端,即为7~12V的电源适配器经7805给学习板供电的模式。(3)USB供电(开关往下拨)。将开关sw4第1、2脚接通(开关往下拨),电源网络DVDD连接到USB电源输入端。对DVDD网络和AVDD网络设了测试点,方便调试。独立键盘,用来实现数据和指令的输入。由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可。引脚复用:P2.0~P2.3为4X4矩阵式键盘列扫描信号,又复用作步进电机控制信号,SPI信号、P2.1~P2.3还复用为数码管第5、6、7位位码控制信号。参与复用的一项功能使用时,其他参与复用的功能则不能使用。插针配置:(1)插针10上面两脚接跳线帽,4X4矩阵式键盘输入,行扫描信号为P1.0~P1.3,列扫描信号为P2.0~2.3。(2)插针10下面两脚接跳线帽,独立按键输入,该模式有4个独立按键可用,按键扫描所用端口为P1.0~P1.3。这4个按键为4X4矩阵键盘的左边4个按键。lcd1602液晶显示屏,用来显示时间和计算数据。关键网络名和引脚名解释:(1)DISCTRL0~4:显示控制信号。(2)D0~D7、DB0~DB7:数据总线。(3)E:LCD使能信号。(4)RS:数据、指令选择信号。(5)RW:读、写选择信号。四、程序和流程图1、流程图NYNYNYNYY初始化时间显示扫描键盘计算按键?扫描键盘按键?清除数字功能等号时间按键数据过大Lc显示报警扫描键盘按键?运算方式加减乘除2、程序清单1、主函数部分#includeaduc848.h#includeKeyprocess.h#includeLCD1602.h#includemath.h#includestdio.h#includestdlib.h#includezhfuc.h#includeTime.h#includesin.h#includecos.h#includeBuzzer.h#defineucharunsignedchardoublexdataFirst,End1,End2;//定义全局变量voiddelay(intn)//延时程序{inti,j;for(i=0;in;i++){for(j=0;j25;j++);}}doubleadd(doublex,doubley)//加法程序{doublez;z=x+y;return(z);}doublesub(doublex,doubley)//减法程序{doublez;z=x-y;return(z);}doublemul(doublex,doubley)//乘法程序{doublez;z=x*y;return(z);}doublediv(doublex,doubley)//除法程序{doublez;z=x/y;return(z);}doublepower(doublex,inty)//乘方程序{doublez;inti;z=1;for(i=1;i=y;i++)z=z*x;return(z);}doubletan(doublex)//tan(x)程序{doublez;z=sin(x)/cos(x);return(z);}//***—————————主程序——————————***//voidmain(void){intn,k,h,g,t=0,ans=0;longintcnt=0;unsignedchartime[7]={00,00,12,1,1,6,14};unsignedcharf,m,key=0x80;unsignedcharfp[16];I2CCON=0xE8;n=0;f=0;m=0;k=-1;h=0;/*h有小数,m功能键,g小数转换,k按键次数,n判断前后数,f算法,t时间计算切换*/First=0;g=1;LCDInitialize();//LCD初始化SetTime(time);SwitchRTC(1);while(1)//不断查询是否有按键动作{cnt++;key=GetKey();//获取返回键值if(cnt==80000&&key==0x55){cnt=0;t=0;}if(t==0)/*时间状态*/key=100;switch(key){case1:cnt=0;if(m==0){if(h==0){First=First*10+key;k++;}else{First=First+(double)key/(g*10);g=g*10;k++;}LCDPrintString(k,1,1);LCDPrintString(0,2,);}else{f=1;First=0;m=0;n=1;k++;if(ans==1){LCDPrintString(k,1,ans);k=k+3;}LCDPrintString(k,1,+);LCDPrintString(k+1,1,);LCDPrintString(0,2,);}break;case2:cnt=0;if(m==0){if(h==0)
本文标题:单片机课设--电子计算器
链接地址:https://www.777doc.com/doc-5473380 .html