
我给你写个参考程序,看看程序符不符合你的要求,程序如下:
#include "REG52H"
// LED灯端口定义
sbit GPIO_Exio1 = P0^0;
sbit GPIO_Exio2 = P0^1;
sbit GPIO_Exio3 = P0^2;
sbit GPIO_Exio4 = P0^3;
// 按键输入端口
sbit KEY1_Exitm = P1^0;
sbit KEY2_Exitm = P1^1;
sbit KEY3_Exitm = P1^2;
sbit KEY4_Exitm = P1^3;
/
延时1ms
/
void Delay_1ms(unsigned int Cnt)
{
unsigned int x, y;
for(x = Cnt; x > 0; x--)
for(y = 120; y > 0; y--);
}
/
按键扫描子函数
/
void KEY_ScanExtio(void)
{
// 判断K1 、K2其中一个按键按下
if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))
{
Delay_1ms(5);
if((KEY1_Exitm == 0) || (KEY2_Exitm == 0))
{
// 按键按下点亮LED
GPIO_Exio1 = 0;
GPIO_Exio2 = 0;
GPIO_Exio3 = 0;
GPIO_Exio4 = 0;
}
while((KEY1_Exitm == 0) || (KEY2_Exitm == 0)); // 按键松手检测
// 按键松手后LED灭
GPIO_Exio1 = 1;
GPIO_Exio2 = 1;
GPIO_Exio3 = 1;
GPIO_Exio4 = 1;
}
// 判断K3 、K4其中一个按键按下
if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))
{
Delay_1ms(5);
if((KEY3_Exitm == 0) || (KEY4_Exitm == 0))
{
}
while((KEY3_Exitm == 0) || (KEY4_Exitm == 0)); // 按键松手检测
// 按键松手后取反LED
GPIO_Exio1 = ~GPIO_Exio1;
GPIO_Exio2 = ~GPIO_Exio2;
GPIO_Exio3 = ~GPIO_Exio3;
GPIO_Exio4 = ~GPIO_Exio4;
}
}
/
主函数
/
int main(void)
{
// 初始化IO
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
while(1)
{
KEY_ScanExtio();
}
}
led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;}
使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄?
单片机的P10-P13接四个发光二极管L1-L4的阴极,P14-P17接四个开关K1-K4
程序:
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
RR A
ORl A,#0F0H
MOV P1,A
SJMP START
可以检测单个按键,也可以同时检测多个按键
过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
电路图 如下:
#include<reg52h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar code digit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};
void delay(xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
wei=1;
P0=0x01;
wei=0;
duan=1;
P0=digit[0];
duan=0;
delay(500);
wei=1;
P0=0x02;
wei=0;
duan=1;
P0=digit[1];
duan=0;
delay(500);
wei=1;
P0=0x04;
wei=0;
duan=1;
P0=digit[2];
duan=0;
delay(500);
wei=1;
P0=0x08;
wei=0;
duan=1;
P0=digit[3];
duan=0;
delay(500);
wei=1;
P0=0x10;
wei=0;
duan=1;
P0=digit[4];
duan=0;
delay(500);
wei=1;
P0=0x20;
wei=0;
duan=1;
P0=digit[5];
duan=0;
delay(500);
}
}
以上就是关于求写一个单片机控制LED灯程序全部的内容,包括:求写一个单片机控制LED灯程序、单片机按键控制LED灯亮灭程序、单片机led显示c程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)