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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4656|回復: 12
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
ID:468169 發表于 2022-12-12 22:11 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
開機PWM緩慢啟動,從1%-100%遞增,關機時從100%-%1遞減,C程序怎么控制PWM,有類似程序么?求指導思路

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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
回復

使用道具 舉報

5#
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. }

復制代碼
回復

使用道具 舉報

6#
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. }

復制代碼
回復

使用道具 舉報

7#
ID:77589 發表于 2022-12-13 10:27 | 只看該作者
通過延時程序,延時增加或減小PWM輸出值,延時時長就是步進時長。
回復

使用道具 舉報

8#
ID:1034262 發表于 2022-12-13 11:06 | 只看該作者
按一定的節拍,加減PWM值即可,STC官網有例子的。
回復

使用道具 舉報

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

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

使用道具 舉報

10#
ID:824490 發表于 2022-12-15 21:28 | 只看該作者
想不通,真的想不通!都會PWM輸出了,還不會漸進漸出?
回復

使用道具 舉報

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

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

使用道具 舉報

12#
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%
回復

使用道具 舉報

13#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人猛片aaaaaaa | 伊人99| 亚洲欧美中文日韩在线v日本 | 欧美亚洲成人网 | 久久伊人一区二区 | 国产一区二区自拍 | 久久久久久国产精品免费免费 | 日韩二三区 | 丁香五月网久久综合 | 一区二区伦理电影 | 国产精品久久久久久久久久软件 | v亚洲| 麻豆成人在线视频 | 免费毛片网 | 亚洲最色网站 | 免费欧美 | 色资源在线| 免费看色| 欧美成人h版在线观看 | 日韩欧美国产综合 | 久久精品久久久久久 | 日韩在线免费视频 | 91在线免费视频 | 91精品久久久久久久久中文字幕 | 99亚洲精品| 中文字幕一区二区三区精彩视频 | 国产一区二区精品在线 | 51ⅴ精品国产91久久久久久 | 精品毛片在线观看 | 欧美日韩三级视频 | 日韩欧美亚洲 | 成人精品一区二区 | 中国一级特黄真人毛片 | 亚洲最大的黄色网址 | 久久人体视频 | 综合伊人| 亚洲高清视频一区二区 | 亚州视频在线 | 超碰91在线 | 大陆一级毛片免费视频观看 | 久久国色 |