单片机一个键控制两个灯亮代码
时间: 2024-03-06 22:49:05 浏览: 30
以下是一个简单的单片机代码实现,以 STC89C52 微控制器为例,其中 P1.0 和 P1.1 分别接了两个 LED 灯,P3.2 接了一个按键:
```c
#include <reg52.h>
sbit LED1_PIN = P1^0; // 定义 LED1 引脚
sbit LED2_PIN = P1^1; // 定义 LED2 引脚
sbit BUTTON_PIN = P3^2; // 定义按键引脚
void main() {
LED1_PIN = 0; // 初始化 LED1 灯为关闭状态
LED2_PIN = 0; // 初始化 LED2 灯为关闭状态
BUTTON_PIN = 1; // 初始化按键引脚为高电平输入模式
while (1) {
if (BUTTON_PIN == 0) {
// 按键被按下,切换 LED 灯的状态
LED1_PIN = !LED1_PIN;
LED2_PIN = !LED2_PIN;
delay(500);
while (BUTTON_PIN == 0); // 等待按键释放
}
}
}
```
当按键被按下时,代码会交替控制两个 LED 灯的开关状态,每次变化的时间间隔为 500 毫秒。可以根据需要修改相应的引脚编号和时间间隔等参数。注意,单片机的不同型号和引脚定义方式可能略有不同,需要根据实际情况进行修改。
相关问题
c51两个按键控制流水灯亮灭汇编语言代码
下面是基于C51单片机的两个按键控制流水灯亮灭的汇编语言代码:
```
; 定义端口
LED EQU P1
; 定义变量
delayCnt DB 0
ledStatus DB 01H
keyStatus DB 0
; 初始化程序
ORG 0000H
LJMP MAIN
; 中断服务程序
ORG 0030H
RETI
; 主程序
MAIN:
MOV LED, #00H ; 初始化LED灯状态
MOV TMOD, #01H ; 设置计时器0为模式1
MOV TH0, #3CH ; 设置计时器0的初值
MOV TL0, #0FFH
SETB TR0 ; 启动计时器0
SETB EA ; 开启总中断
LOOP:
JNB P3.4, CHECK_KEY1 ; 如果按键1未按下,则检查按键2
CLR P3.4 ; 按键1按下后,清除标志位
MOV delayCnt, #15 ; 延时计数器设置为15
CJNE ledStatus, #01H, TURN_OFF ; 如果LED为亮,则跳转到TURN_OFF
TURN_ON:
MOV LED, #01H ; LED灯亮
MOV ledStatus, #01H ; 更新LED状态
SJMP WAIT ; 等待
TURN_OFF:
MOV LED, #00H ; LED灯灭
MOV ledStatus, #00H ; 更新LED状态
WAIT:
JNB TF0, WAIT ; 等待计时器0溢出
CLR TF0 ; 清除计时器0溢出标志
DJNZ delayCnt, LOOP ; 延时计数器减1,如果不为0,则跳转到LOOP
JMP CHECK_KEY1 ; 延时结束后,跳转到检查按键1
CHECK_KEY1:
JNB P3.5, LOOP ; 如果按键2未按下,则跳转到LOOP
CLR P3.5 ; 按键2按下后,清除标志位
MOV keyStatus, #01H ; 更新按键状态
JMP LOOP
CHECK_KEY2:
JNB P3.6, LOOP ; 如果按键1未按下,则跳转到LOOP
CLR P3.6 ; 按键1按下后,清除标志位
MOV keyStatus, #02H ; 更新按键状态
JMP LOOP
```
该代码中使用了两个按键来控制LED灯的状态,按下按键1会改变LED灯的状态,按下按键2会更新按键状态。按键状态为01H表示按下了按键1,为02H表示按下了按键2。在LOOP循环中,如果按键1未被按下,则会检查按键2是否被按下;如果按键1被按下,则会执行改变LED灯状态的代码,并且在结束后跳转到检查按键1的代码;如果按键2被按下,则会更新按键状态并且跳转到LOOP循环。
89c52单片机四个不同按键按键控制四个不同LED灯亮代码
好的,以下是一个简单的89c52单片机四个按键控制四个LED灯的示例代码:
```c
#include <reg52.h> // 引入89c52单片机头文件
sbit LED1 = P1^0; // 定义LED1控制引脚,这里假设连接在P1.0口
sbit LED2 = P1^1; // 定义LED2控制引脚,这里假设连接在P1.1口
sbit LED3 = P1^2; // 定义LED3控制引脚,这里假设连接在P1.2口
sbit LED4 = P1^3; // 定义LED4控制引脚,这里假设连接在P1.3口
sbit KEY1 = P2^0; // 定义KEY1检测引脚,这里假设连接在P2.0口
sbit KEY2 = P2^1; // 定义KEY2检测引脚,这里假设连接在P2.1口
sbit KEY3 = P2^2; // 定义KEY3检测引脚,这里假设连接在P2.2口
sbit KEY4 = P2^3; // 定义KEY4检测引脚,这里假设连接在P2.3口
void main()
{
LED1 = 0; // 初始化LED灯状态为熄灭
LED2 = 0;
LED3 = 0;
LED4 = 0;
while (1) // 进入主循环
{
if (KEY1 == 0) // 检测KEY1是否被按下
{
LED1 = 1; // 如果被按下,使LED1亮起来
}
else
{
LED1 = 0; // 如果没被按下,LED1熄灭
}
if (KEY2 == 0) // 检测KEY2是否被按下
{
LED2 = 1; // 如果被按下,使LED2亮起来
}
else
{
LED2 = 0; // 如果没被按下,LED2熄灭
}
if (KEY3 == 0) // 检测KEY3是否被按下
{
LED3 = 1; // 如果被按下,使LED3亮起来
}
else
{
LED3 = 0; // 如果没被按下,LED3熄灭
}
if (KEY4 == 0) // 检测KEY4是否被按下
{
LED4 = 1; // 如果被按下,使LED4亮起来
}
else
{
LED4 = 0; // 如果没被按下,LED4熄灭
}
}
}
```
这段代码通过不断地检测四个按键的状态,来控制四个LED灯的亮灭。其中,sbit是单片机特有的定义引脚的方式,P1、P2分别代表单片机的两个8位IO口,^表示按位异或,用于指定具体引脚的位置。