标题: LED闪烁 [打印本页]

作者: daniu    时间: 2014-12-27 14:48
标题: LED闪烁
/************************************1*************************************
标题: LED闪烁
作者: aphi
日期: 2009.5.26  OK!
软件: Keil uVision3
芯片: STC89C51
说明:要实现led 闪烁,也就是一下亮一下熄,如此反复,但由于单片机执行指令时间是微
     秒级,由于人眼视觉暂留,我们会看到LED一直在亮,所以要让亮和熄延时一段时间。
     本程序采用while软件延时 .
***************************************************************************/
#include<reg52.h>
sbit d1=P1^0 ;
unsigned int a;
void main()
{
while(1)       //无限循环
{
  a=51000;
  d1=0;
  while(a--);
  a=51000;
  d1=1;  
  while(a--);
}
}



/*********************************2****************************************
标题: LED闪烁
作者: aphi
日期: 2009.5.26  OK!
软件: Keil uVision3
芯片: STC89C51
说明: 本程序采用for软件延时 .
***************************************************************************/
#include<reg52.h>
sbit d1=P1^0;
unsigned int a;
void main()
{
for(;;)                         //无限循环
{  
  d1=0;
  for(a=51000;a>0;a--);
  d1=1;  
  for(a=51000;a>0;a--);
}
}

/*********************************3****************************************
标题: LED闪烁
作者: aphi
日期: 2009.5.26  OK!
软件: Keil uVision3
芯片: STC89C51.
说明: 本程序采用定时器软件延时,判断溢出。
***************************************************************************/
#include<reg52.h>
sbit d1=P1^1;
void delay(unsigned int i)
{
TMOD=0X01;                        
IE=0X00;
TR0=1;
while(i!=0)
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  while(TF0!=1);            //判断溢出
  TF0=0;
  i--;
}
TR0=0;
}
void main()
{
while(1)
{
  d1=0;
  delay(10);
  d1=1;
  delay(10);
}
}


/*********************************4****************************************
标题: LED闪烁
作者: aphi
日期: 2009.5.26  OK!
软件: Keil uVision3
芯片: STC89C51
说明: 本程序采用定时器软件延时,等待中断。
***************************************************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_0=P1^0;
uchar a;
void main()
{
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   TR0=1;
   while(1);//等待中断产生
}

void timer0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   a++;
   if(a==10)
   {
    a=0;
    P1_0=~P1_0;
   }
}


作者: 12211221    时间: 2017-8-9 20:21
要是我想让所有的灯同时闪烁,或者几个特殊位置闪烁,而不去逐个定义sbit,怎么破/
作者: YJ5815    时间: 2017-8-10 21:47
直接对一组IO口赋值




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1