|
|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 261307853 于 2021-9-13 20:25 编辑
原程序的逻辑是:按一次KEY(低电平触发),LED1亮;再按一次KEY,LED2亮,LED1灭;要是无按键动作,LED延时9秒灭.
现在想加2只按键进来,3只按键都能控制LED(低电平触发),LED亮灭逻辑和原来一样:按次KEY2,LED1亮;按KEY3,LED2亮,LED1灭,要是无任何按键动作,LED延时9秒灭.
感谢了!
以下是代码:
- #include "STC15F104E.h"
- #define u8 unsigned char
- #define u16 unsigned int
- sbit sKEY = P3 ^ 4; //单键
- sbit LED1 = P3 ^ 3;
- sbit LED2 = P3 ^ 1;
- sbit key2 = P3 ^ 0; //双键off
- sbit key3 = P3 ^ 2; //双键on
- bit KEY = 1;
- void InitTimer0(){
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x18;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main() {
- WDT_CONTR = 0x27;
- LED1 = 0; LED2 = 0;
- InitTimer0();
- while (1) {
- WDT_CONTR |= 0x10;
- if (KEY == 0) {
- if (LED1 && LED2) {
- LED1 = 0;
- } else {
- LED1 = !LED1; LED2 = !LED2;
- }
- while (KEY == 0);
- }
- }
- }
- void Timer0Interrupt() interrupt 1{ //12Mhz 1mS定时器中断
- static u8 KEYms = 0;
- static u16 delay = 0;
- TH0 = 0xFC;
- TL0 = 0x18;
- if (sKEY) {
- KEYms = 0;
- } else {
- if (KEYms != 0xFF) {
- KEYms++;
- }
- }
- KEY = !(KEYms >= 25);
- if (KEY) {
- if ((LED1 == 0 || LED2 == 0) && !--delay) {
- LED1 = 1; LED2 = 1;
- }
- } else {
- delay = 9000;//9秒钟
- }
- }
复制代码 |
|