收藏 分享(赏)

信息工程学院.doc

上传人:dzzj200808 文档编号:3204590 上传时间:2018-10-07 格式:DOC 页数:29 大小:627KB
下载 相关 举报
信息工程学院.doc_第1页
第1页 / 共29页
信息工程学院.doc_第2页
第2页 / 共29页
信息工程学院.doc_第3页
第3页 / 共29页
信息工程学院.doc_第4页
第4页 / 共29页
信息工程学院.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、信息工程学院课程设计(论文)1信 息 工 程 学 院课 程 设 计 报 告 书题目: 电话键盘及拨号的模拟 专 业: 电子信息技术与科学 班 级: 学 号: 学生姓名: 指导教师: 高林 2013 年 5 月 1信息工程学院课程设计(论文)2日 信息工程学院课程设计(论文)3信息工程学院课程设计任务书学 号 学生姓名 专业(班级) 0310412设计题目 电话键盘及拨号的模拟和计算器设计技术参数AT89C52,40 个引脚,32 个外部双向输入输出端口,2 个外中断口,3 个 16 位可编程定时计数器,2 个全双工串行通信口,2 个读写口线Lm016l 液晶显示屏,显示容量为 16*2 个字符

2、,最佳工作电压为 5.0V,工作电流:2.0mA,显示字符尺寸:2.95*4.35(W*H)mm.设计要求设计一个模拟电话拨号的显示装置,即把电话键盘中拨出的某一电话号码,显示在 LCD 显示屏上。电话键盘共有 12 个键,除了 09 的 10 个数字键外,还有“-”键用于实现删除功能,即删除一位最后输入的号码;“#”键用于清除显示屏上所有的数字显示。还要求每按下一个键要发出声响,以表示按下该键。以及能进行简单的加减乘除四则运算,当进行除法运算时,能自动清除小数部分,并在 LED 屏上显示,还要求每按下一个键要发出声响,以表示按下该键。工作量本课程设计共 26 页注:可填写课程设计报告的字数要

3、求或要完成的图纸数量。工作计划1,拟定电路的组成框图,实现电路的基本功能,后附加转换功能。2,设计电路,写出代码,并用 PROTUS 软件仿真;3,测试功能;4,写出设计报告。设计报告要求:写出详细地设计过程(含逻辑电路图,调试步骤、测试结果及心得体会) 。其中目录要求生成.参考资料1 冯育长主编.单片机系统设计与实例分析.西安:西安电子科技大学社,20072 谢维成,杨加国主编.单片机原理与应用及 C51 程序设计.北京:清华大学出版社,2006. 3 王思明,张金敏主编.单片机原理及应用.兰州大学出版社,2001 年 4 宋晖,余张国主编。单片机原理与应用。电子科技大学出版社,2008 年

4、指导教师签字 教研室主任签字2013 年 5 月 1信息工程学院课程设计(论文)4日 学生姓名: 学号: 专业(班级): 0310412 课程设计题目: 电话键盘及拨号的模拟和计算器 指导教师评语:成绩: 指导教师: 年 月 日信息工程学院课程设计(论文)5摘要单片机是一门技术性,应用应很强的学科,而课程设计给大家一个很好的实践机会。实验“电话键盘及模拟拨号和计算器”是以单片机为控制核心,使用程序设计,矩阵控制,最后通过显示屏显示,包括输入,删除,清屏等功能,实现简单的手机拨打功能,还可以通过功能转换键,将其装换成计算器,可进行简单的加,减,乘,除四则运算,在进行除法运算时,可以自动清除小数点

5、后面的数。关键字:单片机,显示屏,拨号,四则运算SCM is a technical and application should be very strong discipline ,and give you a very good curriculum desingn practice. Experiment ”phone keyboard and analong dial and calculator” is based on AT89C52 single chip microcomputer as control core.using C programming ,3*4 matrix

6、 control.fannlly through the LED screen disply. including input ,delete,sceen clearing,and other functions,to achieve a simple phone call function ,can although the function butter .AT89C52 MCU, LED disply, dial-up,and arithmetic信息工程学院课程设计(论文)6目录1 任务提出与方案论证 .61.AT89C52 单片机 61.2 3*4 矩阵键盘 71.31602 字符液

7、晶 7特性 8编辑本段指令集 92 总体设计 .102.1 功能要求 102.2 设计步骤及要求 102.3 主要器件 102.4 系统框 102.5 参考资料 113 详细设计 .113.1 键盘系统 113.4 功能转换电路 133.5 总体电路 133.5 系统流程图 153.6 程序设计 154 总结 .25信息工程学院课程设计(论文)71 任务提出与方案论证模拟电话拨号的显示装置,即把电话键盘中拨出的某一电话号码,显示在 LCD 显示屏上。电话键盘共有 12 个键,除了 09 的 10 个数字键外,还有“-”键用于实现删除功能,即删除一位最后输入的号码;“#”键用于清除显示屏上所有的

8、数字显示。还要求每按下一个键要发出声响,以表示按下该键。以及能进行简单的加减乘除四则运算,当进行除法运算时,能自动清除小数部分,并在LED 屏上显示,还要求每按下一个键要发出声响,以表示按下该键。以单片机为控制核心,使用程序设计,矩阵控制,最后通过显示屏显示,LED 采用 lm0161.可以采用数字电路来实现 ,也可以采用单片机来完成。方案一 采用数字电路来实现,所设计的电路相当复杂。大概需要十几片数字集成块,其功能主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。方案二 采用单片机来实现,由于其功能的实现主要通过软件编程来完成。不仅降低了硬件电路的复杂性,而且成本

9、也降低不少。 最终方案 采用单片机的方式来实现定。1.AT89C52 单片机P0 口 P0 口是一组 8 位漏极开路型双向 I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的 方式驱动 8 个 TTL 逻辑门电路,对端口 P0 写“1”时,可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低 8位)和数据总线复用,在访问期间激活内部上拉电阻。 在 Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1 口 P1 是一个带内部上拉电阻的 8 位双向 I/O 口, P1 的输出缓冲级可驱动(吸收

10、或输出电流)4 个 TTL 逻辑 门电路。对端口写“1” ,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。 与 AT89C51 不同之处是,P1.0 和 P1.1 还可分别作为定时/计数器 2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX) ,2ICD1602lash 编程和程序校验期间,P1 接收低 8 位地址。 P2 口 P2 是一个带有内部上拉电阻的 8 位双向 I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对端口 P2 写“1” ,通过内部的

11、上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一电流在访问外部程序存储器或 16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器(如执行 MOVX RI 指令)时,P2 口输出 P2 锁存器的内容。 Flash 编程或校验时,P2亦接收高位地址和一些控制信号。信息工程学院课程设计(论文)8在访问外部程序存储器或 16 位地址的外部数据存储器(例如执行 MOVX DPTR 指令)时,P2 口送出高 8 位地址数据。在访问 8 位地址的外部数据存储器(如

12、执行 MOVX RI 指令)时,P2 口输出 P2 锁存器的内容。 Flash 编程或校验时,P2 亦接收高位地址和一些控制信号。P3 口 P3 口是一组带有内部上拉电阻的 8 位双向 I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个 TTL 逻辑门电路。对 P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的 P3 口将用上拉电阻输出电流(IIL) 。 P3 口除了作为一般的 I/O 口线外,更重要的用途是它的第二功能 P3 口还接收一些用于 Flash 闪速存储器编程和程序校验的控制信号。 RST 复位输入。当振荡器工作时,RST 引脚出现两个机器周

13、期以上高电平将使单片机复位ALE/PROG 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低 8 位字节。一般情况下,ALE 仍以时钟振荡频率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对 Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG) 。如有必要,可通过对特殊功能寄存器(SFR)区中的 8EH 单元的 D0 位置位,可禁止 ALE 操作。该位置位后,只有一条 MOVX 和 MOVC 指令才能将 ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应

14、设置 ALE 禁止位无效。 PSEN 程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当 AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次 PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次 PSEN 信号。 EA/VPP 外部访问允许。欲使 CPU 仅访问外部程序存储器(地址为 0000HFFFFH) ,EA 端必须保持低电平(接地) 。需注意的是:如果加密位 LB1 被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 Vcc 端) ,CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程

15、允许电源 Vpp,当然这必须是该器件用 12 V 编程电压Vpp。XTAL1 振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2 振荡器反相放大器的输出端1.2 3*4 矩阵键盘实现 1,2,3,4,5,6,7,8,9,0,clear,plus,minus,multiply,division 等功能1.31602 字符液晶管脚功能信息工程学院课程设计(论文)9LCD1602 引脚图1602 采用标准的 16 脚接口,其中:第 1 脚:VSS 为电源地第 2 脚:VCC 接 5V 电源正极第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会

16、 产生“ 鬼影” ,使用时可以通过一个 10K 的电位器调整对比度)。第 4 脚:RS 为 寄存器选择,高电平 1 时选择数据寄存器、低电平 0 时选择指令寄存器。第 5 脚:RW 为读写信号线,高电平 (1)时进行读操作,低电平 (0)时进行写操作。第 6 脚:E(或 EN)端为使能(enable) 端, 高电平(1)时读取信息,负跳变时执行指令。第 714 脚:D0 D7 为 8 位双向数据端。第 1516 脚:空脚或背灯电源。15 脚背光正极,16 脚背光负极特性3.3V 或 5V 工作电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有 80

17、 字节显示数据存储器 DDRAM内建有 192 个 5X7 点阵的字型的字符发生器 CGROM8 个可由用户自定义的 5X7 的字符发生器 CGRAM字符集1602 液晶模块内部的字符发生存储器(CGROM )已经存储了 160 个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 01000001B(41H),显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母“A”。因为 1602 识别的是 ASCII 码,试验可以用 ASCII 码直接赋值,在单片机编程中还可以用字符型常量

18、或变量赋值,如A。以下是 1602 的 16 进制 ASCII 码表地址:信息工程学院课程设计(论文)10读的时候,先读左边那列,再读上面那行,如:感叹号!的 ASCII 为 0x21,字母 B的 ASCII 为 0x42(前面加 0x 表示十六进制)编辑本段指令集指令码 功 能令RSR/WD7D6D5D4D3D2D1D0清除显示0 0 0 0 0 0 0 0 0 1 将 DDRAM 填满“20H“,并且设定 DDRAM 的地址计数器(AC)到“00H“地址归位0 0 0 0 0 0 0 0 1 X 设定 DDRAM 的地址计数器(AC)到“00H“,并且将游标移到开头原点位置;这个指令不改变

19、 DDRAM 的内容显示状态开/关0 0 0 0 0 0 1 D C B D=1: 整体显示 ONC=1: 游标 ON B=1:游标位置反白允许进入点设定0 0 0 0 0 0 0 1 I/DS 指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制0 0 0 0 0 1 S/CR/LX X设定游标的移动与显示的移位控制位;这个指令不改变 DDRAM 的内容功能设定0 0 0 0 1 DLX REX X DL=0/1:4/8 位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作设定 CGRAM地址0 0 0 1 AC5AC4AC3AC2AC1AC0设定 CGRAM

20、 地址设定 DDRAM0 0 1 0 ACACACACACAC设定 DDRAM 地址(显示位址)第一行:80H87H 第二行:90H97H信息工程学院课程设计(论文)11地址 5 4 3 2 1 0读取忙标志和地址0 1 BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到 RAM1 0 数据 将数据 D7D0 写入到内部的 RAM (DDRAM/CGRAM/IRAM/GRAM)读出 RAM 的值1 1 数据 从内部 RAM 读取数据 D7D0(DDRAM/CGRAM/IRAM/GRAM)2 总体设计基于 AT89

21、S52 单片机的电话键盘和简易计算器由电源电路、单片机主控电路、按键电路、显示电路和复位电路几部分组成,2.1 功能要求电话键盘及拨号: 电话键盘共有 12 个键,除了 09 的 10 个数字键外,还有“-”键用于实现删除功能,即删除一位最后输入的号码;“#”键用于清除显示屏上所有的数字显示。还要求每按下一个键要发出声响,以表示按下该键。计算器:能进行简单的加减乘除四则运算,当进行除法运算时,能自动清除小数部分,并在 LED 屏上显示,还要求每按下一个键要发出声响,以表示按下该键。2.2 设计步骤及要求1,拟定电路的组成框图,实现电路的基本功能,后附加转换功能。2,设计电路,写出代码,并用 P

22、ROTUS 软件仿真;3,测试功能;4,写出设计报告。设计报告要求:写出详细地设计过程(含逻辑电路图,调试步骤、测试结果及心得体会) 。其中目录要求生成.2.3 主要器件单片机(一片) ,RESPACK-8(一片) ,LM016L(一片) ,电源2.4 系统框信息工程学院课程设计(论文)122.5 参考资料1 冯育长主编.单片机系统设计与实例分析.西安:西安电子科技大学社,20072 谢维成,杨加国主编.单片机原理与应用及 C51 程序设计.北京:清华大学出版社,2006. 3 王思明,张金敏主编.单片机原理及应用.兰州大学出版社,2001 年 4 宋晖,余张国主编。单片机原理与应用。电子科技

23、大学出版社,2008 年信息工程学院课程设计(论文)133 详细设计3.1 键盘系统图 3-1 键盘结构图信息工程学院课程设计(论文)14图 3-2 键盘仿真图实验板上是一个 4*4 的键盘矩阵,可以采用逐行扫描或全扫描的方式实现按键的读取,行线和列线加驱动后空载时为高电平,逐行扫描的方法为逐行使行线的每位为低,再判断列线的返回信号,如果没有键按下,返回的信号全为高;如果返回的信号中有列线为低,那么肯定是有按键按下,根据列线和行线的交点可以判断按键的具体位置。 全扫描的方法为先行线全为低,判断列线,如果列线有为低的,则可以判断有键按下,此时还不能判断某列的具体的键和行,还需反过来将列线全为低,

24、再判断具体的行,根据行列即确定具体的按键3.3 显示系统液晶显示屏采用 LM016L (LCD1602) LCD显示共 2 行,每行 16 个字符。第 1 行为设计者信息,第 2 行开始显示所拨的电话号码,最多为 16 位(因为 LCD 的一行能显示 16个字符) 。图 3-3LED 显示仿真图171615141312110erwrsD714D613D512D41D310D29D18D07E6RW5RS4VS1 VD2 VE3LCD1LM016L信息工程学院课程设计(论文)15此为电话键盘和拨号仿真显示,当按下功能切换键以后即为计算器仿真,其仿真图如下;171615141312110erwrs

25、D714D613D512D41D310D29D18D07E6RW5RS4VS1 VD2 VE3LCD1LM016L3.4 功能转换电路当按下功能转换键后,其可以在电话键盘和计算器间转化234567 R110k功 能 切 换 按 钮图 3-4 功能转换电路3.5 总体电路图 3-5 总体电路仿真图信息工程学院课程设计(论文)16上图为电话键盘仿真图,下图为计算器仿真图3.5 系统流程图信息工程学院课程设计(论文)173.6 程序设计主程序:/*实验名称:矩阵键盘简易计算器程序说明:数码管显示,短接 J6 上端,整数之间运算,没有小数所有除法得出的结果不正确,有负号运?实验平台:YZ200 V2.

26、0 开发箱作者:徐锐锋日期:2010-11广州研展电子科技有限公司 (我爱研发网) 版权所有 */#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#include“display.h“#include“delay.h“#include“keyboard.h“信息工程学院课程设计(论文)18/*-主程序-*/main()unsigned char num,i,sign; unsigned char temp8; /最大输入 8 个bit firstflag;int a=0,b=0;unsigned char s;CtrlPort = 0;Dat

27、aPort = 0;for(s=0;s8;s+) /赋值完成后把缓冲区清零,防止下次输入影响结果TempDatas=0;Init_Timer0(); /初始化定时器 0while (1) /主循环num=KeyPro(); /扫描键盘if(num!=0xff) /如果扫描是按键有效值则进行处理 if(i=0) /输入是第一个字符的时候需要把改行清空,方便观看for(s=0;s8;s+) /赋值完成后把缓冲区清零,防止下次输入影响结果TempDatas=0;if(+=num)| (i=8) | (-=num) | (x=num)| (/=num) | (=num)/输入数字最大值8,输入符号表示

28、输入结束i=0; /计数器复位if(firstflag=0) /如果是输入的第一个数据,赋值给 a,并把标志位置 1,到下一个数据输入时可以跳转赋值给 bsscanf(temp,“%d“,/从一个字符串输入到变量firstflag=1;else sscanf(temp,“%d“,for(s=0;s8;s+) /赋值完成后把缓冲区清零,防止下次输入影响结果temps=0;/if(num!=) /判断当前符号位并做相应处理信息工程学院课程设计(论文)19sign=num; /如果不是等号记下标志位else firstflag=0; /检测到输入 =号,判断上次读入的符合switch(sign)ca

29、se +:a=a+b;break;case -:a=a-b;break;case x:a=a*b;break;case /:a=a/b;break;default:break;sprintf(temp,“%d“,a); /打印十进制到临时缓冲区for(s=0;s8;s+) /由于打印的是 ASCII 码值 if(temps=0) /所以需要转换,如果为 0 表示 null 数码管上则不能显示,所以赋值 0TempDatas=0;else if(temps=0x2d)/表示负号,数码管显示负号 0x40TempDatas=0x40;else TempDatas=DuanMatemps-0;/其他

30、 0-9 负号则进行 ASCII 到 数字处理,如当前是3,用3-0=3/3的 16 进制是 0x33,0的16 进制是 0x30 sign=0;a=b=0; /用完后所有数据清零for(s=0;s8;s+)temps=0;else if(i16)tempi=num+0; TempDatai=DuanManum;/输出数据i+; /输入数值累加信息工程学院课程设计(论文)201602 显示程序:#include “reg52.h“#include “shen_1602.h“void LCD_Wait()/内部等待函数LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_

31、();/ while(DBPort/在用 Proteus 仿真时,注意用屏蔽此语句,在调用 GotoXY()时,会进入死循环,/可能在写该控制字时,该模块没有返回写入完备命令,即DBPort/ return DBPort;/向 LCD 写入命令或数据*void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input;_nop_();/注意顺序LcdEn=1; _nop_();/注意顺序LcdEn=0; _nop_();LCD_Wait();/设置显示模式*void LC

32、D_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/设置输入模式*信息工程学院课程设计(论文)21void LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/移动光标或屏幕*void LCD_Move(unsigned char object, unsigned char direction)if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x1

33、0|direction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|direction);/初始化 LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8 位数据端口,2 行显示,5*7 点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_U

34、P|LCD_NO_MOVE); /AC 递增, 画面不动/*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;void LCD_Print(unsigned char x, unsigned char y, unsigned char *str)信息工

35、程学院课程设计(论文)22GotoXY(x,y);Print(str);void LCD_LoadChar(unsigned char user8, unsigned char place)unsigned char i;LCD_Write(LCD_COMMAND,0x40|(place*8);for(i=0; i8; i+)LCD_Write(LCD_DATA,useri);void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);/*void IntToStr(unsigned

36、int t, unsigned char *str, unsigned char n) unsigned char a5; char i, j; a0=(t/10000)%10; /取得整数值到数组 a1=(t/1000)%10; a2=(t/100)%10; a3=(t/10)%10; a4=(t/1)%10; for(i=0; i5; i+) /转成 ASCII 码 ai=ai+0; for(i=0; ai=0 i+); for(j=5-n; ji; j+) /填充空格 *str= ; str+; for(; i5; i+) *str=ai; str+; /加入有效的数字 *str=0;

37、*/信息工程学院课程设计(论文)23/*unsigned char TempBuffer10;main()unsigned int Count = 0;LCD_Initial();GotoXY(0,0);Print(“The 1602 COUNTER“);GotoXY(0,1);Print(“ BY YZ200 “);while(1)/ IntToStr(Count+,GotoXY(0,1);Print(Delay1ms(700);*/计算器程序:#include“reg52.h“#include“shen_1602.h“#include“shen_key.h“#include“stdio.h

38、“#define uchar unsigned char#define uint unsigned intsbit buzzer=P03;uchar funcflag=0,funcchange=0,i=0; / i 做计数器用!void delay(uint t);void main()uchar num,j=0,firstflag,sign,temp16,dest16;int a=0,b=0,c=0; 信息工程学院课程设计(论文)24LCD_Initial();LCD_Print(0,0,“MADEBY LILI dail“);IT0=1;EA=1;EX0=1;buzzer=0;for(j=

39、0;j16;j+)tempj=0; while (1) /主循环buzzer=0;if(funcchange)i=0;funcchange=0;LCD_Print(0,1,“ “);for(j=0;j16;j+)tempj=0;num=KeyPro(); /扫描键盘if(num!=0xff) /如果扫描是按键有效值则进行处理buzzer=1;delay(4000);/if(funcflag) /funcflag 1 计算器功能if(i=16) |(+=num)|(-=num) | (x=num)| (/=num) | (=num)/输入数字最大值 16,输入符号表示输入结束i=0; /计数器复

40、位LCD_Print(0,1,“ “);if(firstflag=0)/如果是输入的第一个数据,赋值给 a,并把标志位置 1,到下一个数据输入时可以跳转赋值给 bsscanf(temp,“%d“,/从一个字符串输入到变量firstflag=1;信息工程学院课程设计(论文)25else sscanf(temp,“%d“,for(j=0;j16;j+) /赋值完成后把缓冲区清零,防止下次输入影响结果tempj=0;if(num!=) /判断当前符号位并做相应处理sign=num; /如果不是等号记下标志位elsefirstflag=0; /检测到输入=号switch(sign)case +:a=a

41、+b;break;case -:a=a-b;break;case x:a=a*b;break;case /:a=a/b;break;default:break;sprintf(temp,“%d“,a); /打印十进制 ASCII 码值到临时缓冲区LCD_Print(0,1,temp);sign=0;a=b=0; /用完后所有数据清零for(j=0;j16;j+) /赋值完成后把缓冲区清零,防止下次输入影响结果tempj=0; else if(i16)tempi=num+0;LCD_Print(0,1,temp);i+;/输入数值累加 /else/funcflag 0 电话功能信息工程学院课程设

42、计(论文)26if(i=16|.=num)i=0; /计数器复位for(j=0;j16;j+)tempj=0;LCD_Print(0,1,“ “);else if(-=num)i-;for(j=0;ji;j+)destj=tempj;for(j=0;j16;j+)tempj=destj;LCD_Print(0,1,“ “);LCD_Print(0,1,temp);for(j=0;j16;j+)destj=0;else if(+=num)| (x=num)| (/=num) | (=num)else if(i16)tempi=num+0;LCD_Print(0,1,temp);i+;/输入数值累

43、加void delay(uint t)while(t-);信息工程学院课程设计(论文)27void shen_int0() interrupt 0funcchange+;funcflag+;if(funcflag=2)funcflag=0;LCD_Print(12,0,“dail“);elseLCD_Print(12,0,“ cal“);4 总结课程设计是培养学生运用综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实际能力的重要环节,是对我们实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中无处在。作为计算机专业的学生来说

44、单片机的开发技术十分重要。 我做的题目是基于 AT89S52 单片机的简易计算器设计,对于我们这些实践中的新手来说,信息工程学院课程设计(论文)28这是一次考验。怎样才能找到课堂所学与实践运用的最佳结合点。这都是我们要考虑和努力的。在此次课程设计中,通过老师的精心指导和在网上找的资料,主要掌握了数码管显示的编程,数据在内部运算的编程方法。调试也是此次的重点,这其中最重要的就是软件的调试了,也是我此次问题出现最多的地方。这要求我们对每个模块在整个程序中的作用的了如指掌。通过此次课程设计,我发现我对程序的掌握还不够 ,尤其是单片机汇编语言掌握的不牢固。这次课程设计使我懂得实践的重要性,只有理论知识远远不够,只有把所学的理论知识与实践相结合才能算是掌握了所学的知识。随着就业形势的日趋严峻,大学生的动手能力、实际能力和综合素质越来越受到学校和用人单位的重视。 不足和改善建议:此次设计单片机十分简易,只实现简单的加减乘除,并且还有结果不能得到负数和除数不能为 0 的 Bug,所以这次我们

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

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报