单片机简易计算器_第1页
单片机简易计算器_第2页
单片机简易计算器_第3页
单片机简易计算器_第4页
单片机简易计算器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

13 届单片机 课程设计 简易计算器简易计算器 学生姓名 杨飞 学 号 8021209216 所属学院 机械电气化工程学院 专 业 农业电气化与自动化 班 级 电气化 13 2 班 指导教师 王 丽 胡将 日 期 2012 6 塔里木大学教务处制 目目 录录 一 一 设计目的设计目的 1 二 方案论证二 方案论证 1 三 硬件设计电路框图三 硬件设计电路框图 2 设计原理图及仿真图设计原理图及仿真图 3 总体电路的原理和功能框图总体电路的原理和功能框图 4 四四 软件设计程序及描述软件设计程序及描述 5 五 实验改进及心得体会五 实验改进及心得体会 6 1 简易计算器简易计算器 一一 设计内容和目的设计内容和目的 本次实验的任务就是要以 51 系列单片机为核心实现一个简易计算器计算器 它的结构 非常简单 外部主要由 4 4 矩阵键盘和一个液晶显示屏构成 内部由一块 AT89C51 单片机 构成 通过软件编程可实现简单加减乘除 目的 做自己喜欢的实验 提高自学能力 二二 方案论证方案论证 经分析 计算器电路包括三个部分 显示电路 4 4键扫描电路 单片机微控制 电路 具体如下 LCDLCD显示电路显示电路 LCD1602作为一个成熟的产品 使用简单 模式固定 便于移植到各种类型的程序 但 是初学者往往要注意结合LCD本身的时序图来完善初始化程序 又以其微功耗 体积小 显示内容丰富 超薄轻巧的诸多优点 故采用LCD 4 44 4键盘扫描电路键盘扫描电路 中断式 扫描式 反转式中断式 扫描式 反转式 用户设计行列键盘接口 一般常采用3 种方法读取键值 一种是中断式 外两种是扫 描法和反转法 中断式中断式 在键盘按下时产生一个外部中断通知CPU 并由中断处理程序通过不同的地 址读取数据线上的状态 判断哪个案件被按下 本实验采用中断式实现用户键盘接口 扫描法扫描法 对键盘上的某一行送低电平 其他行为高电平 然后读取列值 若列值中有 一位是低 则表明该行与低电平对应列的键被按下 否则 扫描下一行 反转法 反转法 先将所有行扫描线输出低电平 读列值 若列值有一位是低 则表明有键按 下 读列值 然后所有列扫描线输出低电平 再读行值 根据读到的值组合就可以查表1 得到的键码 这个就仁者见仁智者见智了 不过如果熟悉了扫描式 建议果断升级自己的 硬件 很简单加个74LS08与门 故采用节省CPU的中断式扫描电路 单片机微控制电路单片机微控制电路 微控制电路就是以AT89C51为核心的控制核心 主要注意晶振电路的接法和复位电路的 接法 三三 硬件电路的设计硬件电路的设计 3 1 硬件设计电路框图 2 51 系列单片系列单片 机系统机系统 4 4 键盘键盘 LCD 显示显示 晶振电路晶振电路 复位电路复位电路 线路原理框图线路原理框图 3 2 硬件设计电路的元件清单 器件名称数量 AT89C511 按键 17 74LS081 10K 电阻 9 电容 22uF 1 LCD16021 晶振 12MHz 1 电容 30pF 2 5K 电位器 1 3 3 硬件设计电路图 将 4 4 的键盘直接接在 P1 口上 用 P0 口作为 LCD 的显示输 出 P3 2 口的 INT0 作为外部中断位 3 P1 0 T2 1 P1 1 2 P1 2 3 P1 2 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 RST 9 P3 0 RxD 10 P3 1 TxD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 5 T1 15 P3 6 WR 16 P3 7 RD 17 XTAL2 18 XTAL1 19 VSS 20 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 P2 7 A15 28 PSEN 29 ALE PROG 30 EA VPP 31 P0 7 AD7 32 P0 6 AD6 33 P0 5 AD5 34 P0 4 AD4 35 P0 3 AD3 36 P0 2 AD2 37 P0 1AD1 38 P0 0 AD0 39 VCC 40 U AT89S51 1 2 3 U A 74LS08 1 2 3 U A 74LS08 1 2 3 U A 74LS08 S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB S SW PB 12 Y XTAL 100pF C Cap 100pF C Cap 100pF C Cap S SW PB 1K R Res2 1K R Res Tap GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 P Header 16H 1 2 3 4 5 6 7 8 9 JP HEADER 9 5 VCC GND 原理图 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 U1 80C51 X1 CRYSTAL C1 22p C2 22p C3 22p R1 1k 5V D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L RV 1k 5V 5V 2 3 4 5 6 7 8 9 1 RP1 RESPACK 8 5V 1 2 3 U2 A 74LS08 4 5 6 U2 B 74LS08 9 10 8 U2 C 74LS08 Proteus 仿真图 4 仿真效果 四四 软件设计程序及描述软件设计程序及描述 本程序组成可分为 3 个模块 矩阵键盘模块 LCD 显示模块 和运算模块 5 开始 初始化参数 初始化 LCD 显示 有键输入 读取键码 LCD 显示 数字键清零键功能键 状态清零输入数值 数值送显示缓冲 Y N 等待数值输入 结果送显示缓冲 根据上次功能键和输 入的数据计算结果 本次功能键 等待数值输入 结果送显示缓冲 等待数值输入 结果送显示缓冲 6 五五 实验改进与心得体会实验改进与心得体会 很明显我的计算器处理数据及显示存在太大的局限性 我觉得主要还是我对程序中的 运算模块理解不深 这点仍需大大加强 这个实验给我的感觉 硬件和软件上都不是很难 可惜 最终做的实物还是没能出结 果 问题可能出在以下两个方面 1 接线和焊接 焊接水平还是不够纯熟有可能出现问题 2 原件问题 虽然没有做出实物 不过我还是在这次课程设计中学到了很多 包括 Proteus DXP keil 等软件的应用 51 单片机的应用 电路板的焊接等 是我获益良多 很感谢学校和老师给我们安排了这次课程设计 让我认识到了合作的重要 许多时候都 是组员的讨论 一个人的力量始终是有限的 通过讨论找到了最佳方案 同时 我也认识 到了理论知识和实践都很重要 只懂理论不会实践是不行的 盲目实践 不看清理论知识 也是不可取的 理论和实践相结合 才能学到真正的知识 使自己的能力得到最大的提升 7 下面是源代码 include define CLEARSCREEN LCD write command 0 x01 define uint unsigned int define uchar unsigned char 定义接口 define LCDIO P0 define KEYBOARD P1 保留 sbit LCD1602 RS P2 0 sbit LCD1602 RW P2 1 sbit LCD1602 EN P2 2 code uchar mayuan 16 0 1 2 3 4 5 6 7 8 9 0 不错 这 个比较明了 unsigned char code keycode 0 x11 0 x21 0 x41 0 x81 0 x12 0 x22 0 x42 0 x82 0 x14 0 x24 0 x44 0 x84 0 x18 0 x28 0 x48 0 x88 键盘编码值 int i j k 1 s int t t1 t2 a void delay uchar 延时 定义函数 void LCD init void 初始化函数 void delay nms unsigned int n 延时函数 void LCD write command unsigned char command 写入指令函数 void LCD write dat unsigned char dat 写入数据函数 void delay 10ms initial uchar keyscan 键盘扫描函数 calc uchar 计算函数 uchar num temp key keynum void main 主函数 LCD init delay nms 100 while 1 initial 有中断 KEYBOARD 0 xf0 键盘的列值全置高电平 8 开中断 initial EA 1 总开关 EX0 1 中断方式 0 开启 IT0 0 中断函数 void inter0 interrupt 0 unsigned char n delay 10ms 延时 if INT0 0 没键按下 EX0 0 关中断 n keyscan calc n EX0 1 开中断 KEYBOARD 0 xf0 键盘的列值全置高电平 calc uchar n if n 10 键值小于 10 t1 t1 10 n LCD write command 0 x00 写命令语句 LCD write dat mayuan n 写数据函数 else if n 10 LCD init t1 0 t2 0 t 0 k 1 else if n 15 9 t2 t1 t1 0 j n LCD write command 0 x00 LCD write dat mayuan n else LCD write command 0 x00 LCD write dat mayuan n switch j case 11 t t2 t1 break case 12 t t2 t1 break case 13 t t2 t1 break case 14 t t2 t1 break if t9 while t 9 s t 10 t t 10 a k s k if t 1 i LCD write command 0 x00 LCD write dat a i 48 10 键盘扫描函数 uchar keyscan 键盘扫描 KEYBOARD 0 xf0 键盘的列值全置高电平 delay 10ms 延时 if KEYBOARD 0 xf0 有键按下 temp KEYBOARD 保存键盘此刻的键植 delay 10ms 延时 if KEYBOARD temp 再次确认键盘是否被按下 uchar i KEYBOARD 0 x0f 键盘的行值全置高电平 delay 10ms 10MS 时间延时 keynum temp KEYBOARD 保存键盘的行值 while KEYBOARD 0 x0f 松手检测 for i 0 i0 i for j 0 j 10 j void delay 10ms 10MS 延时 unsigned char i j for i 0 i 10 i for j 0 j 120 j 11 写指令函数 void LCD write command unsigned char command LCDIO command LCD1602 RS 0 LCD1602 RW 0 LCD1602 EN 0 LCD1602 EN 1 delay nms 10 写数据函数 void LCD write dat unsigned char dat LCDIO dat LCD1602 RS 1 LCD1602 RW 0 LCD1602 EN 0 delay nms 1 LCD1602 EN 1 初始化函数 void LCD init void CLEARSCREEN clear screen LCD write command 0 x38 set 8 bit data transmission mode LCD write command 0 x0c open display enable lcd display LCD write command 0 x80 set lcd first display address CLEARSCREEN clear screen 以下是一些 LCD 显示图案的代码 在仿真中经过测试的 include unsigned char table1 0 x03 0 x07 0 x0f 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 12 0 x18 0 x1E 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x07 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x10 0 x18 0 x1c 0 x1E 0 x1E 0 x1E 0 x1E 0 x1E 0 x0f 0 x07 0 x03 0 x01 0 x00 0 x00 0 x00 0 x00 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x0f 0 x07 0 x01 0 x1f 0 x1f 0 x1f 0 x1f 0 x1f 0 x1c 0 x18 0 x00 0 x1c 0 x18 0 x10 0 x00 0 x00 0 x00 0 x00 0 x00 心图 案 unsigned char table 0 x10 0 x06 0 x09 0 x08 0 x08 0 x09 0 x06 0 x00 字符 define CLEARSCREEN LCD write command 0 x01 定义接口 define LCDIO P0 sbit LCD1602 RS P2 0 sbit LCD1602 RW P2 1 sbit LCD1602 EN P2 2 定义函数 void LCD write command unsigned char command 写入指令函数 void LCD write dat unsigned char dat 写入数据函数 void LCD set xy unsigned char x unsigned char y 设置显示位置函数 void LCD dsp char unsigned x unsigned char y unsigned char dat 显示一个字符 函数 void LCD dsp string unsigned char X unsigned char Y unsigned char s 显示字符 串函数 void LCD init void 初始化函数 void delay nms unsigned int n 延时函数 初始化函数 void LCD init void CLEARSCREEN clear screen LCD write command 0 x38 set 8 bit data transmission mode LCD write command 0 x0c open display enable lcd display LCD write command 0 x80 set lcd first display address CLEARSCREEN clear screen 写指令函数 void LCD write command unsigned char command LCDIO command LCD1602 RS 0 LCD1602 RW 0 LCD1602 EN 0 LCD1602 EN 1 13 delay nms 10 写数据函数 void LCD write dat unsigned char dat LCDIO dat LCD1602 RS 1 LCD1602 RW 0 LCD1602 EN 0 delay nms 1 LCD1602 EN 1 设置显示位置 void LCD set xy unsigned char x unsigned char y unsigned char address if y 1 address 0 x80 x else address 0 xc0 x LCD write comman

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论