20122593李九生独立按键检测实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
独立按键检测实验
20122593李九生
实验目的:
1. 熟悉51系列单片机独立按键的工作原理。
2. 掌握与外部中断引脚INT0和INT1相连的独立按键
的编程方法。
实验原理:独立键盘就是各按键相互独立,每个按键各接一根I/O接口线,每根I/O接口线上的按键都不会影响其他的I/O接口线。因此,通过检测I/O接口线的电平状态就可以很容易地判断出哪个按键被按下了。
独立键盘的结构方式有查询和中断两种方式。查询方式在工作时通过执行相应的查询程序来判断有无键按下,是哪一个按下。中断方式处理时,当有任意键按下时则请求中断,在中断服务程序上通过执行判断程序,判断是哪一个键按下。
实验内容:
1.编写一程序,与P1口相连的独立按键控制P2口流
水灯。
2.编写一程序,与INT0和INT1引脚相连的独立按键
控制P2口流水灯。
实验思考题:如何实现按键按下,操作指令只执行一次?答:就是在按键检测完之后,在后面加一条while(1)无限循环语句,来检测按键是按下就好。
#include
#include
sbit key1=P1^0;
sbit key2=P1^1;
void delay(unsigned int i)
{
unsigned int j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
P1=0xff;
P2=0x01;
while(1)
{
if(P1!=0xff)
delay(3);
if(P1!=0xff)
if(key1==0)
{
P2=_crol_(P2,1);
delay(200);
}
while(key1==0);
if(key2==0)
{
P2=_cror_(P2,1);
delay(100);
}
}
}
#include
sbit key1=P3^2;
sbit key2=P3^3;
void delay(unsigned int i)
{
unsigned int j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void main()
{
P2=0x01;
IT0 = 0;
IT1 = 0;
IE = 0x85;
while(1);
}
void Ex_Interrupt_0() interrupt 0 {
P2=_crol_(P2,1);
delay(200);
}
void EX_INT1() interrupt 2
{
P2=_cror_(P2,1);
delay(100);
}