请看程序,定时间隔10秒钟让led亮1秒钟

2020-02-05 08:45发布

本帖最后由 sunoracle 于 2012-7-20 09:57 编辑

晶振是11.0592的,LED灯珠是低电平触发的。下面有段程序不会写,烦请看看,指点一二。 或者请写出其他方法...

#include<reg52.h>         

#define uchar unsigned char
#define uint unsigned int

sbit P2_0 = P2^0;
uint i;
uint T_count = 0;

void led() interrupt 1
{
        if (  ++T_count == 200 )  //200个50ms,也就是10秒
        {
          P2_0 = 0;  // LED点亮
          T_count = 0;       
        }
       //?????????此处如何让P2_0在持续1秒之后,变为P2_0=1,使得led灯灭
}

void main()
{
        TMOD = 0x01;
        TH0 = 0x4C;         //50ms
        TL0 = 0x00;
        IE = 0x82;
        TR0 = 1;
        while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
zenghui
1楼-- · 2020-02-06 02:48
本帖最后由 zenghui 于 2012-7-20 11:24 编辑

7楼的代码中
        if (++count == 200)    //200个50ms,也就是10秒
        {
                LED = 0;           // LED点亮
        }
        else if (count >= 220) //P2_0在持续1秒之后,变为P2_0=1,使得led灯灭
        {
                LED = 1;
                count = 0;
        }

我觉得改为
        if ((count++)< 200)    LED = 1; //200个50ms,也就是10秒LED灯灭
        else if ((count++)< 220)   LED = 0;//LED点亮
        else {LED = 1;count = 0;}
更加严谨一些
slzm40
2楼-- · 2020-02-06 06:46
本帖最后由 slzm40 于 2012-7-20 14:12 编辑

sbit P2_0 = P2^0;
uint i;
uint T_count = 0;
bit flag;
uint T_count_1s=0;

void led() interrupt 1
{
        TH0 = 0x4C;         //50ms
        TL0 = 0x00;

        if(flag)//10S到,灯已亮
        {
          if( ++T_count_1s==20)   //20个50ms,也就是1秒到
                {
                 P2_0 = 1;  // LED灭
                 T_count=0;
                 T_count_1s=0;
                 flag=0;
                }
        }
        else  if(++T_count == 200 )  //200个50ms,也就是10秒
        {
          P2_0 = 0;  // LED点亮
          flag=1;      
        }       
       //
}

void main()
{
        TMOD = 0x01;
        TH0 = 0x4C;         //50ms
        TL0 = 0x00;
        IE = 0x82;
        TR0 = 1;
        while(1);
}


我不建议程序放中断里。感觉就是不习惯。
6K6K
3楼-- · 2020-02-06 09:07
1、中断里没有重装TH0和TL0,导致时间不准。
2、EA没有打开,当然不能进中断。
dz20062008
4楼-- · 2020-02-06 12:51
 精彩回答 2  元偷偷看……
xiaoya1945
5楼-- · 2020-02-06 15:11
7L和9L的方法都可以做的,清晰明了...
lryxr2507
6楼-- · 2020-02-06 18:54
  1. oid led() interrupt 1
  2. {
  3.         if (  ++T_count == 1 )          P2_0 = 0;  // LED点亮

  4.         if( ++T_count == 200)          P2_0 = 1;  // LED熄灭
  5.         
  6.         if( ++T_count == 220)         T_count = 0;   

  7. }
复制代码

一周热门 更多>