单片机LED灯闪烁延迟程序

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D3=P2^2;
void yanshi();//延迟子函数。
void main()
{
D3=0;
yanshi();
D3=1;
yanshi();
}
void yanshi()
{
uint x,y;
for(x=100;x>0;x--)
for(y=200;y>0;y--);
}
主程序是 灯先亮 经延迟 然后灯灭 再延迟 为什么等又亮了 主程序没循环啊

LZ 要是 懂汇编的话,就能知道这是为什么了。
事实上,LZ 的程序是个单次系统,结果应该如同LZ 所说的一样,一个回合后就结束了。
可是,实际使用中,产品都是循环系统,不做单次系统,而很多新手在编程序的时候,也会经常遗漏循环语句,导致循环系统变成了单次系统。于是软件制作方(如KEIL)就在软件上增加了一个功能,编译的时候,将整个程序的外沿,套上一个死循环,保证不出现单次系统。
LZ可以通过查看编译时的 反汇编窗口,里面的汇编程序中,主函数是多了一个循环语句的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-06
#include<reg52.h>
#define uint  unsigned int
#define uchar  unsigned char  
sbit D3=P2^2;
void yanshi();//延迟子函数。
void main()
{
   D3=0;
   yanshi();
   D3=1;
   yanshi();
   while(1);          //加上这一句,不然你的程序又会程序启动的,所以就有亮了

}
void yanshi()
{
   uint x,y;
   for(x=100;x>0;x--)
      for(y=200;y>0;y--);
}

第2个回答  2013-08-06
int main(void)
{
while(1)
{

D3=0;
yanshi();
D3=1;
yanshi();
}
}
注意单片机程序是从main函数开始执行的,注意单片机主函数内部不加while大循环,程序会一直往下执行,直到RAM溢出产生错误为止程序将跑飞,所以主程序内部一定要加大循环,上面的格式是经过无数工程师的验证,主函数的书写格式。
第3个回答  2013-08-06
在主程序内加
{
while(1)
{
D3=0;
yanshi();
D3=1;
yanshi();
}
}

单片机led灯一亮一灭间隔1秒
当单片机LED灯一亮一灭间隔1秒时,可以使用以下代码实现:\/\/ 初始化IO口 P1 = 0xFF; \/\/ 设置延时时间 while (1) { P1 = 0x00; \/\/ 延时1秒 for (int i = 0; i < 10000; i++) { \/\/ 空循环 } P1 = 0xFF; \/\/ 延时1秒 for (int i = 0; i < 10000; i++) { \/\/ 空循...

51单片机C程序实验LED灯:[1]单个灯闪烁
\/\/ 点亮LED \/\/ 关闭LED delay(1000); \/\/ 延时1秒 } } 在主程序中,通过循环调用点亮和关闭LED的操作,并在每次操作之间调用延时子程序,从而实现LED灯的间隔闪烁。调整延时子程序中的参数,可以改变LED灯的闪烁频率。以上就是使用51单片机C程序实现单个LED灯闪烁的具体步骤。通过合理配置元件和编写相...

单片机编程请闪烁D06号LED灯要求点亮0.3s熄灭0.2s?
include <reg51.h> define LED_PIN P1^6 \/\/ 假设D06号LED连接到P1.6引脚 void delay(unsigned int msec){ unsigned int i, j;for(i = 0; i < msec; i++)for(j = 0; j < 130; j++) \/\/根据单片机主频调整延时长度 ;} void main(){ while(1){ LED_PIN = 1; \/\/ 点亮D06...

单片机如何控制一个LED灯闪烁频率不断加快?
为了实现单片机控制LED灯闪烁频率不断加快,首先设置定时器中断,如5毫秒,用于刷新数码管显示。接下来,声明全局变量flash_count,每次定时中断时,即每隔5毫秒,flash_count自增1。同时,在每次中断后,检查flash_count是否达到预设值xxx。当满足条件时,LED状态取反,同时将flash_count复位至0。通过调整xx...

51单片机C程序实验LED灯:[1]单个灯闪烁
程序清单 说明: 先写的延时子程序,放在了前面 然后是闪烁的主程序 includereg51.h sbit led=P1^0; \/\/延时子程序 void delay() { int i; for(i=0;i=30000;i++); } \/\/主程序 void main() { led=0; while(1) { led=~led; delay(); } } 完成结果仿真图 (tip:双击单片机,...

单片机控制LED灯常亮30秒后闪烁怎么编程?
假设用的是51单片机的P1口,LED灯是低电平点亮,连接P1.0,那么可以参考如下思路:初始化:P1 =0xFF;P1.0=0;点亮 delay_s(30);延时30秒 P1.0=1;熄灭 while(1){ delay_s(1);延时1秒 P1.0=0;点亮 delay_s(1);延时1秒 P1.0=1;熄灭 } ...

请教c51单片机,c语言编程,关于控制LED灯闪烁频率?
即高优先级)。在无限循环中,不断检测K1和K2按键状态,以改变全局变量“freq”并控制LED灯的闪烁频率;然后使用一个计时器中断服务程序来控制LED灯的闪烁,具体实现方式请参考代码注释。最后,为了保证每个周期的闪烁持续时间与频率相符,应该在循环内部加入一个延时操作,等待一定时间再进入下一次循环。

我刚学单片机,想让LED上的第一个小灯间隔200MS闪烁,我编的程序是这样...
int led = 1;\/\/ 定义 LED 闪烁的间隔时间,单位为毫秒 int interval = 200;void setup() { \/\/ 初始化数字输出为输出模式 pinMode(led, OUTPUT);} void loop() { \/\/ 让 LED 亮起来 digitalWrite(led, HIGH);\/\/ 延迟一段时间 delay(interval);\/\/ 让 LED 熄灭 digitalWrite(led, LOW);\/...

如何控制LED闪烁
接下来是编程控制。以AT89C51单片机为例,需要编写程序来控制LED灯的闪烁。程序的核心在于改变单片机的I\/O口输出状态,从而实现LED灯的亮灭控制。具体地,可以通过循环语句在程序中设置延时,然后在每个延时周期后切换I\/O口的输出状态。例如,可以先将I\/O口输出高电平点亮LED灯,然后延时一段时间,再将I...

利用C语言写单片机程序,怎么利用for或者while使LED灯闪几下然后进入下...
for(;delaytime>0;delaytime--) \/\/for循环 { for(j=0;j<100;j++) \/\/125*delaytime为所延迟的时间 {;} } 这是延时程序,你要闪几下就进入下一条,程序如下 int i=0;sbit LED=P3^3; \/\/P3.3接LED LED=0; \/\/关闭LED for (i=0;i<5;i++) \/\/5次 { LED=...

相似回答