找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5370|回复: 6
收起左侧

单片机闪烁LED程序问题

[复制链接]
ID:129526 发表于 2016-7-15 13:06 | 显示全部楼层 |阅读模式
单片机c8051f020,晶振22.1184MHz.定时器0模式1.LED端口是P3^3.定时1s闪烁。程序运行后LED常亮,不闪烁。
  1. #include<c8051f020.h>
  2. sbit LED=P3^3;

  3. void PORT_Init(void)
  4.   {
  5.      XBR2=0x40;
  6.      P3MDOUT=0xff;
  7.   }
  8. void main()
  9. {
  10.    
  11.     unsigned char cnt=0;
  12.     PORT_Init();

  13.         TMOD=0x01;//定时器0模式1
  14.         TH0=0x70;//定时器初值高8位
  15.         TL0=0x00;//定时器初值低8位
  16.         TR0=1;  //打开定时器

  17.         while(1)
  18.         {
  19.           if(TF0 == 1)
  20.           {
  21.             TF0=0;        //软件清零
  22.                 TH0=0x70;  //重新赋值
  23.             TL0=0x00;  //重新赋值
  24.                 cnt++;
  25.                 if(cnt>=50)
  26.                 {
  27.                  cnt=0;         //清零
  28.                  LED=~LED;
  29.                 }
  30.           }
  31.         }
  32. }
复制代码


回复

使用道具 举报

ID:79544 发表于 2016-7-17 12:49 | 显示全部楼层
你没说什么问题啊。
回复

使用道具 举报

ID:129526 发表于 2016-7-18 09:28 | 显示全部楼层
腾飞的龙 发表于 2016-7-17 12:49
你没说什么问题啊。


单片机c8051f020,晶振22.1184MHz.定时器0模式1.LED端口是P3^3.定时1s闪烁。程序运行后LED常亮,不闪烁
回复

使用道具 举报

ID:123289 发表于 2016-7-18 14:36 | 显示全部楼层
闪灯很简单:
1,做一个闪动时钟标记位,设为S,用时间中断,让S每间隔一个时间(如0.25秒)反转一次,即闪动.
2,做N个闪动需求标记位(如:S1,S2,S3),每个位对应需要闪动的位.
实现:如显示第三位F3
假设:以前(未闪动)送出至端口的数据=F3
则闪动显示时:送出至端口的数据=F3 & S3 & S + !S3 & F3 就实现闪动了
细解:当S3=0时,禁止闪动,F3 & S3 & S + !S3 & F3=F3 与以前不闪一样
          当S3=1时,要求闪动,F3 & S3 & S + !S3 & F3=F3 & S 是否显示取决于S,即每0.25秒闪动一次。
所以要不要闪动某位,只要将Sn置1清0即可,很方便。
回复

使用道具 举报

ID:123289 发表于 2016-7-18 14:39 | 显示全部楼层
程序设计在于精巧的构思,写程序只是以规定的格式写写字符串而矣。
回复

使用道具 举报

ID:140489 发表于 2016-9-28 12:14 | 显示全部楼层
我给改了一下,在实验板上测试通过,LED能闪烁。
#include<reg52.h>
sbit LED=P1^0;

/*void PORT_Init(void)
  {
     XBR2=0x40;
     P3MDOUT=0xff;
  }        */
void main()
{
   
    unsigned char cnt=0;
    //PORT_Init();

        TMOD=0x01;//定时器0模式1
        TH0=0x70;//定时器初值高8位
        TL0=0x00;//定时器初值低8位
        TR0=1;  //打开定时器

        while(1)
        {
          if(TF0 == 1)
          {
            TF0=0;        //软件清零
            TH0=0x70;  //重新赋值
            TL0=0x00;  //重新赋值
                cnt++;
                if(cnt>=50)
                {
                 cnt=0;         //清零
                 LED=~LED;
                }
          }
        }
}
回复

使用道具 举报

ID:74784 发表于 2016-9-28 19:37 | 显示全部楼层
这个很简单的:
1。设置一个1S的定时器
2。每当1S到时间后把p3.3取反一次
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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