大家帮我看看我的程序哪儿有问题

2019-07-15 22:33发布



是根据http://bbs.elecfans.com/jishu_184829_1_1.html这里面大神的程序弄的,我是新手,请大神看看。



#include<reg51.h>
#define LED  P0
#define LED_ON()    LED = 0x00  //所有LED亮
#define LED_OFF()    LED = 0xff  //所有LED熄灭
unsigned int g_u16LedtimeCount = 0 ;    //LED计数器
unsigned char g_u8LedState = 0 ;      //LED状态标志, 0表示亮,1表示熄灭
unsigned  char g_bSystemTime1Ms = 0 ;





void LedProcess(void)
{
    if(0 == g_u8LedState)  //如果LED的状态为亮,则点亮LED
    {
        LED_ON() ;
    }
    else                //否则熄灭LED
    {
        LED_OFF() ;
    }
}


void LedStateChange(void)
{
    if(g_bSystemTime1Ms)            //系统1MS时标到
  {
        g_bSystemTime1Ms = 0 ;
        g_u16LedTimeCount++ ;      //LED计数器加一
    if(g_u16LedTimeCount >= 500)  //计数达到500,即500MS到了,改变LED的状态。
    {
            g_u16LedTimeCount = 0 ;
            g_u8LedState  = ! g_u8LedState ;
      }
    }
        }

        void main(void)
{
    while(1)
    {
        LedProcess() ;
        LedStateChange() ;
    }  
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
nxt5656
1楼-- · 2019-07-16 04:01
大神们,帮忙啊
nxt5656
2楼-- · 2019-07-16 07:10
正确的程序在这儿



#include<reg52.h>

sbit LED_SEG  = P1^4;  //数码管段选
sbit LED_DIG  = P1^5;  //数码管位选
sbit LED_CS11 = P1^6;  //led控制位
sbit ir=P1^7;
#define LED P0            //定义LED接口
bit  g_bSystemTime1Ms = 0 ;              // 1MS系统时标
unsigned int  g_u16LedTimeCount = 0 ; //LED计数器
unsigned char g_u8LedState = 0 ;      //LED状态标志, 0表示亮,1表示熄灭

#define LED_ON()      LED = 0x00 ;  //所有LED亮
#define LED_OFF()    LED = 0xff ;  //所有LED熄灭

void Timer0Init(void)
{
    TMOD &= 0xf0 ;
    TMOD |= 0x01 ;      //定时器0工作方式1
    TH0  =    0xfc ;      //定时器初始值
    TL0  =  0x66 ;
    TR0  = 1 ;
    ET0  = 1 ;
}
void LedProcess(void)
{
    if(0 == g_u8LedState)  //如果LED的状态为亮,则点亮LED
    {
        LED_ON() ;
    }
    else                //否则熄灭LED
    {
        LED_OFF() ;
    }
}

void LedStateChange(void)
{
    if(g_bSystemTime1Ms)            //系统1MS时标到
  {
            g_bSystemTime1Ms = 0 ;
            g_u16LedTimeCount++ ;      //LED计数器加一
      if(g_u16LedTimeCount >= 500)  //计数达到500,即500MS到了,改变LED的状态。
      {
      g_u16LedTimeCount = 0 ;
      g_u8LedState  = ! g_u8LedState    ;
          }
    }
}

void main(void)
{
    Timer0Init() ;
    EA = 1 ;
                    LED_CS11 = 1 ; //74HC595输出允许
    LED_SEG = 0 ;  //数码管段选和位选禁止(因为它们和LED共用P0口)
    LED_DIG = 0 ;
    while(1)
    {
          LedProcess() ;
          LedStateChange() ;
    }
}  

void Time0Isr(void) interrupt 1
{
    TH0  =    0xfc ;            //定时器重新赋初值
    TL0  =  0x66 ;
    g_bSystemTime1Ms = 1 ;    //1MS时标标志位置位
}
amwyffyygy
3楼-- · 2019-07-16 07:51
这个,好像我还没学到…………。
a583488081
4楼-- · 2019-07-16 10:46
具体是什么现象
nxt5656
5楼-- · 2019-07-16 14:40
 精彩回答 2  元偷偷看……
a583488081
6楼-- · 2019-07-16 19:32
你做的是什么、?数码管?

一周热门 更多>