"); //-->
在51单片机中,对单片机的某一个端口进行操作时,不能对单片机的某一个端口实施具体的操作,必须是把端口赋值给某一个变量,对这个变量进行操作才可以。
例如:sbit LED1=PO^0;
sbit LED2=P2^1;
在程序的实际操作中,对LED1和LED2进行操作,实际上就是对这两个端口进行了操作,这是针对8位单片机的情况。
在程序中如果检测3个按键都按下的情况,再判断是哪个按键按下了,执行下面的C语句。
if(KEY1==0||key2==0||KEY3==0),这条语句是用来检测哪个按键被按下了,如果KEY1被按下了,或者KEY2,或者KEY3或者三个按键当中的2个或者3个按下了,都可以根据这条语句来进行判断。然后在这条if语句的C程序里面检测是哪个按键按下了,如果是KEY1按下了,会执行什么样的操作,如果是别的按键按下了,会执行什么样的操作。
具体的程序设计如下所示:
void KEY() //按键的程序。
{
if(KEY1==0 || KEY2==0 || KEY3==0) //按键都按下了,如果按键按下那么KEY1=0;,KEY1==0;是检验按键是否是真的按下了。如果所有的按键都是按下了,检验下是哪个按键按下了!
{
Delay(2); //20毫秒软件防抖
if(KEY1 == 0)
{
LED1 = 0;
LED2 = 1;
LED3 = 1;
}
if(KEY2 == 0)
{
LED1 = 1;
LED2 = 0;
LED3 = 1;
}
if(KEY3 == 0)
{
LED1 = 1;
LED2 = 1;
LED3 = 0;
}
Delay(50); //延时0.5秒再进行下次按键的检测
}
}
第二个按键程序
第二个按键程序
/********************************************************************
* 文件名 : 数码管字符显示.c
* 描述 : 按下S19按键,数码管上显示的数字加1。
* 创建人 : 东流,2012年2月7日
* 版本号 : 1.0
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY = P3^2;
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i = 0;
P2 = 7;
while(1)
{
P0 = table[i%16]; //这里i%16是防止table中的数据在0--15,不会溢出
if(KEY == 0)
{
i++;
Delay(30); //延时0.3秒,防止按一次按键,程序自加多次的情况
}
}
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。