找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1980|回复: 2
打印 上一主题 下一主题
收起左侧

LED闪烁

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-27 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/************************************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;
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:224229 发表于 2017-8-9 20:21 | 只看该作者
要是我想让所有的灯同时闪烁,或者几个特殊位置闪烁,而不去逐个定义sbit,怎么破/
回复

使用道具 举报

板凳
ID:151219 发表于 2017-8-10 21:47 | 只看该作者
直接对一组IO口赋值

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表