void main() { P3=0xff; while(1) { if (key==0) LED=0; else LED=1; } }将这部分代码消抖
时间: 2023-05-29 17:05:16 浏览: 50
void main() {
P3=0xff;
while(1) {
if (key==0) {
delay(10); // 等待10毫秒
if (key==0) {
LED=0; // 消抖后,按键按下,LED亮
}
} else {
delay(10); // 等待10毫秒
if (key==1) {
LED=1; // 消抖后,按键松开,LED灭
}
}
}
}
相关问题
#include "stc8a8k64s4a12.h" #include "system.h" sbit Key0=P3^0; sbit Key1=P3^1; sbit Key2=P3^2; sbit Key3=P3^3; sbit LED0=P0^0; sbit LED1=P0^1; sbit LED2=P0^2; sbit LED3=P0^3; unsigned int i; void Delay1us() //@24.000MHz { unsigned char i; i = 6; while (--i); } void main() { System_Init(); P0_Mode_OUT_PP(0XFF); IT0=1; EX0=1; EA=1; IT1=1; EX1=1; EA=1; P0=0XFF; while(1) { if(Key0==0) { Delay1us(); while(Key0==0); Delay1us(); LED0=0; } else LED0=1; if(Key1==0) { LED1=0; } else LED1=1; if(Key2==1) LED2=1; if(Key3==1) LED3=1; } } void int0() interrupt 0 { if(Key2==0) LED2=0; } void int1() interrupt 2 { if(Key3==0) LED3=0; }标注每一行代码的注释
这段代码使用了STC8A8K64S4A12单片机,实现了4个按键控制4个LED灯。下面是每一行代码的注释:
```C
#include "stc8a8k64s4a12.h" //包含了STC8A8K64S4A12的寄存器定义
#include "system.h" //包含了系统初始化函数和GPIO模式设置函数
sbit Key0=P3^0; //定义P3.0引脚为Key0
sbit Key1=P3^1; //定义P3.1引脚为Key1
sbit Key2=P3^2; //定义P3.2引脚为Key2
sbit Key3=P3^3; //定义P3.3引脚为Key3
sbit LED0=P0^0; //定义P0.0引脚为LED0
sbit LED1=P0^1; //定义P0.1引脚为LED1
sbit LED2=P0^2; //定义P0.2引脚为LED2
sbit LED3=P0^3; //定义P0.3引脚为LED3
unsigned int i; //定义一个无符号整型变量i
void Delay1us() //@24.000MHz
{
unsigned char i;
i = 6;
while (--i); //1us延时函数
}
void main() //主函数
{
System_Init(); //系统初始化
P0_Mode_OUT_PP(0XFF); //将P0口设置为推挽输出模式
IT0=1; //设置INT0中断触发方式为下降沿触发
EX0=1; //允许INT0中断
EA=1; //开启总中断
IT1=1; //设置INT1中断触发方式为下降沿触发
EX1=1; //允许INT1中断
EA=1; //开启总中断
P0=0XFF; //将P0口全部输出高电平
while(1) //无限循环
{
if(Key0==0) //当Key0按键被按下时
{
Delay1us(); //短暂延时
while(Key0==0); //等待按键释放
Delay1us(); //短暂延时
LED0=0; //LED0灯亮
}
else LED0=1; //LED0灯灭
if(Key1==0) //当Key1按键被按下时
LED1=0; //LED1灯亮
else LED1=1; //LED1灯灭
if(Key2==1) //当Key2按键被释放时
LED2=1; //LED2灯灭
if(Key3==1) //当Key3按键被释放时
LED3=1; //LED3灯灭
}
}
void int0() interrupt 0 //INT0中断服务程序
{
if(Key2==0) //当Key2按键被按下时
LED2=0; //LED2灯亮
}
void int1() interrupt 2 //INT1中断服务程序
{
if(Key3==0) //当Key3按键被按下时
LED3=0; //LED3灯亮
}
```
#include #define uchar unsigned char #define uint unsigned int #define DATA P0 sbit SCLK=P3^6; sbit CS=P3^7; sbit DIN=P3^5; sbit k4=P0^6; sbit k5=P0^7; sbit k3=P0^3; sbit k2=P0^2; sbit k1=P0^1; sbit k0=P0^0; sbit cskey=P2^6; sbit csled=P2^7; sbit baojing=P2^5; uint table1[]={0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,480}; uint table2[]={1023,992,960,928,896,864,832,800,768,736,704,672,640,608,576,544}; //DA转换 void delay() { uint i; for(i=0;i<123;i++); } void write_5615(uint DA) { uchar i; CS=1; SCLK=0; CS=0; DA=DA&0X03FF; for(i=0;i<12;i++) { if((bit)(DA&0x0200)==1) DIN=1; else DIN=0; SCLK=1; DA<<=1; SCLK=0; } SCLK=0; CS=1; delay(); } //按键 uchar keyscan() { uchar key; cskey=0; key=DATA&0x0f; return key; cskey=1; } //主函数 void main() { uchar keyinput; uint speed; P0=0xff; P1=0xff; P2=0x00; cskey=0; csled=1; while(1) { keyinput=keyscan(); if(k5==1) { if(k4==1) { speed=table1[15-keyinput] ; write_5615(speed); } else { speed=table2[15-keyinput] ; write_5615(speed); } } else { write_5615(512); } } }为这段程序添加注释
注释如下:
```c
#include <reg52.h> // 引入头文件
#define uchar unsigned char // 宏定义
#define uint unsigned int
#define DATA P0 // 定义数据口
// 定义时钟、片选、数据输入口以及按键口
sbit SCLK=P3^6;
sbit CS=P3^7;
sbit DIN=P3^5;
sbit k4=P0^6;
sbit k5=P0^7;
sbit k3=P0^3;
sbit k2=P0^2;
sbit k1=P0^1;
sbit k0=P0^0;
sbit cskey=P2^6;
sbit csled=P2^7;
sbit baojing=P2^5;
uint table1[]={0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,480}; // 定义数组
uint table2[]={1023,992,960,928,896,864,832,800,768,736,704,672,640,608,576,544};
// DA转换函数
void write_5615(uint DA) {
uchar i;
CS=1; // 片选禁用
SCLK=0;
CS=0; // 片选使能
DA=DA&0X03FF; // 保留低10位
for(i=0;i<12;i++) {
if((bit)(DA&0x0200)==1) DIN=1; // 高位为1,数据口为1
else DIN=0; // 高位为0,数据口为0
SCLK=1; // 时钟上升沿
DA<<=1; // 数据左移一位
SCLK=0; // 时钟下降沿
}
SCLK=0;
CS=1; // 片选禁用
delay(); // 延时
}
// 按键扫描函数
uchar keyscan() {
uchar key;
cskey=0; // 使能按键口
key=DATA&0x0f; // 读取按键值
return key; // 返回按键值
cskey=1; // 禁用按键口
}
// 主函数
void main() {
uchar keyinput; // 定义按键输入值
uint speed; // 定义速度值
P0=0xff; // 初始化P0口
P1=0xff; // 初始化P1口
P2=0x00; // 初始化P2口
cskey=0; // 使能按键口
csled=1; // 禁用LED口
while(1) { // 循环执行
keyinput=keyscan(); // 读取按键值
if(k5==1) { // 判断k5口是否为1
if(k4==1) { // 判断k4口是否为1
speed=table1[15-keyinput]; // 根据按键值查找speed值
write_5615(speed); // 将speed值输出
} else {
speed=table2[15-keyinput]; // 根据按键值查找speed值
write_5615(speed); // 将speed值输出
}
} else {
write_5615(512); // 输出默认speed值512
}
}
}
```
相关推荐
![DSN](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)