51单片机独立按键程序查询法和外部中断两种

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*函数名: IntConfiguration()
*函数功能:设置外部中断
*输入:无
*输出:无
*******************************************************************************/
void IntConfiguration()
{
*输入:无
*输出:无
*******************************************************************************/
void main(void)
{
unsigned int i,j;
j=0xfe; //1111_1110
while(1)
*函数名: Delay(unsigned int n)
*函数功能:延时
*输入: n
*输出:无
*******************************************************************************/
void Delay(unsigned int n) //延时50us误差0us
//1111111111111111111111111111111111111111111111111111111111111111111
//1111111111111111111111111111111111111111111111111111111111111111111
/*******************************************************************************
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;
EA=1;//打开总中断
}
/*******************************************************************************
*函数名: Delay10ms
*函数功能:延时函数,延时10ms
*输入:无
*输出:无
*******************************************************************************/
void Delay10ms(void) //误差0us
#define GPIO_LED P2
sbit K1=P3^1;
void Delay10ms( ); //延时10ms
/*******************************************************************************
*函数名: main
*函数功能:主函数
if(K3==0)
KeyValue=1;
}
/*******************************************************************************
*函数名: Int1() interrupt 2
*函数功能:外部中断1的中断函数
*输入:无
*输出:无
/*********************************************************************************
*实验名:外部中断实验
*注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先
*取下来。
*实验效果:K3按下LED左循环,K4按下LED变右循环
//以下程序都是在VC++6.0上调试运行过的程序,没有错误,没有警告。
//单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。
//程序在关键的位置添加了注释。
//用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推
*******************************************************************************/
void Int1() interrupt 2//外部中断1的中断函数
{
Delay(1);//延时消抖
if(K4==0)
KeyValue=0;
}
sbit K4=P3^3;
void IntConfiguration();
void Delay(unsigned int n);
unsigned char KeyValue=0;
/*******************************************************************************
*函数名: main
*函数功能:主函数
*输入:无
*输出:无
*******************************************************************************/
void main(void)
{
GPIO_LED=0Xfe;
IntConfiguration();
{
unsigned char a,b;
for(;n>0;n--)
{
for(b=1;b>0;b--)
for(a=22;a>0;a--);
}
}
/*******************************************************************************
*函数名: Int0()interrupt 0
while百度文库1)
{
if(KeyValue)
GPIO_LED=_crol_(GPIO_LED,1);
else
GPIO_LED=_cror_(GPIO_LED,1);
Delay(2000);
}
}
/*******************************************************************************
*
*********************************************************************************/
#include<reg51.h>
#include<intrins.h>
#define GPIO_LEDP2
//外部中断的IO
sbit K3=P3^2;
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
//222222222222222222222222222222222222222222222222222
//222222222222222222222222222222222222222222222222222
*函数功能:外部中断0的中断函数
*输入:无
*输出:无
*******************************************************************************/
void Int0()interrupt 0//外部中断0的中断函数
{
Delay(1);//延时消抖
{
GPIO_LED=j;
if(K1==0)//检测按键K1是否按下
{
Delay10ms();//消除抖动
if(K1==0)
{
j=_cror_(j,1);
while((i<50)&&(K1==0))//检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
}
}
}
/*******************************************************************************
*实验名:左右流水灯实验
*使用的IO: LED使用P2,键盘使用P3.1
*实验效果:按下K1键,
*注意:
*******************************************************************************/
#include<reg51.h>
#include<intrins.h>
相关文档
最新文档