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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC8a8k64S4A12怎么實現流水呼吸燈?只有呼吸燈的PWM代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:997537 發表于 2021-12-27 18:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STC8a8k64S4A12怎么實現流水呼吸燈?只有呼吸燈的PWM代碼,現在想實現8個燈呈現波浪式的起伏,也算是流水呼吸燈了
求助大佬們,非常非常感謝!
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. //測試工作頻率為11.0592MHz

  4. #define CYCLE           0x1000

  5. sfr     P_SW2       =   0xba;
  6. sfr     PWMCFG      =   0xf1;
  7. sfr     PWMIF       =   0xf6;
  8. sfr     PWMFDCR     =   0xf7;
  9. sfr     PWMCR       =   0xfe;

  10. #define PWMC            (*(unsigned int volatile xdata *)0xfff0)
  11. #define PWMCKS          (*(unsigned char volatile xdata *)0xfff2)
  12. #define TADCP           (*(unsigned int volatile xdata *)0xfff3)
  13. #define PWM0T1          (*(unsigned int volatile xdata *)0xff00)
  14. #define PWM0T2          (*(unsigned int volatile xdata *)0xff02)
  15. #define PWM0CR          (*(unsigned char volatile xdata *)0xff04)
  16. #define PWM0HLD         (*(unsigned char volatile xdata *)0xff05)
  17. #define PWM1T1          (*(unsigned int volatile xdata *)0xff10)
  18. #define PWM1T2          (*(unsigned int volatile xdata *)0xff12)
  19. #define PWM1CR          (*(unsigned char volatile xdata *)0xff14)
  20. #define PWM1HLD         (*(unsigned char volatile xdata *)0xff15)
  21. #define PWM2T1          (*(unsigned int volatile xdata *)0xff20)
  22. #define PWM2T2          (*(unsigned int volatile xdata *)0xff22)
  23. #define PWM2CR          (*(unsigned char volatile xdata *)0xff24)
  24. #define PWM2HLD         (*(unsigned char volatile xdata *)0xff25)
  25. #define PWM3T1          (*(unsigned int volatile xdata *)0xff30)
  26. #define PWM3T2          (*(unsigned int volatile xdata *)0xff32)
  27. #define PWM3CR          (*(unsigned char volatile xdata *)0xff34)
  28. #define PWM3HLD         (*(unsigned char volatile xdata *)0xff35)
  29. #define PWM4T1          (*(unsigned int volatile xdata *)0xff40)
  30. #define PWM4T2          (*(unsigned int volatile xdata *)0xff42)
  31. #define PWM4CR          (*(unsigned char volatile xdata *)0xff44)
  32. #define PWM4HLD         (*(unsigned char volatile xdata *)0xff45)
  33. #define PWM5T1          (*(unsigned int volatile xdata *)0xff50)
  34. #define PWM5T2          (*(unsigned int volatile xdata *)0xff52)
  35. #define PWM5CR          (*(unsigned char volatile xdata *)0xff54)
  36. #define PWM5HLD         (*(unsigned char volatile xdata *)0xff55)
  37. #define PWM6T1          (*(unsigned int volatile xdata *)0xff60)
  38. #define PWM6T2          (*(unsigned int volatile xdata *)0xff62)
  39. #define PWM6CR          (*(unsigned char volatile xdata *)0xff64)
  40. #define PWM6HLD         (*(unsigned char volatile xdata *)0xff65)
  41. #define PWM7T1          (*(unsigned int volatile xdata *)0xff70)
  42. #define PWM7T2          (*(unsigned int volatile xdata *)0xff72)
  43. #define PWM7CR          (*(unsigned char volatile xdata *)0xff74)
  44. #define PWM7HLD         (*(unsigned char volatile xdata *)0xff75)

  45. void PWM_Isr() interrupt 22
  46. {
  47.     static bit dir = 1;
  48.     static int val = 0;
  49.     char store;

  50.     if (PWMCFG & 0x80)
  51.     {
  52.         PWMCFG &= ~0x80;                        //清中斷標志
  53.         if (dir)
  54.         {
  55.             val++;
  56.             if (val >= CYCLE) dir = 0;
  57.         }
  58.         else
  59.         {
  60.             val--;
  61.             if (val <= 1) dir = 1;
  62.         }
  63.    
  64.         store = P_SW2;
  65.         P_SW2 |= 0x80;
  66.         PWM0T2 = val;
  67.         P_SW2 = store;
  68.     }
  69. }

  70. void main()
  71. {
  72.     P_SW2 = 0x80;
  73.     PWMCKS = 0x00;                              // PWM時鐘為系統時鐘
  74.     PWMC = CYCLE;                               //設置PWM周期為
  75.     PWM0T1= 0x0000;
  76.     PWM0T2= 0x0001;
  77.     PWM0CR= 0x80;                               //使能PWM0輸出
  78.     P_SW2 = 0x00;

  79.     PWMCR = 0xc0;                               //啟動PWM模塊
  80.     EA = 1;

  81.     while (1);
  82. }

復制代碼

這個代碼是定義了一個燈,多個燈定義加上PWM1、2...即可


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

使用道具 舉報

沙發
ID:893997 發表于 2021-12-29 15:37 | 只看該作者
呼吸燈函數可以帶入口參數,然后采用輪詢的方式把每個等賦值給入口參數即可。
回復

使用道具 舉報

板凳
ID:488334 發表于 2021-12-29 16:23 | 只看該作者
可以不用PWM中斷去做。我做過一個呼吸燈產品,思路是:用定時器定時一個1ms的中斷,然后根據時間去改變A的PWM占空比,比如20ms改變一次,當A的占空比從0到100%再遞減到30%時,你開始遞加B的PWM的占空比,當A的占空比0的時候,B的占空比就在30%,類比下去C,D,E等等。我做的不是海浪,不過你可以根據海浪的特性去做。
回復

使用道具 舉報

地板
ID:161164 發表于 2021-12-29 16:58 | 只看該作者
手上沒有STC8A的單片機
試試這樣改

  1. void PWM_Isr() interrupt 22
  2. {
  3.         static char dir[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  4.         static int val[8]= {0, 0, 0, 0, 0, 0, 0, 0};
  5.         static char Enb[8]= {0, 0, 0, 0, 0, 0, 0, 0};
  6.         char store, index;
  7.         static unsigned int delay_on = 0;
  8.         static char delay_on_i = 0;
  9.         if(!delay_on)
  10.         {
  11.                 delay_on = 1500;//~0.5sec
  12.                 if(delay_on_i<8)
  13.                 {
  14.                         Enb[delay_on_i] = 1;
  15.                         delay_on_i++;
  16.                 }
  17.         }else{
  18.                 delay_on--;       
  19.         }
  20.     if (PWMCFG & 0x80)
  21.     {
  22.         PWMCFG &= ~0x80;                        //清中斷標志
  23.                 for(index = 0;index < 8; index++)
  24.                 {
  25.                         if(Enb[index])
  26.                         {
  27.                                 if (!dir[index])
  28.                                 {
  29.                                         val[index]++;
  30.                                         if (val[index] >= CYCLE) dir[index] = 0;
  31.                                 }
  32.                                 else
  33.                                 {
  34.                                         val[index]--;
  35.                                         if (val[index] <= 1) dir[index] = 1;
  36.                                 }                                       
  37.                         }               
  38.                 }
  39.    
  40.         store = P_SW2;
  41.         P_SW2 |= 0x80;
  42.         PWM0T2 = val[0];
  43.         PWM1T2 = val[1];
  44.         PWM2T2 = val[2];
  45.         PWM3T2 = val[3];
  46.         PWM4T2 = val[4];
  47.         PWM5T2 = val[5];
  48.         PWM6T2 = val[6];
  49.         PWM7T2 = val[7];
  50.         P_SW2 = store;
  51.     }
  52. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美在线免费观看视频 | 久久久久亚洲精品中文字幕 | 国产在线精品一区二区三区 | 天天操综合网 | 99亚洲精品 | 色综合一区二区三区 | 福利网址 | 日韩有码一区 | 亚洲国产精品网站 | 欧美三级三级三级爽爽爽 | 精精国产xxxx视频在线野外 | 一级做a爰片性色毛片视频停止 | 风间由美一区二区三区在线观看 | 国产一伦一伦一伦 | 好婷婷网| 在线观看免费av片 | 精品国产色 | 午夜精品一区二区三区在线观看 | 亚洲欧美成人影院 | 日韩精品成人一区二区三区视频 | 国精日本亚洲欧州国产中文久久 | 超碰激情 | 国产成人在线视频播放 | 成年人免费网站 | 久久久女 | 久久久久久久一区二区 | 中文字幕日韩一区 | 久草在线在线精品观看 | 欧美精品一区二区三区在线播放 | 国产真实乱对白精彩久久小说 | 国产精品美女久久久久久免费 | 成人免费视频网站 | 一级做a爰片久久毛片 | 视频一二三区 | 二区中文字幕 | 久久精品二区 | 亚洲日本国产 | 美女视频黄色的 | 久久国内精品 | 自拍偷拍第一页 | 精品美女视频在线观看免费软件 |