




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一键盘显示实验实验一键盘显示实验 一 实验目的一 实验目的 1 掌握 MCS51 系统中键盘显示接口的方法 2 掌握中断处理程序的编程方法 二 硬件原理图二 硬件原理图 2 1 数码管显示原理介绍数码管显示原理介绍 实验箱上有 6 个共阴极数码管 图 1 是其外部特性图 图 2 是其内部原理图 由图 2 可知 每个数码管由 8 个发光二极管组成 其中 a DP 称为数码管的段控信号 K 是 8 个 发光二极管的公共端 称为位控信号 所以为了让数码管显示一个数字 必须将位控信号 接低电平 段控信号接高电平 例如 如要显示数字 1 b 端和 c 端应该接高电平 其余 各端接低电平 2 2 键盘扫描原理介绍键盘扫描原理介绍 键盘扫描原理如图 3 所示 K1 和 K2 是按键 按键的两端都接有 10k 的上拉电阻 当行扫描端为低电平 同时 K1 键被按下时 K1 的列读取端就会出现低电平 由处理 器对行扫描信号和列读取信号进行综合判断后 得出 K1 键被按下的结论 2 3 实验连线图实验连线图 实验接线如下图所示 单片机通过 8279 芯片控制数码管 同时以 P1 口扫描 4 4 键盘键值 三 软件流程图三 软件流程图 3 1 数码管显示实验流程图数码管显示实验流程图 开始 定义 ID1 ID2 段锁存 位锁存 段码 位码 i 8 取位码 位锁存 取段码 段锁存 a 1000 Y 延时 i i 0 a N Y 同样流程显示 ID2 结束 N 3 2 扫描键盘显示实验流程图扫描键盘显示实验流程图 开始 系统初始化 按键扫描 键值处理 按键有效 是否清零 存入码值 N Y 清零 N 显示按键 Y 四 实验步骤四 实验步骤 参照实验指导书连接杜邦线 编写程序 并用 KeilC 软件调试程序 程序编译无错后使用 S51ISP 下载软件将程序下载到单片机中 观察实验现象 如果实验现象与预期不符则可以使用 KeilC 的软件仿真调试功能 通过软件仿真使程序单步运行 从中找到编程错误 向实验指导老师讲解程序原理 整理仪器离开实验室 五 软件源码五 软件源码 5 1 数码管显示数码管显示 5 1 1C 语言语言 include 89C52 寄存器定义头文件 define DataPort P0 sbit LATCH1 P2 2 定义锁存使能端口 段锁存 sbit LATCH2 P2 3 位锁存 unsigned char table 16 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 段码表 从 0 到 9 从 A 到 F unsigned char code ID1 1 1 0 3 1 0 5 2 unsigned char code ID2 1 1 0 8 1 1 6 2 学号 unsigned char code location 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf 0 xbf 0 x7f 分别对应相应的数码管点亮 即位码 void Delay unsigned int t 延时函数声明 主函数 main unsigned char i 0 int a 0 while 1 for a 0 a 1000 a P0 location i 取位码 LATCH2 1 位锁存 LATCH2 0 P0 table ID1 i 取显示数据 段码 LATCH1 1 段锁存 LATCH1 0 Delay 200 扫描间隙延时 时间太长会闪烁 太短会造成重影 i if 8 i 检测 8 位扫描完全结束 如扫描完成则从第一个开始再次扫描 8 位 i 0 ID1 显示结束 for a 0 a 1000 a P0 location i 取位码 LATCH2 1 位锁存 LATCH2 0 P0 table ID2 i 取显示数据 段码 LATCH1 1 段锁存 LATCH1 0 Delay 200 扫描间隙延时 时间太长会闪烁 太短会造成重影 i if 8 i 检测 8 位扫描完全结束 如扫描完成则从第一个开始再次扫描 8 位 i 0 ID2 显示结束 延时函数 含有输入参数 unsigned int t 无返回值 unsigned int 是定义无符号整形变量 其值的范围是 0 65535 void Delay unsigned int t while t 5 1 2 汇编汇编 态扫描数码显示程序 P0 口接 J3 数据端口 P2 2 接 J2 B 端子 表示段码锁存 P2 3 接 J2 A 端子 标志位码锁存 ORG 00H MOV 20H 06H 1 MOV 21H 06H 1 MOV 22H 3FH 0 MOV 23H 4FH 3 MOV 24H 06H 1 MOV 25H 3FH 0 MOV 26H 6D H 5 MOV 27H 5B H 2 学号 LATCH1 BIT P2 2 LATCH2 BIT P2 3 定义段锁存与位锁存 START CALL SCAN JMP START SCAN MOV A 0FEH 扫描子程序 MOV R0 20H SETB C MOV R2 08H LOOP MOV P0 A SETB LATCH2 CLR LATCH2 MOV P0 R0 SETB LATCH1 CLR LATCH1 INC R0 CALL DELAY RLC A DJNZ R2 LOOP MOV R2 08H RET DELAY MOV R3 1 扫描延时 D1 MOV R4 2 D2 MOV R5 248 DJNZ R5 DJNZ R4 D2 DJNZ R3 D1 RET END 5 2 扫描键盘显示扫描键盘显示 include 包含头文件 define DataPort P0 定义数据端口 程序中遇到 DataPort 则用 P0 替换 define KeyPort P1 定义按键端口 程序中遇到 KeyPort 则用 P1 替换 sbit LATCH1 P2 2 定义锁存使能端口 段锁存 sbit LATCH2 P2 3 位锁存 unsigned char code dofly DuanMa 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f 0 x77 0 x7c 0 x39 0 x5e 0 x79 0 x71 显示段码值 0 9 A F unsigned char code dofly WeiMa 0 xfe 0 xfd 0 xfb 0 xf7 0 xef 0 xdf 0 xbf 0 x7f 分别对应相应 的数码管点亮 即位码 unsigned char TempData 8 存储显示值的全局变量 void DelayUs2x unsigned char t us 级延时函数声明 void DelayMs unsigned char t ms 级延时 void Display unsigned char FirstBit unsigned char Num 数码管显示函数 unsigned char KeyScan void 键盘扫描 unsigned char KeyPro void 按键值处理函数 返回扫键值 void Init Timer0 void 定时器初始化 主函数 void main void unsigned char num i j unsigned char temp 8 Init Timer0 while 1 主循环 num KeyPro if num 0 xff if i 8 temp i dofly DuanMa num if num 14 temp i dofly DuanMa num i temp i dofly DuanMa 6 for j 0 j i j TempData 7 i j temp j i if i 9 多出一个按键输入为了清屏 原本应该为 8 i 0 if num 16 i 0 for j 0 j 8 j 清屏 TempData j dofly DuanMa 0 Display 0 8 显示全部 8 位 主循环中添加其他需要一直工作的程序 uS 延时函数 含有输入参数 unsigned char t 无返回值 unsigned char 是定义无符号字符变量 其值的范围是 0 255 这里使用晶振 12M 精确延时请使用汇编 大致延时 长度如下 T tx2 5 uS void DelayUs2x unsigned char t while t mS 延时函数 含有输入参数 unsigned char t 无返回值 unsigned char 是定义无符号字符变量 其值的范围是 0 255 这里使用晶振 12M 精确延时请使用汇编 void DelayMs unsigned char t while t 大致延时 1mS DelayUs2x 245 DelayUs2x 245 显示函数 用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位 如赋值 2 表示从第三个数码管开始显示 如输入 0 表示从第一个显示 Num 表示需要显示的位数 如需要显示 99 两位数值则该值输入 2 void Display unsigned char FirstBit unsigned char Num static unsigned char i 0 DataPort 0 清空数据 防止有交替重影 LATCH1 1 段锁存 LATCH1 0 DataPort dofly WeiMa i FirstBit 取位码 LATCH2 1 位锁存 LATCH2 0 DataPort TempData i 取显示数据 段码 LATCH1 1 段锁存 LATCH1 0 i if i Num i 0 定时器初始化子程序 void Init Timer0 void TMOD 0 x01 使用模式 1 16 位定时器 使用 符号可以在使用多个定时器时不 受影响 TH0 0 x00 给定初值 TL0 0 x00 EA 1 总中断打开 ET0 1 定时器中断打开 TR0 1 定时器开关打开 定时器中断子程序 void Timer0 isr void interrupt 1 TH0 65536 2000 256 重新赋值 2ms TL0 65536 2000 256 Display 0 8 调用数码管扫描 按键扫描函数 返回扫描键值 unsigned char KeyScan void 键盘扫描函数 使用行列逐级扫描法 unsigned char Val KeyPort 0 xf0 高四位置高 低四位拉低 if KeyPort 0 xf0 表示有按键按下 DelayMs 10 去抖 if KeyPort 0 xf0 表示有按键按下 KeyPort 0 xfe 检测第一行 if KeyPort 0 xfe Val KeyPort Val 0 x0e while KeyPort 0 xfe DelayMs 5 去抖 while KeyPort 0 xfe return Val KeyPort 0 xfd 检测第二行 if KeyPort 0 xfd Val KeyPort Val 0 x0d while KeyPort 0 xfd DelayMs 5 去抖 while KeyPort 0 xfd return Val KeyPort 0 xfb 检测第三行 if KeyPort 0 xfb Val KeyPort Val 0 x0b while KeyPort 0 xfb DelayMs 5 去抖 while KeyPort 0 xfb return Val KeyPort 0 xf7 检测第四行 if KeyPort 0 xf7 Val KeyPort Val 0 x07 while KeyPort 0 xf7 DelayMs 5 去抖 while KeyPort 0 xf7 return Val return 0 xff 按键值处理函数 返回扫键值 unsigned char KeyPro void switch KeyScan case 0 x7e return 1 break 0 按下相应的键显示相对应的码值 case 0 x7d return 2 break 1 case 0 x7b return 3 break 2 case 0 x77 return 10 break 3 case 0 xbe return 4 break 4 case 0 xbd return 5 break 5 case 0 xbb return 6 break 6 case 0 xb7 return 11 break 7 case 0 xde return 7 break 8 case 0 xdd return 8 break 9 case 0 xdb return 9 break a case 0 xd7 return 16 break b case 0 xee return 12 break c case 0 xed retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 记单词打卡活动方案策划
- 建筑防水套管加固方案设计
- 仿古木台阶栏杆施工方案
- 商业咨询公司项目方案
- 电商工作总结晚会
- 郑州齿轮传动方案咨询
- 酒店建筑防水补漏方案设计
- 咨询管理薪酬方案模板
- 药品安全培训情况报告课件
- 企业品质管理咨询方案
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 2025年综合基础知识题库(含答案)
- 中国文化概论-第6章-中国语言文字分解课件
- 水文学考试复习题和答案
- 法院民事调解协议书
- (完整)脑出血护理查房ppt
- 最新2022年全市住院医师规范化培训实践技能考核人员及时间安排
- 化工总控工项目6任务28精馏操作专项训练课件
- 委托办理原产地证书授权书
- 常用焊条焊丝质量证明书
- ZK1(KYN31-12)型铠装移开式互内交流金属封闭开关柜
评论
0/150
提交评论