标题:
STC8单片机一个IO检测两个按键+LED 源程序
[打印本页]
作者:
jaco_li
时间:
2022-3-29 15:30
标题:
STC8单片机一个IO检测两个按键+LED 源程序
#include<all.h>
sbit LED=P1^0;
sbit k=P1^1;
bit led1=0,led2=0;
u8 value=0;
void GPIO_Init()
{
P7M0=0X00;
P7M1=0X00;
P6M0=0X00;
P6M1=0X00;
P5M0=0x00;
P5M1=0X00;
P4M0=0X00;
P4M1=0X00;
P3M0=0X00;
P3M1=0X00;
P2M0=0x00;
P2M1=0X00;
P1M0=0X00;
P1M1=0X00;
P0M0=0X00;
P0M1=0X00;
}
void LEDRY(u8 a)
{
switch(a)
{
case 0:P1M1|=0X01;break;//高阻,全灭
case 1:P1M1&=0XFE;LED=1;break;//上拉,一个亮
case 2:P1M1&=0XFE;LED=0;break;//上拉,一个亮
case 3:P1M1&=0XFE;LED=~LED;break;//上拉模式
}
}
void key_scan(u8 c)
{
switch(c)
{
case 0://k=0;
P1M0=0X00;
P1M1|=0X02;//高阻模式
//if(k==1)//一定是正按键按下
break;
case 1:k=1;
P1M0=0X00;
P1M1&=0XFD;//上拉模式
//if(k==0)//一定是负按键按下
break;
}
}
void Key_Enter()
{
static bit k12=0,flag=1,flag2=1;
static u16 count=0;
if(flag)//扫描检测
{
k12=~k12;
key_scan(k12);
}
if((k12&&k==0&&flag2)||(k12==0&&k==1&&flag2))
{
flag=0;//停止扫描
count++;
if(count>=1000)
{
count=0;
flag2=0;//禁止再次进入
if(k)
led2=~led2;
else
led1=~led1;
}
}
if((k12&&k)||(k12==0&&k==0))
{
flag=1;//允许扫描
count=0;
flag2=1;//
}
}
void main()
{
u16 count=0,i=0;
u8 xdata j=0;
GPIO_Init();
UartInit();
while(1)
{
value=0;
if(led1)
value+=2;
if(led2)
value++;
LEDRY(value);
Key_Enter();
count++;
if(count>=500)
{
count=0;
i++;
if(i>=1000)
{
i=0;
j++;
j%=4;
}
}
}
}
复制代码
Keil代码下载:
STC8-一个IO检测两个按键 LED.rar
(51.87 KB, 下载次数: 16)
2022-3-29 15:35 上传
点击文件名下载附件
STC8-一个IO检测两个按键+LED
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1