关于#51单片机#的问题,请各位专家解答!定时器无效果,占空比始终不变

#include <stc15.h>
#include <intrins.h>

sbit tlc5615_clk  =P2^0;
sbit tlc5615_cs   =P2^1;
sbit tlc5615_di   =P2^2;
sbit tlc5615_dout =P2^3;

//定义全局变量
unsigned char i=0,flag_200ms=0,flag_1s=1;
    unsigned char flag_second =0;
    unsigned char flag_second2 =0;
  unsigned char counter_50ms =0;
    


void delay(unsigned int us)
{
    while(us--)
    {
       _nop_();
    }
}
void tlc5615_dac(unsigned int dat)
{
    unsigned char i;
    dat<<=2;
    tlc5615_clk=0;
    tlc5615_cs=0;
    for(i=0;i<16;i++)
    {
        tlc5615_di=(bit)(dat & 0x8000);
        tlc5615_clk=0;
        dat<<=1;
        tlc5615_clk=1;
    }
    tlc5615_cs=1;
    tlc5615_clk=0;
    delay(10);
}

    void Timer4Init(void)
{
    T4T3M &= 0xDF;
    T4L = 0xB0;    
    T4H = 0x3C;    
    T4T3M |= 0x80;    
}

void main(void)
{
    //定义变量
    
    //初始化    
      Timer4Init();
    IE2 |=0X40;
    EA   = 1;
    
    tlc5615_dac(400);
    //主任务循环
  while(1)
    {
        if(flag_second2)
           {
        tlc5615_dac(400); //输出3.2V
               }
                if(flag_second1)
                {
         tlc5615_dac(0);   //输出0V
          }
     }
}

void irq_t4(void)  interrupt 20
{
    counter_50ms++;
    if(counter_50ms ==4)
    {
        flag_second =1;
    }
         if(counter_50ms ==20)
    {
            counter_50ms =0;
            flag_second2 =1;
  }  

}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7485536
  • 你也可以参考下这篇文章:创意小发明:单片机给自家风扇增加红外遥控、定时及睡眠功能 附程序源码与电路图,仿真设计文件
  • 除此之外, 这篇博客: 基于51单片机的家居空气质量监控系统的仿真原理图程序设计中的 系统硬件设计 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (末尾附文件)
    整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,温湿度传感器输采用DHT11温湿度一体的传感器,负责采集温度和湿度的数据后发给单片机;空气质量检测采用PM2.5传感器GP2Y1051AU0F,通过串口把检测结果发给单片机;按键部分使用市面上常见的轻触按键作为系统的输入设置模块;显示设备为1602液晶;报警则采用蜂鸣器+LED的形式;电源供电则采用USB 5V供电。

    系统框图
    在这里插入图片描述
    原理图:
    在这里插入图片描述
    仿真图:
    在这里插入图片描述

    DHT11传感器电路
    3.3.1 DHT11简介
    ◆相对湿度和温度测量
    ◆全部校准,数字输出
    ◆卓越的长期稳定性
    ◆无需额外部件
    ◆超长的信号传输距离
    ◆超低能耗
    ◆4 引脚安装
    ◆完全互换
    (1)DHT11产品概述
    DHT11(图3-4)数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

    接口说明
    (1)接口说明
    建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。
    在这里插入图片描述
    PM2.5传感器模块
    3.4.1 简介
    日本夏普公司灰尘传感器GP2Y1051AU0F,体积小巧,灵敏度高,可以用来测量0.03微米以上的微小粒子,可用于室内环境中烟气、粉尘、花粉等浓度的检测。此款产品不但可以检测出单位体积粒子的绝对个数,而且内置气流发生器,可以自行吸入外部空气。灰尘传感器GP2Y1051AU0F安装保养方便,使用寿命长,精度高,稳定性好。其内部对角安放着红外线发光二极管和光电晶体管,使得其能够探测到空气中尘埃反射光,即使非常细小的如烟草烟雾颗粒也能够被检测到,通常在空气净化系统中应用。
    3.4.2 原理说明
    GP2Y1051AU0F的结构示意图如图3-11所示。首先由LED光源发射出光线,沿着LED光轴方向射出,如果空气洁净的情况下,光电二极管PD是收不到LED发出的光线的,因此输出的电压值很低。而如果空气中存在有灰尘颗粒,当这些灰尘颗粒通过传感器中间的圆孔时,由于散射的原因,LED光源发出的光线就有一部分被光电二极管PD检测到,因此就有电压值输出,并且随着灰尘颗粒浓度的升高,散射的光线越多,传感器最终输出的电压值也就越高

    按键输入模块
    键盘是人与单片机打交道的主要设备。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
    本设计中由于采用的按键数量较少,只有3个按键,分别是“设置”、“减”、“加”,故采用了独立键盘的方式。按键的连接图3-17所示:
    在这里插入图片描述

  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 软件界面的制作与介绍小节, 巩固相关知识点

在中断里变化的全局变量,比如flag_second2之类的,定义和声明的时候一定要加上volatile,基本常识啊。
另外检查一下定时器中断是否确实配置正确,中断号对不对