键盘数码显示综合实验
时间:2025-07-08
时间:2025-07-08
一、 实验目的
通过实验,掌握单片机在输入输出口线不够用时,怎样扩展接口的方法来支持8位LED 显示和16键盘集成实现。熟悉8155芯片性能;掌握其编程方法。掌握键盘子程序 调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开 发、软件编程必须掌握的方法。
二、 实验内容
(1)编写并调试一个键盘实验子程序;
(2)用子程序调用方法,分别调用键盘子程序和显示子程序,将按一个键的键值(0-F)在数码管上显示出来。 实验框图
三、 实验步骤
打开Keil程序,执行菜单命令“Project”->“New Project”创建“键盘数码管显示综 合实验”项目,并选择单片机型号为AT89C52.BUS。
执行菜单命令“File” -> “New”创建文件,输入源程序,保存为“键盘数码管显示综 合实验.A51或键盘数码管显示综合实验.c”。在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“键盘数码管显示综合实 验.A51或键盘数码管显示综合实验.c”添加到项目中。
执行菜单命令“Project” -> “Options for Target ‘Target 1’”,在弹出的对话框中 选择“Output”选项卡,选中“Greate HEX File”。
执行菜单命令“Project” -> “Build Target”,编译源程序。如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“键盘数码管显示综合实验.HEX”文件。
在proteus仿真平台上建立参考图系统,并将程序上载到虚拟平台上运行。
四、 实验调试及结果
逐一按下按键,显示结果如下:
五、 实验分析
本实验利用可编程的8255并行接口实现与扫描式矩阵键盘及数码管的连接,并显示按键
的值。扫描键盘输入不同的键值,并将扫描结果送数码管显示。执行过程如下:利用查询方式,识别是否有键按下。程序执行过程如下识别是否有键按下,方法是使PA0一PA3输出为全0,读C口值 (行值),其中只要有一位为0,就说明有键按下 。在检测到有键按下后,延迟一段时间,根据找到的键号,转去执行七段数码显示管显示程序,这时七段数码显示管就显示与该键
相同的数值。
六、 实验思考与总结
通过本次多功能数字钟设计实验,真正的感受到了理论联系实际的重要性,以及这之间莫大区别,到最后看着自己的结果心里还是感到很欣慰的。
首先摆在我们面前的是要先弄懂所要设计实验的原理,于是最开始我在网上查找了大量的相关的资料,再结合课本的内容以及充分利用了网络资源,在仔细分析了本次实验所要达到的目的之后,我初步确定了思路。接下来的是进一步的分析其原理, 最后则编写出本次实验的程序。
在这次设计实验过程中,设计键盘程序,我留下了很深的印象。由于以前都没有接触过,开始编写程序时很费力,但到后来就好了。在每次的实验中,遇到问题,最好的办法就是问别人,因为每个人掌握情况不一样,不可能做到处处都懂,发挥群众的力量,复杂的事情就会变得很简单。这一点我深有体会,在很多时候,我遇到的困难或许别人之前就已遇到,向他们请教远比自己在那冥思苦想来得快。
经过这些天的学习我深刻的体会到实际与理论有很大的区别。在我们学习的过程中不仅考验了我们对知识的吸收和掌握,而且也考验了我们的细心和耐心。特别是在编写程序过程中,我深有体会。所以,这次的实验不仅仅学习了程序的编写,还掌握了Proteus的一些功能,同时还提高了我们的专业素质。 总之,进过两次的实验心得体会,我总结了以下几条:首先,多动手写程序、调试,只有自己亲自动手编写了,才会让你印象深刻,收益更大。其次, 善于向别人学习,在你解决一个问题后,你可能会发现别人有更简便的方法解决,这时就是你向别人学习的时候。
通过作这个单片机实验,我总结了一下几点收获:
1、 加深了对51单片机的理解,不仅仅是以前那样只能点亮发光二极管。 2、 感受到了完成一件程序的乐趣,并且知道了实践精神。 3、 理解了51单片机的强大和我们知识的肤浅。
4、 学到了许多原来C语言中没有的东西,如:控制按键的程序
While(P0_5==1) { Time++;
While(P0_5==1); }
这样可以不加防按键抖动的延时程序,更精确时间。
5、进一步充分利用中断时刻都在运行,让时间在中断中显示,就不会出现进入死循环后而无法显示时间的情况,而且还可以快速的反映除时间的变化。
附录:实验程序 #include<reg51.h> #include <absacc.h>
#define COMA XBYTE[0x7CFF] #define COMB XBYTE[0x7DFF] #define COMC XBYTE[0x7EFF] #define COMCR XBYTE[0x7FFF] tab[]={0x01,0x02,0x04,0x08,0x10,0x20};
tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void init8255a(void) { }
void delay(unsigned int m) { }
void main() {
unsigned char i,codeC,k; unsigned int j=0,i; for (i=m;i>0;i--)
for(j=0;j<1200;j++); COMCR=0x89;
unsigned char key; init8255a(); while(1) {
for(i=0;i<6;i++)
{
COMB = tab[i];
codeC =COMC; if (codeC!=0xff) { switch(codeC) }
} { case 0xfe:{key=i*4+0; break;} case 0x …… 此处隐藏:644字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:中考专题宾语从句