久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4592|回復: 12
收起左側

單片機C語言程序怎么控制開機PWM緩慢啟動,從1%-100%遞增,關機時從100%-%1遞減

  [復制鏈接]
ID:468169 發表于 2022-12-12 22:11 來自手機 | 顯示全部樓層 |閱讀模式
50黑幣
開機PWM緩慢啟動,從1%-100%遞增,關機時從100%-%1遞減,C程序怎么控制PWM,有類似程序么?求指導思路

回復

使用道具 舉報

ID:161164 發表于 2022-12-12 23:11 | 顯示全部樓層
呼吸燈,了解一下
回復

使用道具 舉報

ID:268736 發表于 2022-12-13 06:09 | 顯示全部樓層
用你哪一顆MCU? 51? PIC? MSP430?  找到呼吸燈的範例研究研究會明白的 !
回復

使用道具 舉報

ID:468169 發表于 2022-12-13 07:43 來自手機 | 顯示全部樓層
akii 發表于 2022-12-13 06:09
用你哪一顆MCU? 51? PIC? MSP430?  找到呼吸燈的範例研究研究會明白的 !

打算用STC8G
回復

使用道具 舉報

ID:155507 發表于 2022-12-13 08:32 | 顯示全部樓層
我給你來個晶宏官網程序試試


  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define CYCLE       0x1000

  4. sfr     P_SW2   =   0xba;

  5. sfr     PWMSET      =   0xF1;
  6. sfr     PWMCFG01    =   0xF6;
  7. sfr     PWMCFG23    =   0xF7;
  8. sfr     PWMCFG45    =   0xFE;

  9. #define PWM0C       (*(unsigned int  volatile xdata *)0xFF00)
  10. #define PWM0CH      (*(unsigned char volatile xdata *)0xFF00)
  11. #define PWM0CL      (*(unsigned char volatile xdata *)0xFF01)
  12. #define PWM0CKS     (*(unsigned char volatile xdata *)0xFF02)
  13. #define PWM0TADC    (*(unsigned int  volatile xdata *)0xFF03)
  14. #define PWM0TADCH   (*(unsigned char volatile xdata *)0xFF03)
  15. #define PWM0TADCL   (*(unsigned char volatile xdata *)0xFF04)
  16. #define PWM0IF      (*(unsigned char volatile xdata *)0xFF05)
  17. #define PWM0FDCR    (*(unsigned char volatile xdata *)0xFF06)
  18. #define PWM00T1     (*(unsigned int  volatile xdata *)0xFF10)
  19. #define PWM00T1H    (*(unsigned char volatile xdata *)0xFF10)
  20. #define PWM00T1L    (*(unsigned char volatile xdata *)0xFF11)
  21. #define PWM00T2H    (*(unsigned char volatile xdata *)0xFF12)
  22. #define PWM00T2     (*(unsigned int  volatile xdata *)0xFF12)
  23. #define PWM00T2L    (*(unsigned char volatile xdata *)0xFF13)
  24. #define PWM00CR     (*(unsigned char volatile xdata *)0xFF14)
  25. #define PWM00HLD    (*(unsigned char volatile xdata *)0xFF15)

  26. sfr     P0M1    =   0x93;
  27. sfr     P0M0    =   0x94;
  28. sfr     P1M1    =   0x91;
  29. sfr     P1M0    =   0x92;
  30. sfr     P2M1    =   0x95;
  31. sfr     P2M0    =   0x96;
  32. sfr     P3M1    =   0xb1;
  33. sfr     P3M0    =   0xb2;
  34. sfr     P4M1    =   0xb3;
  35. sfr     P4M0    =   0xb4;
  36. sfr     P5M1    =   0xc9;
  37. sfr     P5M0    =   0xca;

  38. void PWM0_Isr() interrupt 22
  39. {
  40.     static bit dir = 1;
  41.     static int val = 0;

  42.     if (PWMCFG01 & 0x08)
  43.     {
  44.         PWMCFG01 &= ~0x08;                      //清中斷標志
  45.         if (dir)
  46.         {
  47.             val++;
  48.             if (val >= CYCLE) dir = 0;
  49.         }
  50.         else
  51.         {
  52.             val--;
  53.             if (val <= 1) dir = 1;
  54.         }
  55.         _push_(P_SW2);
  56.         P_SW2 |= 0x80;
  57.         PWM00T2 = val;
  58.         _pop_(P_SW2);
  59.     }
  60. }

  61. void main()
  62. {
  63.     P0M0 = 0x00;
  64.     P0M1 = 0x00;
  65.     P1M0 = 0x00;
  66.     P1M1 = 0x00;
  67.     P2M0 = 0x00;
  68.     P2M1 = 0x00;
  69.     P3M0 = 0x00;
  70.     P3M1 = 0x00;
  71.     P4M0 = 0x00;
  72.     P4M1 = 0x00;
  73.     P5M0 = 0x00;
  74.     P5M1 = 0x00;

  75.     PWMSET = 0x01;                              //使能PWM0模塊(必須先使能模塊后面的設置才有效)

  76.     P_SW2 = 0x80;
  77.     PWM0CKS = 0x00;                             // PWM0時鐘為系統時鐘
  78.     PWM0C = CYCLE;                              //設置PWM0周期
  79.     PWM00T1= 0x0000;
  80.     PWM00T2= 0x0001;
  81.     PWM00CR= 0x80;                              //使能PWM00輸出
  82.     P_SW2 = 0x00;

  83.     PWMCFG01 = 0x05;                            //啟動PWM0模塊并使能PWM0中斷
  84.     EA = 1;

  85.     while (1);
  86. }

復制代碼
回復

使用道具 舉報

ID:213173 發表于 2022-12-13 09:32 | 顯示全部樓層
給你一個漸亮漸暗開關燈的示例,相關變量和端口根據實際需要自行調整。

  1. #include <reg51.H>

  2. sbit OUT=P1^0;
  3. sbit key=P3^4;

  4. unsigned char num;
  5. unsigned char count;
  6. bit sign;

  7. void delay_10ms()//延時函數
  8. {
  9.         int i,j;
  10.         for(i=0;i<10;i++)
  11.                 for(j=0;j<120;j++);
  12. }
  13. void Timer0Init()                //200微秒@12.000MHz
  14. {
  15.         TMOD= 0x02;                //設置定時器模式
  16.         TL0 = 0x38;                //設置定時初始值
  17.         TH0 = 0x38;                //設置定時重載值
  18.         TF0 = 0;                //清除TF0標志
  19.         TR0 = 1;                //定時器0開始計時
  20.         EA = 1;
  21.         ET0 = 1;
  22. }

  23. void main(void)
  24. {
  25.         Timer0Init();
  26.         while(1)
  27.         {
  28.                 if(!key)
  29.                 {
  30.                         delay_10ms();
  31.                         if(!key)
  32.                         {
  33.                                 sign=~sign;
  34.                                 while(!key);
  35.                         }
  36.                 }
  37.         }
  38. }

  39. void Timer0Interrupt(void) interrupt 1
  40. {
  41.         count++;
  42.         if(count>=100)
  43.         {
  44.                 count=0;
  45.                 if(sign)
  46.                 {
  47.                         if(num<100)num++;
  48.                 }
  49.                 else
  50.                 {
  51.                         if(num>0)num--;
  52.                 }
  53.         }
  54.         if(num>count)OUT=0;//暗
  55.         else OUT=1;//亮
  56. }

復制代碼
回復

使用道具 舉報

ID:77589 發表于 2022-12-13 10:27 | 顯示全部樓層
通過延時程序,延時增加或減小PWM輸出值,延時時長就是步進時長。
回復

使用道具 舉報

ID:1034262 發表于 2022-12-13 11:06 | 顯示全部樓層
按一定的節拍,加減PWM值即可,STC官網有例子的。
回復

使用道具 舉報

ID:468169 發表于 2022-12-15 20:37 來自手機 | 顯示全部樓層
wulin 發表于 2022-12-13 09:32
給你一個漸亮漸暗開關燈的示例,相關變量和端口根據實際需要自行調整。

那如果開機時要求7秒鐘內完成占空比0%-100%的亮度,是不是設置一個變量控制占空比的速度時間呢?
回復

使用道具 舉報

ID:824490 發表于 2022-12-15 21:28 | 顯示全部樓層
想不通,真的想不通!都會PWM輸出了,還不會漸進漸出?
回復

使用道具 舉報

ID:213173 發表于 2022-12-15 21:42 | 顯示全部樓層
nanyexin 發表于 2022-12-15 20:37
那如果開機時要求7秒鐘內完成占空比0%-100%的亮度,是不是設置一個變量控制占空比的速度時間呢?

延長定時器中斷周期即可
回復

使用道具 舉報

ID:161164 發表于 2022-12-16 09:12 | 顯示全部樓層
nanyexin 發表于 2022-12-15 20:37
那如果開機時要求7秒鐘內完成占空比0%-100%的亮度,是不是設置一個變量控制占空比的速度時間呢?

7/100 = 0.07s = 70ms
弄一個70ms的標志位
開機時每70ms加1%
關機時每70ms減1%
回復

使用道具 舉報

ID:645225 發表于 2023-2-5 13:49 | 顯示全部樓層
在單片機C語言程序中控制PWM緩慢啟動和關閉,您可以使用循環和延時函數來實現。

例如,在啟動PWM時,您可以使用以下代碼:
  1. #include <stdio.h>
  2. #include <unistd.h>

  3. void start_pwm(void)
  4. {
  5.     int i;
  6.     for (i = 1; i <= 100; i++) {
  7.         // 設置PWM占空比,例如:pwm_set_duty(i);
  8.         // 延時一定時間,例如:usleep(10000); // 延時10ms
  9.     }
  10. }
復制代碼

在關閉PWM時,您可以使用以下代碼:
  1. void stop_pwm(void)
  2. {
  3.     int i;
  4.     for (i = 100; i >= 1; i--) {
  5.         // 設置PWM占空比,例如:pwm_set_duty(i);
  6.         // 延時一定時間,例如:usleep(10000); // 延時10ms
  7.     }
  8. }
復制代碼


請注意,上面的代碼是一個簡單的示例,可能需要根據您的實際需求和硬件平臺進行修改。此外,請替換pwm_set_duty函數為您的單片機上的PWM設置占空比函數,以便正確設置PWM占空比。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片免费看 | 在线欧美一区 | 日韩欧美在线不卡 | 中文字幕国产 | 欧美一级二级三级视频 | 欧美 日韩 国产 成人 | av在线播放网站 | 国产精品成人品 | 欧美日韩在线一区二区三区 | 欧美日韩综合精品 | 成人在线观看黄 | 久久av资源网 | 欧美极品在线播放 | 一级a性色生活片久久毛片波多野 | 6996成人影院网在线播放 | 日韩欧美视频网站 | 成人精品一区二区三区中文字幕 | 二区三区av | 国产免费福利在线 | 久久精品日产第一区二区三区 | 久久国产精品久久久久久久久久 | 亚洲精品欧美 | 国产精品久久久久久久久久免费 | 久久久999免费视频 999久久久久久久久6666 | 羞羞网站在线免费观看 | 亚洲成人精品 | 秋霞a级毛片在线看 | av网站免费看 | 欧美精品一区二区三区在线 | 福利社午夜影院 | 国产精品区二区三区日本 | 99精品一区二区 | 欧美激情综合五月色丁香小说 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲综合色视频在线观看 | 欧美 日韩 国产 成人 | 精品久久国产老人久久综合 | 中文字幕免费视频 | 日韩精品一区二区三区中文在线 | 欧美极品视频在线观看 | 国产精品久久久久久久久久久久 |