一个呼吸灯的程序。编译不抱错,但是硬件实现不了,请问错那里了
时间: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就能搞定的
分段调试,监控主要参数
打开软件的仿真器,看一下里面寄存器里的数值是否变化就知道了。
先别呼吸 先把那个数组里的值改成一样的 看灯亮不亮 换个值 看亮度变化没 步步逼近