微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个呼吸灯的程序。编译不抱错,但是硬件实现不了,请问错那里了

一个呼吸灯的程序。编译不抱错,但是硬件实现不了,请问错那里了

时间:10-02 整理:3721RD 点击:

#include<reg52.h>
#define uchar unsigned char
uchar code table[]={10,20,30,40,50,60,70,80,90,80,70,60,50,40,30,20,10};
uchar count,num;
sbit pwm = P2^1;    //P2^1控制LED小灯
void init ();    //初始化函数
void control_pwm();    //控制PWM占空比的函数
void main()
{  while(1)
  {
        num = 0;
        init();
        control_pwm();
  }
}
void init ()//
{
        TMOD = 0x01;
        TH0 = (65536-10)/256;
        TL0 = (65536-10)%256;  //10us定时器溢出中断一次
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}
void control_pwm ()
                while(1)
                {
                        if(count>=99)num++ ; //
                        if(count == table[num])  pwm = 1; //mun逐次加一,让数组里的数依次于count判断是否相等,如num=1,table[num]=10,那么占空比就是10
                        else pwm = 0;
                        if(num == 17) num = 0 ; //数组一共17个数,读完17个数,重头再来循环
          }
}
void time_T0 () interrupt 1
{
        TH0 = (65536-10)/256;
        TL0 = (65536-10)%256;
        count++;
        if(count==100) count = 0;  //10us*100=1ms中断一百次,一个周期,目的是控制PWM频率
}

你这样贴源码 没人会回答你的

一开始头文件就不对

你可以先试一下上灯先实现各种亮度的固定的显示,可以的话在进行下一步的呼吸等,

逻辑就不对啊,PWM没实现,写法不对,呼吸灯肯定没效果。

为什么就不喜欢加个while(1);呢?

谢谢提醒,我已经修改,并且备注。望您解惑

程序整体没看出啥错误,不知道问题出在了哪里

用LM358就能搞定的           

分段调试,监控主要参数

打开软件的仿真器,看一下里面寄存器里的数值是否变化就知道了。

先别呼吸 先把那个数组里的值改成一样的 看灯亮不亮 换个值 看亮度变化没 步步逼近

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top