键盘及LED显示实验.docx
- 文档编号:8136572
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:132.04KB
键盘及LED显示实验.docx
《键盘及LED显示实验.docx》由会员分享,可在线阅读,更多相关《键盘及LED显示实验.docx(15页珍藏版)》请在冰豆网上搜索。
键盘及LED显示实验
实验三键盘及LED显示实验
一、实验内容
利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED显示器显示出来。
二、实验目的及要求
(一)实验目的
通过该综合性实验,使学生掌握8255扩展键盘和显示器的接口方法及C51语言的编程方法,进一步掌握键盘扫描和LED显示器的工作原理;培养学生一定的动手能力。
(二)实验要求
1.学生在实验课前必须认真预习教科书与指导书中的相关内容,绘制流程图,编写C51语言源程序,为实验做好充分准备。
2.该实验要求学生综合利用前期课程及本门课程中所学的相关知识点,充分发挥自己的个性及创造力,独立操作完成实验内容,并写出实验报告。
三、实验条件及要求
计算机,C51语言编辑、调试仿真软件及实验箱50台套。
四、实验相关知识点
1.C51编程、调试。
2.扩展8255芯片的原理及应用。
3.键盘扫描原理及应用。
4.LED显示器原理及应用。
5.外部中断的应用。
五、实验说明
本实验仪提供了8位8段LED显示器,学生可选用任一位LED显示器,只要按地址输出相应的数据,就可以显示所需数码。
显示字形
0
1
2
3
4
5
6
7
8
9
A
b
C
d
E
F
段码
0xfc
0x60
0xda
0xf2
0x66
0xb6
0xbe
0xe0
0xfe
0xf6
0xee
0x3e
0x9c
0x7a
0x9e
0x8e
六、实验原理图
七、连线说明
F4区:
CS、A0、A1
——
A3区:
CS1、A0、A1
B6区:
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.主程序流程图
2.外中断服务程序流程图
外部中断0外部中断1
定时器0中断程序,用于消抖动:
3.LED显示程序流程图
九、C51语言参考源程序
#include"reg52.h"
unsignedcharKeyResult;//存放键值
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,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x0};
sbitbLine0=P3^2;
sbitbLine1=P3^3;
//延时1ms
voidDelay1ms()
{
unsignedchari;
i=0;
while(--i);
}
//显示
voidDisplay()
{
unsignedchari=0x7f;
unsignedcharj;
for(j=0;j<8;j++)
{
PA_8255=i;//扫描
PB_8255=SEG_TAB[buffer[j]];//段数据
i=i/2+0x80;
Delay1ms();
}
}
//更新显示缓冲区数据
voidRefurbishData()
{
chari;
for(i=7;i>0;i--)
buffer[i]=buffer[i-1];
buffer[0]=KeyResult;
}
voidInt0Int()interrupt0
{
unsignedchari=0x80;
unsignedcharKeyResult0=0x0;
EX0=0;//关外部中断0
P_8255=0x89;//PC口输入
bLine0=0;//P3.2作行输出
while(i)
{
if((PC_8255&i)==0)
break;
KeyResult0++;
i>>=1;
}
P_8255=0x80;//8255的PA、PB、PC口全作输出口
PC_8255=0;
bLine0=1;
if(i)
{
TH0=60;//定时中断计数器初值
TL0=176;//定时50ms
TR0=1;
KeyResult=KeyResult0;
}
IE0=0;//清除中断
EX0=1;//开外部中断0
}
voidInt1Int()interrupt2
{
unsignedchari=0x80;
unsignedcharKeyResult0=8;
EX1=0;//关外部中断0
P_8255=0x89;//PC口输入
bLine1=0;//P3.2作行输出
while(i)
{
if((PC_8255&i)==0)
break;
KeyResult0++;
i>>=1;
}
P_8255=0x80;//8255的PA、PB、PC口全作输出口
PC_8255=0;
bLine1=1;
if(i)
{
TH0=60;//定时中断计数器初值
TL0=176;//定时50ms
TR0=1;
KeyResult=KeyResult0;
}
IE1=0;//清除中断
EX1=1;//开外部中断0
}
//50ms中断服务程序
voidINT_Timer0(void)interrupt1
{
if(((KeyResult<8)&&!
bLine0)||
((KeyResult>=8)&&!
bLine1))
{
bKey=1;//有键按下,键值在KeyResult中
}
TR0=0;
}
voidmain()
{
chari;
bKey=0;//没有键按下
TMOD=1;//定时器0:
方式一
P_8255=0x80;//8255的PA、PB、PC口全作输出口
PC_8255=0x0;
ET0=1;//开定时器0中断
EX0=1;//开外部中断0
EX1=1;//开外部中断1
IT0=1;//边沿触发
IT1=1;//边沿触发
EA=1;//允许中断
for(i=0;i<8;i++)
buffer[i]=0x10;
//TR0=1;//开定时器T0
//bRefurbish=1;
while
(1)
{
if(bKey)
{
bKey=0;
RefurbishData();
}
Display();//调用显示
}
}
十、实验实施步骤
1.仔细阅读实验内容及要求,编写C51源程序。
2.上机编辑、仿真调试源程序。
3.按要求接线。
4.在线调试源程序,观查运行结果。
十一、实验心得
此次实验要求我们利用8255可编程并行接口控制键盘及显示器,当有按键按下时向单片机发送外部中断请求(INT0,INT1),单片机扫描键盘,并把按键输入的键码一位LED显示器显示出来。
通过实验我验证了这一实验内容,在按键的控制下实现0~15显示在LED显示器。
学到了新的知识,掌握了8255扩展键盘和显示器的接口方法,丰富了我们的单片机知识,锻炼我们的动手实践能力。
实验能让我们检验和巩固学到的理论知识,不断加深我们对知识的记忆。
如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘 LED 显示 实验