《单片机课程设计报告(简易计算器).docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告(简易计算器).docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机课程设计报告(简易计算器) 单片机实训报告 简易计算器 姓名* 学号* 专业* 学校* 指导教师 * 实训时间2022.06.23-2022.06.29 目录 中文摘要1 关键词1 1 实训任务1 1.1 主要功能设计1 1.2 任务目的1 2 整体设计方案1 2.1 方案论证1 2.2 系统框图2 3 控制软件设计2 3.1 程序时序总图2 3.2 液晶显示软件设计3 3.3 键盘输入软件设计5 3.4 计算函数设置7 4 软件调试8 个人小结8参考文献9附录9 摘要:计算器是人们的日常生活中是最常见的电子产品之一,它应用极广、发展迅猛,并且不断出现着拥有更加强大功能的计算器。为了解和
2、研究计算器,本次实训设计制作了一个简易计算器,能够在五位的计算围进行“+”、“-”、“*”、“/”的基本运算,能进行负数的精确结果显示。该计算器以AT89C51单片机芯片作为核心。采用LCD1602工业字符液晶进行显示。完成的计算器经过检验能够完整的实现预设功能,各种细节完善,具有很高的使用价值。 关键词:单片机;简易计算器;AT89C51;LCD1602 1实训任务 1.1 主要功能设计 以AT89C51单片机芯片为核心来制作一个简易计算器,外部由4*4矩阵键盘和一个LCD1602工业字符型液晶显示屏构成,部由一块AT89C51单片机构成,通过软件编程可实现简单加减乘除。 1.2 任务目的
3、通过本次实训提高我们的单片机硬件设计、软件编程能力,自主学习到更多的单片机应用知识。 2 整体设计方案 2.1 方案论证 计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。具体如下: (1)LCD显示电路 LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合LCD本身的时序图来完善初始化程序。又以其微功耗、体积小、显示容丰富、超薄轻巧的诸多优点,故采用LCD. (2)4*4键盘扫描电路 对键盘上的某一行送低电平,其他行为高电平,然后读取列值。若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。 根据读
4、到的值组合就可以查表 1 得到的键码,因为编程的方式,本次实训采用逐行扫描来读取键值,方便程序编写。 (3)单片机微控制电路: 微控制电路就是以AT89C51为核心的控制核心,主要注意晶振电路的接法和复位电路的接法。 2.2 系统框图 系统框图 3 控制软件设计: 实训中采用C语言对单片机进行编程,采用的是自下而上的设计方式,先设计出每一个模块(子程序),然后再慢慢扩大,最后组成程序。 3.1 程序总时序图 3.2 液晶显示软件设计 (1)显示流程 开始 液晶初始化 调用显示字序 液晶显示 结束 (2)1602液晶显示时序图,通过时序图,所有编程问题都可以得以解决。 (3)由时序图可以写出液晶
5、的初始化函数、功能设置函数、清屏函数、写指令函数、写数据函数。 void delay1() /采用软件实现延时,5个机器周期 _nop_(); _nop_(); _nop_(); void int1() /LCD初始化 lcd_w_cmd(0x3c); lcd_w_cmd(0x0c); lcd_w_cmd(0x01); lcd_w_cmd(0x06); lcd_w_cmd(0x80); unsigned char lcd_r_start() /读状态字 unsigned char s; RW=1; delay1(); RS=0; delay1(); E=1; delay1(); s=P1; d
6、elay1(); E=0; delay1(); RW=0; delay1(); return(s); void lcd_w_cmd(unsigned char ) /写命令字 unsigned char g; do g=lcd_r_start(); g=g&0x80; delay(2); while(g!=0); RW=0; delay1(); RS=0; delay1(); E=1; delay1(); P1=; delay1(); E=0; delay1(); RW=1; delay(255); void lcd_w_dat (unsigned char dat) /写数据 unsigned char g; do g=lcd_r_start(); g=g&0x80; delay(2); while(g!=0); RW=0; delay1(); RS=1; delay1(); E=1; delay1(); P1=dat; delay1(); E=0; delay1(); RW=1; delay(255);