8按键控制单数码管显示
单片机存储器扩展设计单片机存储器扩展设计 题目名称 8 按键控制单数码管显示 学院化学化工学院 专业过程装备与控制工程 班级 12 级过控(2)班 姓名韩勇 学号 指导老师杜俊 完成日期 2014 年 11 月 21 号 8 按键控制单数码管显示 (韩勇 12 级过控 2 班 ) 摘要:摘要: 利用单片机实现 8 按键控制数码管显示。 单片机是所有微处理机中性价比最高的一 种,随着种类的不断全面功能不断完善, 其应用领域也迅速扩大。单片机在智能仪表、实时 控制机电一体化、办公机械、家用电器等方面都有相当的应用领域。 当前 8 位单片机主要用 于工业控制,如温度、压力、流量、计量和机械加工的测量和控制场合;高效能的16 位单 片机(如 MCS-96、MK-68200)可用在更复杂的计算机网络。可以说,微机测控技术的应用 已渗透国民经济的各个部门,微机测控技术的应用是产品提高档次和推陈出新的有效途径。 关键字:关键字:按键,显示。 一、一、 设计任务设计任务 8 按键控制器:有 8 个按键(k1-k8) ,当按键未按下去时,输出为“0” ,当按下 k1 时,数码管显示 1,按下 k2 时,数码管显示 2,依次直至按下 k8 时,数码管 显示 8,循环结束;如果同时有2 个或 2 个以上的按键按下去时,则数码管不作 任何处理,保持原显示状态。 二、二、 硬件设计硬件设计 1. 1.显示部分电路显示部分电路 显示采用动态扫描方式,显示器件选用共阴极数码管,它的断码段通过电阻与 p0 口相连,受 p0 口低七位管脚控制,由 p0 口输出要显示的内容,其中 p0 口要 接上拉电阻 RP1 起限制电流的保护作用。 2. 2.按键部分电路按键部分电路 8 个独立按键 k1-k8 与 p2 口直接相接,每个按键占用一根 I/O 端线,可以控制 p2 口的 8 个管脚输入的电平高低,按下键时,相应管脚输入低电平,不按键时, 输入高电平, 因此可以直接通过观察相应的端口的电平高低来判断是否有按键按 下。 3. 3.工作原理工作原理 单片机的 p2 口为位选控制端,且低电平有效,当按键按下后,其输出低电平, 信号经 p2 口传入单片机的 CPU 中,CPU 将信号传入 p0 口,由 p0 口将信号输出 并显示在数码管上,其中按键编号与数码管显示的数字一致,当按下 k1 时,数 码管显示 1,按下 k2 时,数码管显示 2,依次直至按下 k8 时,数码管显示 8。 设计电路图如下图所示: 三、三、 软件设计软件设计 1.1.按键判断程序按键判断程序 对于每一个按键,当进入程序后, 根据显示部分所记录的当前显示位置信息可判 断出是哪一个键按下,例如当前数码管显示 1,则说明是按键 k1 按下。程序流 程图如下图所示: 1 开 始 N 按键是否按下 Y 延时 10ms,去抖动影响 Y N 按键是否按下 Y N 是否只按下一个键 Y 确定哪个按键按下,得到键盘码 运用 C 指令, 向七段数码管选出相应的字型码根据键盘码, 四、四、 测试测试 1.在 proteus 软件中,按图搭好电路; 2.在 keil 软件中编辑程序,进行编译,得到.HEX 格式文件; 3.将得到的.HEX 格式文件在 proteus 中导入到 80C51 芯片中; 4.在 proteus 中运行仿真,观察仿真结果; 5.Proteus 中结果正常后, 用实际硬件搭接并调试电路,通过编程器将.HEX 格式 文件下载到 80C51 中,通电验证实验结果; 6.通过验证实现了 8 按键控制单数码管的识别和显示。 五、心得体会五、心得体会 这个系统是以单片机 80c51 芯片为核心部件, 实现了 8 按键控制单数码管的 识别和显示。通过这段时间的设计,从这次的课程设计中,我真正的意识到,在 以后的学习中要理论联系实际,把我们所学的理论知识用到实际当中,学习单机 片机更是如此, 程序只有在经常的写与读的过程中才能提高,是我对单片机有了 新的认识:首先,在设计程序之前,务必要对所用单片机的内部结构有一个系统 的了解,知道该单片机片内有哪些资源;然后,设计程序采用什么编程语言并不 是非常重要,关键要有一个清晰的思路和一个完整的软件流程图;其次,在设计 程序时,不能想一次就将整个程序设计好,“反复修改,不断改进“是程序设计的必 经之路;最后,要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功 能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便, 这是我在这次课程设计中的最大收获。 五、五、 参考文献参考文献 [1]丁明亮.51 单片机应用设计与仿真.北京:北京航空航天大学出版社,2009. [2]李学礼.基于 proteus 的 8051 单片机实例教程.北京: 电子工业出版社, 2008. [3]贾好来.MCS-51 单片机原理及应用.北京:机械工业出版社,2007. 1 七、附录七、附录 设计程序: #include typedef unsigned char uchar; typedef unsigned int uint; uchar table[10]={0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f}; void delay(uint a) { } void main() { P0=table[0]; while(1) { switch(P2) { case 0 xfe:P0=table[1];break; case 0 xfd:P0=table[2];break; uint i,j; for(i=a;i0;i--) for(j=110;j0;j--); } } } 1 case 0 xfb:P0=table[3];break; case 0 xf7:P0=table[4];break; case 0 xef:P0=table[5];break; case 0 xdf:P0=table[6];break; case 0 xbf:P0=table[7];break; case 0 x7f:P0=table[8];break; case 0 xff:break; default:;break;