实验项目名称: 键盘、数码管显示综合实验
实验室(中心): 电 子 实 验 室
实验完成时间: 09 年11 月 5 日 1
教师评阅意见: 签名: 年 月 日 实验成绩:
一.实验目的与要求
通过实验,掌握单片机在输入输出口线不够用时,怎样扩展接口的方法来支持8位LED
显示和16键盘集成实现。熟悉8155、8279等芯片性能;掌握其编程方法。掌握键盘子程序 调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开 发、软件编程必须掌握的方法。
二.实验原理及实验线路
(1)通过8155芯片的扩展功能,建立描述线与数据线同步功能,如图
三.实验内容
① 编写并调试出一个键盘实验子程序;
② 用子程序调用方法,分别调用键盘子程序和显示子程序,将按一个键的键值(0- F),在数码管上显示出来。
四.实验器材
2
表2.4.5(1):以8155为扩展方式的器件 80C51.BUS CRYSTAL PHYC0402NP022P 7404 7SEG-MPX6-CC-BLUE RESPACK-8 8155 HITEMP10U50V BUTTON MINRES10K
五、实验程序流程图
六.实验步骤
1)仿真实验过程:
打开Keil程序,执行菜单命令“Project”“New Project”创建“键盘数码管显示综 合实验”项目,并选择单片机型号为AT89C52.BUS。
执行菜单命令“File”“New”创建文件,输入源程序,保存为“键盘数码管显示综 合实验.A51或键盘数码管显示综合实验.c”。在“Project”栏的File项目管理窗口中右击
文件组,选择“Add Files to Group ‘Source Group1’”将源程序“键盘数码管显示综合实 验.A51或键盘数码管显示综合实验.c”添加到项目中。
3
执行菜单命令“Project”“Options for Target ‘Target 1’”,在弹出的对话框中 选择“Output”选项卡,选中“Greate HEX File”。
执行菜单命令“Project”“Build Target”,编译源程序。如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“键盘数码管显示综合实验.HEX”文件。 在proteus仿真平台上建立如图2.5.5(1)或图2.5.5(2)参考图系统,并将程序上载到虚 拟芯片上调试及运行。
七、实验C语言程序
#include #define COM8155 XBYTE[0X7FF8] #define PA8155 XBYTE[0X7FF9] #define PB8155 XBYTE[0X7FFA] Unsigned char table[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned int sta;//储存端口的状态变量 unsigned char count;//按键值变量 void delay(void) //延时10ms { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void main(void) { while(1) { count=-1; //按键的初始值 PB8155=0XFE;//设置扫描的初值 COM8155=0;//设置8155的所有端口为输入 sta=PB8155;//读取8155PB端口的状态。 if(sta==0xEE) //---------判断‘0’键按下 { delay(); //按键去除抖动 if(sta==0xEE) count=count+1; } if(sta==0xDE) //-----------判断‘1’键按下 { delay();//按键去除抖动 if(sta==0xDE) count=count+2; } if(sta==0xBE) //----------判断‘2’键按下 { delay();//按键去除抖动 4 COM8155=0X02;//设置PB8155端口为输出,其他8155端口为输入 if(sta==0xbE) count=count+3; } if(sta==0x7E) //---------判断‘3’键按下 { delay();//按键去除抖动 if(sta==0x7E) count=count+4; } COM8155=0X02; PB8155=0XFD; COM8155=0; sta=PB8155; if(sta==0xED) //--------- if(sta==0xDD) //---------- {delay();if(sta==0xDD)count=count+6;} if(sta==0xBD) //--------- {delay();if(sta==0xbD)count=count+7;} if(sta==0x7D) //-------- {delay();if(sta==0x7D)count=count+8;} COM8155=0X02; PB8155=0XFB; COM8155=0; sta=PB8155; if(sta==0xEB) //--------- if(sta==0xDB) //---------- {delay();if(sta==0xDB)count=count+10;} if(sta==0xBB) //--------- {delay();if(sta==0xbB)count=count+11;} if(sta==0x7B) //-------- {delay();if(sta==0x7B)count=count+12;} COM8155=0X02; PB8155=0XF7; COM8155=0; sta=PB8155; if(sta==0xE7) //--------- if(sta==0xD7) //---------- {delay();if(sta==0xD7)count=count+14;} if(sta==0xB7) //--------- {delay();if(sta==0xb7)count=count+15;} if(sta==0x77) //-------- {delay();if(sta==0x77)count=count+16;} COM8155=0x01; if(count!=-1 ) {PA8155=table[count]; 5 {delay();if(sta==0xED)count=count+5;} {delay();if(sta==0xEB)count=count+9;} {delay();if(sta==0xE7)count=count+13;} } } } 七、实验总结及心得 1、对8155扩展芯片还是头一次使用,以前只是在书上学习过其原理,在真正用起来的时候发觉还是有很多不知道的东西,尤其是对于端口地址的知识和硬件的设计。如果出了错误,就没有办法对端口进行操作。 2、虽然在输入输出上没有直接在单片机的端口上操作起来容易,但是只要能摸清楚8155的原理,不管是设计软件还是硬件,对于一般的电路都是很简单的。 3、总结几点我遇到的经验:首先掌握仿真软件的使用方式是必须的,就算是没有一开始就了解全部,在使用时遇到问题要想办法解决,或者是问老师,或者查资料;其次,要懂得芯片的工作原理;还有就是在了解硬件的时候要注意不要把网络的标号弄错了,否则也 不是很容易检查错误;软件设计的时候也要有一个总体的思路,在设计软件以前,就应该想好自己想用什么样的算法来实现目的。实验过程中的语法和逻辑问题也可以一一修改,一步一步来,肯定没有问题。 6 因篇幅问题不能全部显示,请点此查看更多更全内容