求写一个单片机控制LED灯程序

以AT89C51单片机为核心,设计一个按键控制LED灯的显示。配置4个按键,K1、K2按下时LED点亮,松开时熄灭;K3、K4按下并放开时LED点亮,再次按下并放开时熄灭。

我给你写个参考程序,看看程序符不符合你的要求,程序如下:
#include "REG52.H"

// 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();
}
}追问

单片机51和52有什么区别?我们是要求用51的,用KeilC51V9.00这个软件做课程设计的。这个可以运行吗?

追答

都文件定义51和52没有区别,运行是可以的,51和52单片机有啥区别,你可以下载数据手册看看不就知道了 吗,51单片机ROM,RAM都比52单片机小,中断也比52单片机少一个,别的都兼容。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-15
#include<reg51.h>
#define uchar unsigned char
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P1^2;
sbit led4=P1^3;
bit flag1,flag2;
main()
{
flag1=0;
flag2=0;
while(1)
{
led1=k1;
led2=k2;
if(k3==0)flag1=~flag1;
if(k4==0)flag2=~flag2;
if(flag1)led3=~led3;
if(flag2)led4=~led4;
}
}

求一个用单片机控制LED灯亮灭的程序。要求按下S1使L1亮,按下S2使L2亮...
led1=1;led2=1;led3=0;}if(s4==0){while(s4==0);led1=0;led2=0;led3=0;}}}

单片机控制一个LED灯亮灭需要怎样的程序?
3.编写程序:使用单片机的编程软件(如Arduino IDE、Keil等),编写控制LED灯的程序。以下是一个简单的示例程序(以Arduino为例):\/\/ 定义LED灯连接的引脚 const int ledPin = 13;void setup() { \/\/ 将LED引脚设置为输出模式 pinMode(ledPin, OUTPUT);} void loop() { \/\/ 控制LED灯亮灭 di...

利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流 ...
void delay (int); \/*声明延迟子函数*\/ main(){ int i;while(1){ LED=0xfe;for(i=0;i<7;i++){ delay(100);LED=(LED<<1)|0x01; \/*最低位LED灯左移一位后进行或运算使得最低位不会为“0”*\/ } for(i=0;i<7;i++){ delay(100);LED=(LED>>1)|0x80; \/*最低位LED灯...

单片机间隔点亮一led灯的C语言程序
P1=0x00; \/\/将P1口全部置为0,防止其它引脚影响 while(1){ P1=0xff; \/\/点亮P1口第0个引脚上的LED灯,0xff为二进制的11111111 delay(1000); \/\/延时1秒 P1=0x00; \/\/将P1口全部置为0,熄灭LED灯 delay(1000); \/\/延时1秒 } } 上述程序的作用是在单片机的P1口上间隔点亮一盏LED灯,每隔1...

编写程序单片机控制LED灯五十毫秒闪烁
sbit LED1 = P1 ^ 0;unsigned char UpdateTime;unsigned char UpdateCont;int main(void){ TMOD = 0x01;TH0 = (65536 - 10000) \/ 256;TL0 = (65536 - 10000) % 256 ET0 = 1;TR0 = 1;EA = 1;while(1);} void Timer0(void) interrupt 1 { TH0 = (65536 - 10000) ...

51单片机实现LED流水灯
用51单片机实现点亮1到8个流水灯的控制过程如下:首先,选择P1口作为控制端口,通过输出不同的值来控制LED灯的点亮与熄灭。具体步骤如下:1. 点亮第八个LED灯,将P1口赋值为“0000 0000”。2. 只点亮第八个LED灯,对P1口赋值为“0111 1111”。3. 点亮第七个LED灯,对P1口赋值为“0011 1111”。

跪求一个51单片机控制ws2812灯带的程序,
WS2812是一种自带驱动IC的LED灯珠,可以通过程序控制每个LED的颜色和亮度。以下是一个简单的程序,用于控制144个WS2812 LED灯珠。这个程序是用C语言编写的,用于STC89C52RC单片机。首先,我们需要知道WS2812数据传输协议的一些基本概念。WS2812 LED灯珠需要接收24位数据,每8位代表一个颜色(红色,绿色,蓝色...

用单片机控制的LED流水灯设计(电路、程序全部给出)
软件编程:点亮LED的艺术 流水灯的魅力在于其动态变化,而软件编程则是关键。这里,我们将采用位操作法,通过顺序控制P1口的位,实现LED的循环点亮。比如,首先让LED 7亮起,通过SETB P1.6指令,紧接着LED 8亮起,执行CLR P1.7指令将其关闭。更深入的细节在于延时子程序的编写,如SETB\/P1.7后,...

用单片机C语言怎么写用状态机实现按键控制LED灯闪烁这个程序
p1_6 = 1;delay(20);} } } void main(){ WDT_CONTR = 0x3C;while(1){ keyscan();WDT_CONTR = 0x3C;} } 这个功能可以用中断来实现,当然,现在我写的这个也可以实现。由于你用的晶振频率不知道,所以你自己修改一下延时时间,再把头文件改一下,就可以了,我试验了,可以实现改功能。

哪位大虾帮帮我用AT89C51单片机控制8个Led的流水灯的单片机程序 希望是...
为了实现8个LED的流水灯效果,你需要使用正确的LED型号,例如LED-RED。下面是一个使用AT89C51单片机控制8个LED流水灯的程序示例。这个程序能够在仿真环境下运行。程序代码如下:include<reg51.h> include<intrins.h> define uint unsigned int define uchar unsigned char uchar i, j;void delay(uint ms...

相似回答