资源描述:
《键盘及LED显示实验.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验三键盘及LED显示实验一、实验内容利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED显示器显示出来。二、实验目的及要求(一)实验目的通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。(二)实验要求1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,
2、充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。三、实验条件及要求计算机,C51语言编辑、调试仿真软件及实验箱50台套。四、实验相关知识点1.C51编程、调试。2.扩展8255芯片的原理及应用。3.键盘扫描原理及应用。4.LED显示器原理及应用。5.外部中断的应用。五、实验说明本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。显示字形0123456789AbCdEF段码0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf60xee0x3e0x9c0x7a0x9e0x8e
3、六、实验原理图七、连线说明F4区:CS、A0、A1——A3区:CS1、A0、A1B6区:JP56(PA口)——F4区:JP41(C)B6区:JP53(PB口)——F4区:JP42(B)B6区:JP52(PC口)——F4区:JP47(A)A3区:JP51——F4区:JP92(D)A3区:P1.6、P1.7——A3区:INT0、INT1注:F4的D无法与INT0(P3.2)、INT1(P3.3)直接连接,所以使用P1口桥接。八、实验参考流程图1.主程序流程图Y按键标志=1开始0->按键标志8255初始化(PA,PB,PC口作输出)0->8255PC口定时器0:方式一允许定时器0
4、中断允许外部中断0(行线0)允许外部中断1(行线1)外部中断0、1边沿触发允许中断0->按键标志显示缓冲区左移一次键值->最低位显示缓冲区调用显示N0x10填充显示缓冲区(消隐)2.外中断服务程序流程图Y清外部中断0允许外部中断0有键按下开始8255PC口改为输入关外部中断00->P3.2(键的行线0)读8255PC口转化为0..7的键值->变量08255的PC口改为输出1->P3.20->8255PC口设置定时器0初值(50ms定时)开定时器0键值变量=变量0N中断返回外部中断0外部中断1Y清外部中断1允许外部中断1有键按下开始8255PC口改为输入关外部中断10->P3
5、.3(键的行线1)读8255PC口转化为8..F的键值->变量08255的PC口改为输出1->P3.30->8255PC口设置定时器0初值(50ms定时)开定时器0键值变量=变量0N中断返回定时器0中断程序,用于消抖动:Y1->按键标志P3.2=0开始N中断返回键值变量<8P3.3=0键值变量>=8NYNNYY3.LED显示程序流程图7FH->数码块选择变量8->计数器数码块选择变量->8255PA口显示缓冲区中对应数据转化为段码段码->8255PB口数码块选择变量循环右移一次延时1ms开始计数器–1=0返回YN九、C51语言参考源程序#include"reg52.h"un
6、signedcharKeyResult;//存放键值unsignedcharbuffer[8];//显示缓冲区bitbKey;//是否有键按下xdataunsignedcharP_8255_at_0xf003;//8255的控制口xdataunsignedcharPA_8255_at_0xf000;//8255的PA口xdataunsignedcharPB_8255_at_0xf001;//8255的PB口xdataunsignedcharPC_8255_at_0xf002;//8255的PC口codeunsignedcharSEG_TAB[]={//段码0xfc,0x60
7、,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};sbitbLine0=P3^2;sbitbLine1=P3^3;//延时1msvoidDelay1ms(){unsignedchari;i=0;while(--i);}//显示voidDisplay(){unsignedchari=0x7f;unsignedcharj;for(j=0;j<8;j++){PA_8255=i;//扫描PB_8255=SEG_TAB[bu