|
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k=P2^2; //定义P22口是k
sbit k1=P3^0; //定义P30口是k1
sbit k2=P3^1; //定义P31口是k2
sbit k3=P3^2; //定义P32口是k3
sbit k4=P3^3; //定义P33口是k4
//sbit led1=P1^0; //定义P20口是led
//sbit led2=P1^1; //定义P20口是led
//sbit led3=P1^2; //定义P20口是led
//sbit led4=P1^3; //定义P20口是led
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
u16 i;
if(k==0) //检测按键K是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k==0) //再次判断按键是否按下
{
i=0; //
}
while(!k); //检测按键是否松开
}
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
if(i==0)
{
i=1; //
}
}
while(!k1); //检测按键是否松开
}
if(k2==0) //检测按键K2是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
if(i==0)
{
i=2; //
}
}
while(!k2); //检测按键是否松开
}
if(k3==0) //检测按键K3是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k3==0) //再次判断按键是否按下
{
if(i==0)
{
i=3; //
}
}
while(!k3); //检测按键是否松开
}
if(k4==0) //检测按键K4是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k4==0) //再次判断按键是否按下
{
if(i==0)
{
i=4; //
}
}
while(!k4); //检测按键是否松开
}
|
评分
-
查看全部评分
|