• 51单片机学习:DAC模数转换实验


    实验名称:DAC模数转换实验
    接线说明:    
    实验现象:下载程序后,DAC(PWM)模块上的指示灯DA1呈呼吸灯效果,由暗变亮再由亮变暗
    注意事项:                                                                                  
    ***************************************************************************************/
    #include "public.h"
    #include "pwm.h"


    /*******************************************************************************
    * 函 数 名       : main
    * 函数功能         : 主函数
    * 输    入       : 无
    * 输    出         : 无
    *******************************************************************************/
    void main()
    {    
        u8 dir=0;//默认为0
        u8 duty=0;

        pwm_init(0XFF,0XF6,100,0);//定时时间为0.01ms,PWM周期是100*0.01ms=1ms,占空比为0%

        while(1)
        {
            if(dir==0)//当dir为递增方向
            {
                duty++;//占空比递增
                if(duty==70)dir=1;//当到达一定值切换方向,占空比最大能到100,但到达70左右再递增,
                                    //肉眼也分辨不出亮度变化    
            }
            else
            {
                duty--;
                if(duty==0)dir=0;//当到达一定值切换方向    
            }
            pwm_set_duty_cycle(duty);//设置占空比
            delay_ms(1);//短暂延时,让呼吸灯有一个流畅的效果            
        }
    }

    #include "pwm.h"

    //全局变量定义
    u8 gtim_h=0;//保存定时器初值高8位
    u8 gtim_l=0;//保存定时器初值低8位
    u8 gduty=0;//保存PWM占空比
    u8 gtim_scale=0;//保存PWM周期=定时器初值*tim_scale


    /*******************************************************************************
    * 函 数 名       : pwm_init
    * 函数功能         : PWM初始化函数
    * 输    入       : tim_h:定时器高8位
                       tim_l:定时器低8位
                       tim_scale:PWM周期倍数:定时器初值*tim_scale
                       duty:PWM占空比(要小于等于tim_scale)
    * 输    出         : 无
    *******************************************************************************/
    void pwm_init(u8 tim_h,u8 tim_l,u16 tim_scale,u8 duty)
    {
        gtim_h=tim_h;//将传入的初值保存在全局变量中,方便中断函数继续调用
        gtim_l=tim_l;
        gduty=duty;
        gtim_scale=tim_scale;

        TMOD|=0X01;    //选择为定时器0模式,工作方式1
        TH0 = gtim_h;    //定时初值设置 
        TL0 = gtim_l;        
        ET0=1;//打开定时器0中断允许
        EA=1;//打开总中断
        TR0=1;//打开定时器
    }

    /*******************************************************************************
    * 函 数 名       : pwm_set_duty_cycle
    * 函数功能         : PWM设置占空比
    * 输    入       : duty:PWM占空比(要小于等于tim_scale)
    * 输    出         : 无
    *******************************************************************************/
    void pwm_set_duty_cycle(u8 duty)
    {
        gduty=duty;    
    }

    void pwm(void) interrupt 1    //定时器0中断函数
    {
        static u16 time=0;

        TH0 = gtim_h;    //定时初值设置 
        TL0 = gtim_l;
        
        time++;
        if(time>=gtim_scale)//PWM周期=定时器初值*gtim_scale,重新开始计数
            time=0;
        if(time<=gduty)//占空比    
            PWM=1;
        else
            PWM=0;        
    }

    #include "public.h"

    /*******************************************************************************
    * 函 数 名       : delay_10us
    * 函数功能         : 延时函数,ten_us=1时,大约延时10us
    * 输    入       : ten_us
    * 输    出         : 无
    *******************************************************************************/
    void delay_10us(u16 ten_us)
    {
        while(ten_us--);    
    }

    /*******************************************************************************
    * 函 数 名       : delay_ms
    * 函数功能         : ms延时函数,ms=1时,大约延时1ms
    * 输    入       : ms:ms延时时间
    * 输    出         : 无
    *******************************************************************************/
    void delay_ms(u16 ms)
    {
        u16 i,j;
        for(i=ms;i>0;i--)
            for(j=110;j>0;j--);
    }

    纷传单片机学习资料放在纷传小程序里了,需要的可以加入圈子有资料百度网盘下载地址及提取码。

  • 相关阅读:
    对齐PyTorch,一文详解OneFlow的DataLoader实现
    身份证号码校验
    JAVA宠物寄存中心计时收费系统计算机毕业设计Mybatis+系统+数据库+调试部署
    怒赞了,阿里P8面试官推荐的Java高并发核心编程文档
    Nds-IR780 近红外荧光探针IR780纳米粒子
    第17章 站点构建
    SpringCloud Alibaba系列 Ribbon Feign(二)
    5-4计算一串字符的空格数字字符其他
    逆向-beginners之循环while
    算法与数据结构【30天】集训营——时间复杂度与空间复杂度(02)
  • 原文地址:https://blog.csdn.net/qq_63964231/article/details/126917348