单片机课程设计报告---数码管显示4X4矩阵键盘按键号.docVIP

单片机课程设计报告---数码管显示4X4矩阵键盘按键号.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1004402121计科本101 黄远利 PAGE PAGE 1 课程设计报告书 设计名称: 单片机原理与应用 题 目: 数码管显示4X4矩阵键盘按键号 专 业: 计算机科学与技术 日 期: 2012 年 6 月 11日 一.设计目的: 1) 了解单片机系统实现LED动态显示的原理及方法; 2) 较为详细了解8051芯片的性能; 3) 能够了解到单片机系统的基本原理,了解单片机控制原理; 4) 掌握AT89C51程序控制方法; 5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码 6) 掌握4X4矩阵式键盘程序识别原理; 7) 掌握4X4矩阵式键盘的设计方法; 8) 学习键盘的扫描方式和应用程序设计; 9) 培养根据课题需要选学参考书籍、查阅手册和文献资料的能力; 10) 能够按课程设计的要求编写课程设计报告,能够正确反映设计和实验成果。 二.设计要求与主要内容: 设计要求: 单片机的P1口P1.0~P1.7连接4X4矩阵键盘,P0口控制一只P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 二号按下的时候,数码管显示“2”,14号键按下时,数码管显示“E 主要内容: 1)4×4矩阵键盘程序识别原理 。 2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线都连接到AT89C51中,通过按键K0~K16,来在数码管显示不同的值。 实验步骤: 1) 启动keiuvision3 2)新建工程命名为单片机的C语言设计与应用 3)新建文件并另存为C51c.c 4)在SourceGroop1导入文件 5)编写代码,并生成C语言设计与应用.hex文件。6) 在Proteus中设计电路图 7) 将keil与Proteus联机调试,记下实验记录,得出实验结果。 初始化三.设计程序原理:(包含仿真图和流程图) 初始化 1)主程序流程图 是否有按键按下 是否有按键按下 请按键标识 请按键标识 键值处理 键值处理 显示所有按键 显示所有按键 2)程序流程图 结束,返回 结束,返回 开始 开始 若有按键按下,显示键盘号 若有按键按下,显示键盘号 初始化 初始化 扫描键盘第一行 扫描键盘第一行 若无按键按下 若无按键按下 扫描键盘第二行 扫描键盘第二行 若无按键按下 若无按键按下 扫描键盘第三行: 扫描键盘第三行 若无按键按下 若无按键按下 扫描键第四行 扫描键第四行 若无按键按下 若无按键按下 结束,返回 结束,返回 3)仿真图 四.程序代码 #includereg51.h #define uchar unsigned char #define uint unsigned int //段码 ucharcode DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00}; sbit BEEP=P3^7; //上次按键和当前按键的序号,该矩阵中序号范围 0~15,16 表示无按键 uchar Pre_KeyNo=16,KeyNo=16; //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0;i120;i++); } //矩阵键盘扫描 void Keys_Scan() { uchar Tmp; P1=0x0f; //高 4 位置 0,放入 4 行 DelayMS(1); Tmp=P1^0x0f; //按键后 0f 变成 0000XXXX,X 中一个为 0,3 个仍为1,通过异或把3个1变为 0,唯一的0变为1 switch(Tmp) //判断按键发生于 0~3 列的哪一列 { case 1: KeyNo=0;break; case 2: KeyNo=1;break; case 4: KeyNo=2;break; case 8: KeyNo=3;break; default:KeyNo=16; //无键按下 } P1=0xf0; //低 4 位置 0,放入 4 列 DelayMS(1); Tmp=P14^0x0f; //按键后 f0 变成 XXXX0000,X 中有 1 个为 0,三个仍为 1;高4位转移到低 4 位并异或得到改变的值 switch(Tm

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档