来源:
单片机简单程序_zhjysx的博客-CSDN博客https://blog.csdn.net/zhjysx/category_11558658.html
作用:用一个开关切换LED闪烁模式以及关闭。
思路:设置一个变量,当按键按下、它会变成1,再按下会变成2,再按下又会回到1。以此用一个if语句 或者switch语句 来设置LED状态。
头文件:
定义引脚以及字符型变量。
#include <STC8.H>
#include <intrins.h>
sbit key1=P3^0;
sbit LED2=P1^1;
unsigned char keynum;
延时函数:
分别设置10ms、100ms的延时函数,10ms用于按键按下去抖,100ms用于LED灯闪烁。
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void Delay100ms() //@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
按键函数:
判断按键按下以后,变量keynum加1.
void key11(){
if(key1==0)
{
delay10ms();
if(key1==0)
{
while(!key1);
keynum++;
if(keynum>2)keynum=1;
}
}
}
定时器中断函数:
设置定时器中断,运用定时器的触发来判断按键是否按下
//定时器打开
void open_d()
{
TMOD=0X01; //模式1,16位计数
TH0=0X3C;
TL0=0XB0;
TR0=1; //TR0 定时器0运行控制位,将该位置1时启动定时器0
EA=1; //EA 全局中断允许位,当此位是1时中断可用。
ET0=1;//ET0 定时器/计数器0中断允许位
}
void timer_1() interrupt 1
{
TH0=0x3c;
TL0=0xB0;
key11();
}
主函数:
当按键按下时,变量keynum会在1和2之间转换。当keynum为1 LED闪烁 当keynum为0 LED熄灭
void main(){
keynum=0;open_d();
while(1){
if(keynum==1)
{
while(1){
LED2=1;
Delay100ms();
LED2=0;
Delay100ms();
if(keynum!=1){LED2=1;break;}
}
}
}
}
仿真:
(1条消息) 一个按键控制LED闪烁与关闭-嵌入式文档类资源-CSDN文库https://download.csdn.net/download/zhjysx/71453576
如有错误或简便方法,请指教