时间:2017-07-04 来源:互联网 浏览量:
今天给大家带来怎麽进行单片机键盘接口实验,进行单片机键盘接口实验的方法,让您轻松解决问题。
实验六键盘接口实验
一、实验目的
1.掌握keilC51软件与PROTEUS软件联合仿真调试的方法;
2.掌握单片机的键盘接口电路;
3.掌握单片机键盘扫描原理
4.掌握单片机的去抖原理及处理办法
二、实验仪器与设备
1.微机1台 2. keilC51集成开发环境 3.Proteus仿真软件
三、实验内容
1、用PROTEUS设计一矩阵键盘接口电路。要求利用P1接口接一4*4矩阵键盘。串行口通过一74LS164接一共阴极数码管。
2.用线反转法和行扫描法分别编写矩阵键盘识别程序,并将按键的键值0~F通过串行口输出,显示在数码管上。
3.将P1口矩阵键盘改为8个独立按键,重新编写识别和显示程序。
四、实验原理及步骤
1.用PROTEUS设计键盘接口电路;
2.在KEIL C51中编写键盘识别程序,编译通过后,与PROTEUS联合调试;
3.按动任意键观察键值是否能正确显示。
五、电路设计及调试
(1)实验电路
(2)程序设计与调试
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code temble[]={0xfc, 0x60,0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
sbit BEEP=P3^6;
uchar Pre_KeyNo=16,KeyNo=16;
void delay(uint z)
{
uchar t;
while(z--)for(t=0;t<120;t++);
}
void Keys_Scan()
{
uchar Tmp;
P1=0x0f;
delay(1);
Tmp=P1^0x0f;
switch(Tmp)
{
case 1: KeyNo=0;break;
case 2: KeyNo=1;break;
case 4: KeyNo=2;break;
case 8: KeyNo=3;break;
default:KeyNo=16;
}
P1=0xf0;
delay(1);
Tmp=P1>>4^0x0f;
switch(Tmp)
{
case 1: KeyNo+=0;break;
case 2: KeyNo+=4;break;
case 4: KeyNo+=8;break;
case 8: KeyNo+=12;
}
}
void Beep()
{
uchar i;
for(i=0;i<100;i++)
{
delay(1);
BEEP=~BEEP;
}
BEEP=0;
}
void Send_data(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
void main()
{
BEEP=0;
SCON=0x00;
TI=1;
while(1)
{
P1=0xf0;
if(P1!=0xf0) Keys_Scan();
if(Pre_KeyNo!=KeyNo)
{
Send_data(temble[KeyNo]);
Beep();
Pre_KeyNo=KeyNo;
}
delay(100);
}
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code number[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code temble[]={0xfc, 0x60,0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0, 0xfe, 0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
sbit BEEP=P3^6;
void delay(uint z)
{
uchar t;
while(z--)for(t=0;t<100;t++);
}
void Beep()
{
uchar i;
for(i=0;i<100;i++)
{
delay(1);
BEEP=~BEEP;
}
BEEP=0;
}
void Send_data(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
void main()
{
uchar temp,i,num,Key;
BEEP=0;
SCON=0x00;
TI=1;
while(1)
{
P1=0x00;
if(P1!=0x00)
{
delay(500);
if(P1!=0x00)
{
temp=P1;
P1=0xff;
Key=temp|P1;
for(i=0;i<8;i++)
if(Key==number[i])
{
Beep();
num=i;
break;
}
Send_data(temble[num]);
delay(100);
}
}
}
}
(3)实验中遇到的问题:
1.编写的程序不能延迟,延迟时间过短,将时间调整后即可
2.延迟函数要放于适当位置
六、实验说明
1.矩阵键盘识别一般包裹以下内容:
(1)判断有无键按下
(2)键盘扫描取得闭合键的行、列号
(3)用计算法或者查表法取得键值
(4)判断闭合键是否释放,如果没有释放则继续等待
(5)间将闭合键键值保存,同时转去执行该闭合键的功能。
七、实验总结
1.掌握了proteus基本的操作方法.
2.做实验时要仔细,要按步骤来,,避免人为错误。
3.做实验要独立完成.
八、对实验课的建议
做实验应多给学生时间自主练习,让同学们对于实验有更深刻的理解,从实践中找出问题,解决问题.
以上就是怎麽进行单片机键盘接口实验,进行单片机键盘接口实验的方法教程,希望本文中能帮您解决问题。