单片机优秀课程设计计算器.docx
《单片机优秀课程设计计算器.docx》由会员分享,可在线阅读,更多相关《单片机优秀课程设计计算器.docx(45页珍藏版)》请在咨信网上搜索。
课程设计说明书 课程设计名称: 单片机课程设计 课程设计题目: 四位数加法计算器设计 学 院 名 称: 电气信息学院 专 业 班 级: 学 生 学 号: 学 生 姓 名: 学 生 成 绩: 指 导 教 师: 课程设计时间: .10.30 至 .11.5 格式说明(打印版格式,手写版不做要求) (1)任务书三项内容用小四号宋体,1.5倍行距。 (2)目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。 (3)章标题用四号黑体加粗(居中排)。 (4)章以下标题用小四号宋体加粗(顶格排)。 (5)正文用小四号宋体,1.5倍行距;段落两端对齐,每个段落首行缩进两个字。 (6)图和表汉字字用五号宋体,图名和表名分别置于图下方和表上方,用五号宋体(居中排)。 (7)页眉中文字采取五号宋体,居中排。页眉统一为:武汉工程大学本科课程设计。 (8)页码:封面、扉页不占页码;目录采取希腊字母Ⅰ、Ⅱ、Ⅲ…排列,正文采取阿拉伯数字1、2、3…排列;页码在页脚,居中位置。 (9)标题编号应统一,如:第一章,1,1.1,……;论文中表、图和公式按章编号,如:表1.1、表1.2……;图1.2、图1.2……;公式(1.1)、公式(1.2)。 课程设计任务书 一、课程设计任务和基础要求 (一) 设计任务(从“单片机课程设计题目”汇总文档中任选1题,依据所选课题具体设计要求来填写此栏) 1. 系统经过4x4矩阵键盘输入数字及运算符。 2. 能够进行4位十进制数以内加法运算,假如计算结果超出4位十进制数,则屏幕显示E。 3. 能够进行加法以外计算(乘、除、减)。 4. 创新部分:使用LCD1602液晶显示器进行显示,有开机欢迎界面,计算数据和结果分两行显示,支持小数运算。 (二) 基础要求 1. 有硬件结构图、电路图及文字说明; 2. 有程序设计分析、思绪说明; 3. 有程序步骤框图、程序代码及注释说明; 4. 完成系统调试(硬件系统能够借助试验装置实现,也可在Proteus软件中仿真模拟); 5. 有程序运行结果截屏图片。 二、进度安排 第9周,10.30~11.5 1) 10.30 题目分析,文件查阅 2) 10.31 方案比较,确定设计方案 3) 10.31~11.1 硬件电路设计 4) 11.2~11.4 程序设计,程序调试,系统联调,系统改善 5) 11.5 课程设计说明书撰写 三、参考资料或参考文件 1. 林立,张俊亮. 单片机原理及应用——基于Proteus和Keil C [M].北京:电子工业出版社, 2. 张毅刚,彭喜元. 单片机原理和应用设计[M]. 北京:电子工业出版社, 3. 马忠梅. 单片机C语言应用程序设计(第5版) [M].北京:北京航空航天大学出版社, 4. 楼然苗、李光飞. 51系列单片机设计实例[M]. 北京:北京航空航天大学出版社, 本科生课程设计成绩评定表 姓名 专业班级 学号 课程设计题目: 课程设计答辩统计:(手写) 成绩评定依据: 项目 得分 百分比 考勤统计 设计结果 汇报撰写 答辩成绩 备注: 成绩评定依据项目内容和项目分值百分比能够由老师按指导专业进行调整,但成绩评定依据项目数不得少于3项。 最终评定成绩: 指导老师署名: 年 月 日 目 录 第一章 设计论证 1 1.1 设计分析 1 1.2 设计方案 1 第二章 硬件设计 2 2.1 硬件结构与工作原理 2 2.2 单元电路设计 2 第三章 软件设计 7 3.1 系统软件结构 7 3.2 主要功能子程序设计 9 第四章 系统调试与分析 14 4.1 调试过程与结果 14 4.2 结果分析 16 第五章 设计小结 17 附录 18 第一章 设计论证 1.1 设计分析 在方案设计过程中,我列出了两种不一样设计方案,分别对应于显示模块和单片机内部运算。显示模块在我设计中有两种不一样显示方法,分别为数码管显示和液晶屏显示。 对于数码管显示来说,优点是使用简单,反应速度愈加快,因为LCD有众多接口,和指令,所以在软件上要比数码管复杂。数码管显示缺点也比较显著,就是需要占用过多单片机输出接口,同时,LCD显示功效更多,也更直观,对于现实生活中使用也愈加舒适。 在综合了以上几点考虑后,我最终选择了LCD1602液晶显示芯片作为显示模块。 在单片机内部运算方面,我设想也有两种,即支持浮点数运算或只支持整数运算,若只支持整数运算,程序设计势必愈加简单易懂,不过出于实用性考虑,我最终决定了使计算器支持浮点数运算功效。同时,这也能愈加好地锻炼我编程思维能力。 1.2 设计方案 根据系统设计功效要求,初步确定设计系统由主控模块、显示模块、键盘扫描接口电路共四个模块组成。主控芯片使用8051系列AT89C52单片机,其中带有非易失性Flash程序存放器,它是一个高性能、低功耗8位CMOS微处理芯片,市场应用最多。 显示模块采取LCD1602液晶显示器为主体组成。 键盘电路采取4x4矩阵键盘电路。 整个单片机接口电路:P0用于显示输出或LCD1602信号输入,P1口用于键盘扫描输入,P2口用于LCD1602控制信号输出。 为了驱动系统各个模块正常协调工作,在软件方面我设计了四大模块,分别为显示、键盘、运算、综合模块,经过综合模块协调来使其它三大模块正常运行,使计算器能正确运算得出正确结果。 第二章 硬件设计 2.1 硬件结构和工作原理 AT89C52 显示模块(LCD1602) 键盘扫描输入模块(4*4矩阵键盘) 图2.1 硬件结构框图 系统主体部分由输入、运算、输出模块所组成,对应于图2.1中有,输入模块为键盘扫描输入,输出模块为LCD1602显示,运算模块为单片机。在系统上电后,单片机初始化,开始运行内部程序,在程序运行过程中,经过软件功效来实现按下键盘上特定按键后,实施不一样功效,比如加减乘除,并将数据输出至显示模块(LCD1602)显示。在运算过程中显示运算数据及符号,运算完成后显示运算结果。 2.2 单元电路设计 2.2.1 单片机最小系统 单片机最小系统就是支持主芯片正常工作最小电路部分,包含主控芯片、复位电路和晶振电路。 主控芯片选择AT89C52芯片,因其含有良好性能及稳定性,价格廉价应用方便。 晶振选择11.0592MHz,晶振旁电容选择20pF。 采取按键复位电路,电阻分别选择100Ω和10K,电容选择10μF。 以下为单片机最小系统硬件电路原理图(图2.2),仿真接线图(图2.3)。 图2.2 单片机最小系统硬件电路原理图 图2.3 单片机最小系统仿真接线图 2.2.2 键盘接口电路 计算器所需按键有: 数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’ 。 功效键:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C( 清零、小数点)’累计16个按键,采取4*4矩阵键盘,键盘行和列之间全部有公共端相连,四行和四列8个公共端分别接P1.0~P1.7,这么扫描P1口就能够完成对矩阵键盘扫描,经过对16个按键进行编码,从而得到键盘口地址,对比P1口扫描结果和各按键地址,我们就能够得到是哪个键按下,从而完成键盘功效。 在Proteus仿真中,我直接使用元件库全部KEYPAD-SMALLCALC键盘,这种键盘直接实现了4*4键盘功效,方便使用。以下图2.4所表示。 在按下其中一个键时,其对应行和列将全部会变成低电平,此时,即可经过判定P1口值来确定输入是哪一个按键,然后将所取得按键经过软件来进行接下来处理、运算等工作。 图2.4 4*4矩阵键盘 2.2.3 LCD1602显示电路 LCD1602介绍: 图2.5所表示,1602液晶也叫1602字符型液晶,它是一个专门用来显示字母、数字、符号等点阵型液晶模块。它由若干个5X7或5X11等点阵字符位组成,每个点阵字符位全部能够显示一个字符,每位之间有一个点距间隔,每行之间也有间隔,起到了字符间距和行间距作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示内容为16X2,即能够显示两行,每行16个字符液晶模块(显示字符和数字)。 1602采取标准16脚接口,其中: 第1引脚:GND为电源地 第2引脚:VCC接5V电源正极 第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时能够经过一个10K电位器调整对比度)。 第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时实施指令。 第7~14引脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。 特征 3.3V或5V工作电压,对比度可调 内含复位电路 提供多种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多个功效 有80字节显示数据存放器DDRAM 内建有192个5X7点阵字型字符发生器CGROM 8个可由用户自定义5X7字符发生器CGRAM 特征应用 微功耗、体积小、显示内容丰富、超薄轻巧,常见在袖珍式仪表和低功耗应用系统中。 操作控制 注:相关E=H脉冲——开始时初始化E为0,然后置E为1。 图2.5 LCD1602硬件原理图 采取LCD1602显示器对计算过程、结果和提醒信息进行显示,在仿真电路中,因为Proteus中并没有LCD1602显示芯片,故采取功效相同LM016L进行替换,其中LM016LD0~D7三个输入输出端口接至单片机P0.0~P0.7口,用来对显示器输出显示、输出控制指令和获取状态信息。 单片机P2.5~P2.7分别和LM016LRS、RW、E端口相连,用来对显示芯片进行控制。以下为LCD显示电路仿真接线图(图2.6)。 图2.6 LCD1602(LM016L)仿真接线图 第三章 软件设计 3.1 系统软件结构 图3.1所表示,计算结果并显示 开始 初始化参数LCD显示 有键输入? 读取按键 处理 显示 显示操作符,标识操作数1结束 等候按键 显示小数点 是否操作符? 是否数字? 是否第一次按下?ON/C键 是否为=号?/ 系统开启后,实施LCD初始化程序,然后调用LCD显示程序,在屏幕上输出欢迎信息。接下来调用键盘扫描处理程序,等候按键按下,按下任意键后实施LCD清屏程序,并再次调用键盘扫描处理程序,等候用户输入数据,若用户按下数字键(0~9),则在显示器上显示而且将输入数据保留至数据存放区。 Y 图3.1 程序步骤图 此次设计采取模块化设计思想,包含主程序和初始化子程序、延时子程序、输出数据子程序、检测是否有按键按下子程序、确定按键子程序、清第一行屏和显示“Welcome”子程序、换算第一个数子程序、运算子程序、显示结果子程序等子程序。运行程序后,首先调用子程序清屏第一行并显示“Welcome”,清屏第二行并显示“ZCY’s Caculator!”,然后检测是否有按键按下,假如没有,继续检测,假如按下,则判定是否是加减乘除键被按下,假如是加减乘除被按下,则显示对应字符并换算出字符前输入数据和字符后输入数字,然后检测是否有等号按下,假如有则完成对应运算并显示对应结果,然后检测是否有清屏键按下,假如有则清屏,对应步骤图图3.1所表示。 对于数字键程序段进行对应设计,假如运算键(+、-,*,/)对应标志不为一,则将输入数字送入第一个操作数缓存区,而且清空全部响应位。不然送入第二个操作数缓存区。其次对功效键程序段进行对应设计。 假如功效键(+、-,*,/)第一次被按下,则置对应标志位为一,而且将运算键响应标志位置一,清空第二个操作数缓存区,为输入操作数做准备,假如是第二次按下则先调用运算操作子程序,实施上次按下运算键运算,置对应标志位为一,而且将运算键响应标志位置一,清空第二个操作数缓存区,为输入操作数做准备。 程序上具体实现: 在单片机上电后,实施两个函数LCD_dsp_string(4,0,"Welcome!")和LCD_dsp_string(1,1,"ZCY's Caculator")输出欢迎信息初始化LCD。然后实施keyscan()函数判定是否有按键输入,若有则读取按键,不然循环扫描,直到有按键按下。在获取按键后,判定按键是否为数字,若是,则实施cacul(a)函数,将获取数字保留为数,然后实施LCD单个字符显示函数LCD_dsp_char(x,y,dat)。若按键不是数字,则判定是否为操作符,若是,则实施LCD_dsp_char(x,y,dat)显示操作符,然后将flag标志位置1,代表第一个操作数输入结束。若不是操作符,则判定是否为‘=’,若是,则实施函数Caculator(x,y)函数,计算结果,然后实施LCD_dsp_string(x,y,string)函数,将计算结果显示在屏幕上,然后实施keyscan()函数,等候按下任意键,按下任意键后,再次实施LCD初始化程序。若不是‘=’,则判定是否是第一次按下清零键,若是,则显示小数点,并再次调用keyscan()函数,获取下一个按键,若不是第一次按下,则再次实施LCD初始化程序。 3.2 关键功效子程序设计 开始 3.2.1 LCD显示子程序 输入待显示信息 设置LCD显示位置 输出字符串 LCD是否忙碌? 是否为单个字符 输出单个字符 Y N Y N 返回 图3.2 LCD显示子程序步骤图 图3.2所表示,当主程序调用了LCD显示程序后,首先判定LCD是否处于忙碌状态,若是,则等候,若不是,则开始设置显示位置,然后判定显示是单个字符还是字符串,分别实现对单个字符输出和对字符串输出。之所以对单字符和字符串设置不一样显示函数,是为了实现程序对单片机资源最优利用,因为单字符只占据一个字节存放区,而字符串则最少占用两个字节。在显示完成后,返回主程序,继续实施下一步。 LCD显示程序中关键部份为LCD显示位置设置和LCD显示数据输出。为此,我编写了LCD显示位置设置函数,和LCD显示函数,以下。 LCD显示位置设置函数: void LCD_set_xy( unsigned char x, unsigned char y )//设置LCD显示位置 { unsigned char address; if (y == 0) //y=0为第一行 address = 0x80 + x; //x=0为一行第一个 else //第二行 address =0xc0+ x; write_com(address); //设置数据指针位置,调用LCD写命令函数 } LCD显示函数: void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat) //单个字符显示函数 { LCD_set_xy( x, y ); //调用LCD显示位置设置函数,设置显示位置 write_data(dat); //写入待显示数据,调用LCD写数据函数 } void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s) //字符串显示函数 { LCD_set_xy( X, Y ); //调用LCD显示位置设置函数 while (*s) //当字符串未抵达结尾('\0')时,循环输出单个字符 { write_data(*s); s ++; //指向下一个字符 } } 3.2.2 键盘扫描处理子程序 扫描P1口 返回按键值 是否检测到按键? 开始 N Y 图3.3 键盘扫描处理子程序步骤图 图3.3所表示,当调用了键盘扫描处理子程序后,首先,为P1口赋值,然后等候,判定P1口值是否改变,若改变,依据改变后值,来判定按下键值为多少;若P1口值未发生改变,则循环扫描P1口值,直到有按键按下造成P1口值发生改变。在扫描到按键值后,将按键值保留在全局变量n中,方便其它函数使用、处理该值。 在我编写程序中,例以下列程序段,我定义了一个临时变量temp来比较该值和给定值,来判定是否有键按下从而造成P1口值发生改变。 void key_scan(void) //键盘扫描处理子程序 { unsigned char temp; //定义临时变量temp保留P1值 P1=0xfe; //为P1赋值,选中第一行 if(P1!=0xfe) //P1发生改变 { delay(200); //延时200us if(P1!=0xfe) //再次判定(消抖) { temp=P1&0xf0; //判定是哪一列 switch(temp) { case 0xe0:n='c';break;//第一列 case 0xd0:n='0';break;//第二列 case 0xb0:n='=';break;//第三列 case 0x70:n='+';break;//第四列 } } while(P1!=0xfe); //等候,直到按键松掉 } …… } 3.2.3 运算子程序 接收操作数a,b,fh a=a+b fh=’+’? Y a=a-b fh=’-’? fh=’*’? a=a*b a=a/b fh=’/’? a>9999? 输犯错误提醒信息 输出计算结果 返回 图3.4 运算子程序步骤图 图3.4所表示,在取得操作数一、操作数二、运算符后,判定操作符性质,然后依据操作符来进行加减乘除计算,将计算结果保留在a中,并判定计算结果值是否超出四位数,若超出,则在屏幕上输犯错误提醒信息,不然在屏幕上输出正确结果。a中值能够直接作为下次计算第一个操作数,即下次输入是运算符加减乘除话,以后输入就是第二个操作数,不然,需要清零再输入两个数进行下轮计算。 在我程序中,我设置了较多标志位,比如fuhao为负号标志,xsd为小数点标志,dh为等号标志,flag为操作数标志。以下是我计算子程序节选。 switch(fuhao) //判定操作符是哪个 { case '+': a=a+b; break; //加 case '-': a=a-b; break; //减 case '*': a=a*b; break; //乘 case '/': a=a/b; break; //除 } //计算 if(a>9999) //判定结果是否超出四位数 { sprintf(temp,"%s","Error"); LCD_dsp_string(0,1,temp); //若结果超出四位数则输犯错误信息 n=17; do { key_scan(); }while(n==17); //等候按键 write_com(0x01); //清屏 a=b=0; //操作数清零 fuhao=0; //操作符清空 flag=0; //第一个操作数 i=0; j=0; dh=0; //等号清空 xsd=0; //小数点清空 fh=0; //将各个标志位恢复初始化 } …… } 第四章 系统调试和分析 4.1 调试过程和结果 此次课程设计中,我使用了Proteus作为硬件仿真软件,Keil作为软件编写编译软件,经过二者协调,来实现仿真模拟。 在Keil中编写并编译好程序后,导入到Proteus中,然后开启仿真,使单片机运行,LCD上显示出提醒信息,图4.1所表示。按下任意键后LCD清屏,图4.2所表示。 图4.1 欢迎界面 图4.2 清屏 在第一次计算中,我输入了9999+1运算式,根据正常要求,输出结果应为‘E’,然而,我输出却是一个错误计算结果,图4.3所表示,经过检验后,我发觉了程序中错误,是操作数定义出现了问题,我定义操作数是无符号字符型,所以造成在计算过程中发生了溢出,最终生成了错误计算结果。然后我修改了程序,将操作数定义改为了单精度浮点型,然后再次运行。 图4.3 错误输出 图4.4 正确输出警告信息 进行第二次运算。 在这次运算中,我再次输入了上次运算式,结果不负所望,输出为‘E’,图4.4所表示。经过修改,结果已经正确。最终,我猜测,在我改善程序之前,因为操作数数据类型弄错了,所以可能造成其它运算结果可能也是错误。 进行第三次运算。 输入第一个操作数,我输入是1.25,图4.5所表示,同时,在我设计中,将清零键和小数点键设置成了同一个键,以满足4*4键盘要求。在同一个操作数中按下两次ON/C键话,会使屏幕清屏,数据清零,图4.2所表示。 然后输入操作符,我输入是乘号,图4.5所表示。 然后输入第二个操作数,我输入是352.7,图4.5所表示,输入等号后,在LCD第二行输出了计算结果,经过验算,发觉结果正确。 图4.5 正确运行结果 图4.6 4*4键盘 图4.7 上拉电阻 图4.6所表示,矩阵键盘8个端口接至P1口,在按下按键后,按键对应行列端口均变为低电平,由此即可判定出按下是哪个按键。 图4.7所表示,为上拉电阻,在51单片机中,P0口开漏端口,所以需要外接上拉电阻来接负载,这么才能正常进行输入输出高低电平改变。 4.2 结果分析 在输入计算表示式后,系统成功得出了正确计算结果,而且因为溢出判定存在,确保了计算结果不会超出四位数,满足了设计要求。 第五章 设计小结 课程设计是培养学生综合利用所学知识,发觉、提出、分析和处理实际问题,锻炼实践能力关键步骤,是对学生实际工作能力具体训练和考察过程。伴随科学技术发展日新日异,单片机已经成为当今计算机应用中空前活跃领域, 在生活中能够说得是无处不在。所以作为电子信息工程专业学生来说掌握单片机开发技术是十分关键。 我题目是4位加法计算器,对于我们这些实践中新手来说,这是一次考验。怎么才能找到课堂所学和实际应用最好结合点?怎样让自己业余更靠近专业?怎样让自己计划更含有序性,而不会忙无一用?这全部是我们所要考虑和努力。经过查找资料,编写程序,加深了对单片机了解和认识。 经过此次试验设计学习,又一次深刻感受到了51单片机即使已经过去几十年,现在也不停地收到16位、32位低价单片机冲击,但仍然是一款性能优越单片机,在处理生活中常见简单任务时,51单片机仍然能够焕发出青春般光彩。同时,51单片机也是学习和了解其它高级单片机最好入门平台,此次试验也将增强了我对学习好其它高级单片机决心和信心。 此次试验,让我收获很多,感谢同学帮助,不仅加深了知识方面,愈加锻炼了动手能力,相信以后碰到这方面问题不再见不知所措,让我把知识和实践结合到一起,经过这次实践,我了解自己不足,C语言掌握不够,使我愈加了解以后该在哪个方面补充自己不足,总体来说此次课程设计是成功,使我了解到更多书本上没有知识,最终再次感谢全部帮助过我老师和同学们。 附录 1. 计算器.c #include<reg51.h> #include<stdio.h> #include<stdlib.h> unsigned char n; float idata a,b; //操作数1,操作数2 extern void key_scan(void); //键盘扫描 extern void init(); //LCD初始化 extern void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);//字符串显示 extern void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat); //字符显示 extern void write_com(unsigned char com); void main() { char idata temp[16]; //临时存放区 char i=0,j=0,fuhao; //i,j分别为temp和LCD数据指针 bit flag=0,dh=0,fh=0,xsd=0; //flag=0:操作数1,flag=1:操作数2;dh=1时表示已输入等号;fh负号;xsd小数点 init(); //小数点 LCD_dsp_string(4,0,"Welcome!"); LCD_dsp_string(1,1,"ZCY's Caculator");//输出欢迎信息 do { key_scan(); } while(n==17); //等候按键 write_com(0x01); //清屏 while(1) { key_scan(); //等候按键 if((dh==1)&(flag==1)&(n!=17)) //一次计算完成后实施 { write_com(0x01); //清屏 LCD_dsp_string(0,0,temp); //输出上次计算结果 j=0; i=0; flag=0; fh=0; while(temp[i++]!='\0') j++; //将temp数据指针移向后一个空位,将LCD显示指针移向下一个空位 } if((i==0)&(n=='-')&(fh==0)) //假如输入第一个数是负数则实施 { fh=1; //表示有负号 temp[0]='-'; //保留负号 i++; LCD_dsp_char(j++,0,n); //输出减号 if(flag==0) continue; } if(((n>='0')&(n<='9')|((n=='c')&(xsd==0)))&(dh==0)) { if(n=='c') { n='.'; xsd=1; //预防再次按下c后继续出现小数点 } temp[i++]=n; //保留输入数字 LCD_dsp_char(j++,0,n); //显示并将光标移至下一位(光标未显示) } if(((n=='+')|(n=='-')|(n=='*')|(n=='/'))&((flag==0)|(dh==1))) //输入完第一个操作数以后或完成一次计算以后按下运算符按键时实施 { flag=1; //以后输入操作数是第二个操作数 fuhao=n; temp[i]='\0'; //表示为字符串 a=atof(temp); //转换为数据 i=0; dh=0; xsd=0; //以后第二个操作数中能够添加一个小数点 switch(n) { case '+': LCD_dsp_char(j++,0,n); break; case '-': LCD_dsp_char(j++,0,n); fh=0; break; case '*': LCD_dsp_char(j++,0,n); break; case '/': LCD_dsp_char(j++,0,n); break; } //显示运算符 } if((n=='=')&(flag==1)) //已输入完第二个操作数并按下等号 { dh=1; temp[i]='\0'; b=atof(temp); i=0; xsd=0; LCD_dsp_char(j,0,'='); //显示等号 switch(fuhao) { case '+': a=a+b; break; case '-': a=a-b; break; case '*': a=a*b; break; case '/': a=a/b; break; } //计算 if(a>9999) { sprintf(temp,"%s","Error"); //若计算结果超出四位数则输犯错误信息 LCD_dsp_string(0,1,temp); n=17; do { key_scan(); }while(n==17); //等候按键 write_com(0x01); //清屏 a=b=0; fuhao=0; flag=0; i=0; j=0; dh=0; xsd=0; fh=0; //恢复初始化 } else { sprintf(temp,"%g",a); //输出计算结果 LCD_dsp_string(0,1,temp); } } if(n=='c') //按下清除键 { write_com(0x01); //清屏 a=b=0; fuhao=0; flag=0; i=0; j=0; dh=0; xsd=0; fh=0; //恢复初始化 } } } 2. LCD1602.c #include<reg51.h> sbit lcden=P2^7; //读写控制输入端 sbit rw=P2^6; //读写控制端 sbit rs=P2^5; //指令、数据选择端 sbit busy=P0^7; //LCD内部忙标志 void delay(unsigned int m) //延时函数 { unsigned int n; for(n=0;n<=m;n++); } void check() //判定LCD是否忙碌 { do { P0=0xf- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 优秀 课程设计 计算器
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文