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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7523|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

stc15f2k60s2單片機(jī)PWM呼吸燈代碼(帶詳細(xì)注釋)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:407568 發(fā)表于 2018-10-10 15:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機(jī)源程序如下:
  1. #include <stc15f2k60s2.h>

  2. sbit ADDR0 = P1^0;   //如果是自己搭的電路,可以無視下面這幾行
  3. sbit ADDR1 = P1^1;
  4. sbit ADDR2 = P1^2;
  5. sbit ADDR3 = P1^3;
  6. sbit ENLED = P1^4;

  7. sbit PWMOUTLED = P0^0;//用于PWM控制輸出

  8. unsigned char heighHR0, heighLR0;//PWM一個周期中高電平高字節(jié)和低字節(jié)重載值
  9. unsigned char lowHR0, lowLR0;//PWM一個機(jī)器周期中低電平時高字節(jié)和低字節(jié)重載值

  10. void Initial();
  11. void ConfigPWM(unsigned int fr, unsigned char dc);
  12. void ClosePWM();

  13. void main(void)
  14. {
  15.     unsigned int i;
  16.     Initial();
  17.    
  18.     while (1)     //呼吸燈效果
  19.    {
  20. //LED亮->暗
  21.     ConfigPWM(60, 10);//配置PWM頻率為100HZ,占空比為10%
  22.    for (i = 0; i < 30; i++); //軟件測試延時大約76ms
  23.     ConfigPWM(60, 20);//配置PWM頻率為100HZ,占空比為20%
  24.    for (i = 0; i < 30; i++);
  25.    ConfigPWM(60, 30);//配置PWM頻率為100HZ,占空比為30%
  26.    for (i = 0; i < 30; i++);
  27.    ConfigPWM(60, 40);//配置PWM頻率為100HZ,占空比為40%
  28. for (i = 0; i < 30; i++);
  29. ConfigPWM(60, 50);//配置PWM頻率為100HZ,占空比為50%
  30. for (i = 0; i < 30; i++);
  31. ConfigPWM(60, 60);//配置PWM頻率為100HZ,占空比為60%
  32. for (i = 0; i < 30; i++);
  33. ConfigPWM(60, 70);//配置PWM頻率為100HZ,占空比為70%
  34. for (i = 0; i < 30; i++);
  35. ConfigPWM(60, 80);//配置PWM頻率為100HZ,占空比為80%
  36. for (i = 0; i < 30; i++);
  37. ConfigPWM(60, 90);//配置PWM頻率為100HZ,占空比為90%
  38. for (i = 0; i < 30; i++);
  39. ConfigPWM(60, 95);//配置PWM頻率為100HZ,占空比為95%
  40. for (i = 0; i < 60000; i++);
  41. //LED暗->亮
  42. ConfigPWM(60, 90);//配置PWM頻率為100HZ,占空比為10%
  43. for (i = 0; i < 60000; i++);
  44. ConfigPWM(60, 80);//配置PWM頻率為100HZ,占空比為20%
  45. for (i = 0; i < 60000; i++);
  46. ConfigPWM(60, 70);//配置PWM頻率為100HZ,占空比為30%
  47. for (i = 0; i < 60000; i++);
  48. ConfigPWM(60, 60);//配置PWM頻率為100HZ,占空比為40%
  49. for (i = 0; i < 60000; i++);
  50. ConfigPWM(60, 50);//配置PWM頻率為100HZ,占空比為50%
  51. for (i = 0; i < 60000; i++);
  52. ConfigPWM(60, 40);//配置PWM頻率為100HZ,占空比為60%
  53. for (i = 0; i < 60000; i++);
  54. ConfigPWM(60, 30);//配置PWM頻率為100HZ,占空比為70%
  55. for (i = 0; i < 60000; i++);
  56. ConfigPWM(60, 20);//配置PWM頻率為100HZ,占空比為80%
  57. for (i = 0; i < 60000; i++);
  58. ConfigPWM(60, 10);//配置PWM頻率為100HZ,占空比為90%
  59. for (i = 0; i < 60000; i++);
  60. ClosePWM();
  61. }
  62. }

  63. /*初始化*/
  64. void Initial()
  65. {
  66. ADDR3 = 1;
  67. ENLED = 0;//選擇U3,即LED
  68. ADDR2 = 1;
  69. ADDR1 = 1;
  70. ADDR0 = 0;//LEDS6=0
  71. }

  72. /*使用T0配置PWM高低電平的頻率*/
  73. void ConfigPWM(unsigned int fr, unsigned char dc)  //fr為PWM的頻率,100HZ無閃爍,dc是PWM的占空比(高電平占的百分比)
  74. {
  75.    unsigned long tmp;
  76.    unsigned int heigh, low;

  77.    tmp = 12000000/12;//一個機(jī)器周期頻率
  78.     tmp = tmp / fr;  //一個機(jī)器周期中fr的頻率所需計數(shù)值(包括高電平和低電平)
  79.    heigh = (tmp * dc) / 100;//高電平占dc%,所需計數(shù)值
  80.    low   = tmp - heigh;//低電平所需計數(shù)值
  81.    heigh = 65536-heigh;//高電平計數(shù)初值
  82.    low   = 65536-low;//低電平計數(shù)初值

  83. heighHR0 = (unsigned char)(heigh >> 8);//高電平裝入初值的高字節(jié)
  84. heighLR0 = (unsigned char)heigh;    //高電平裝入初值的低字節(jié)
  85. lowHR0   = (unsigned char)(low >> 8);  //低電平裝入初值的高字節(jié)
  86. lowLR0   = (unsigned char)low;    //低電平裝入初值的低字節(jié)

  87.   TMOD &= 0xF0;//清零T0控制位
  88. TMOD |= 0x01;//設(shè)定T0工作方式1,16位可設(shè)定時器
  89. TH0 = heighHR0;
  90. TL0 = heighLR0;//裝入高電平計數(shù)初值
  91. PWMOUTLED = 1;//開始時PWM輸出高電平
  92. TR0 = 1;
  93. ET0 = 1;
  94. EA  = 1;
  95. }

  96. /*關(guān)閉PWM*/
  97. void ClosePWM()
  98. {
  99. TR0 = 0;//關(guān)閉Timer0
  100. ET0 = 0;//關(guān)閉T0中斷
  101. PWMOUTLED = 1;//PWM輸出高電平
  102. }

  103. /*定時器T0中斷服務(wù)*/
  104. void Timer0_ISP() interrupt 1
  105. {
  106. //判斷PWM現(xiàn)在輸出的是高電平還是低電平
  107.    if (PWMOUTLED)
  108.    {
  109.     TH0 = lowHR0;
  110.     TL0 = lowLR0;//裝載低電平計數(shù)初值
  111.     PWMOUTLED = 0;//PWM輸出低電平
  112.    }
  113.    else
  114.    {
  115.     TH0 = heighHR0;
  116.     TL0 = heighLR0;//重裝裝載高電平計數(shù)初值
  117.     PWMOUTLED = 1;//PWM輸出高電平
  118.    }
  119. }
復(fù)制代碼



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

使用道具 舉報

沙發(fā)
ID:358930 發(fā)表于 2018-11-27 22:52 | 只看該作者
幫你上個源代碼工程文件

STC15F2K60S2的PWM小燈.zip

37.6 KB, 下載次數(shù): 78, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

板凳
ID:880867 發(fā)表于 2021-2-18 16:14 | 只看該作者
heighHR0 = (unsigned char)(heigh >> 8);//高電平裝入初值的高字節(jié)
heighLR0 = (unsigned char)heigh;    //高電平裝入初值的低字節(jié)

想問一下這個過程是怎么實現(xiàn)的就像裝入初值的低字節(jié)
回復(fù)

使用道具 舉報

地板
ID:230742 發(fā)表于 2021-2-19 13:55 | 只看該作者
這是適合金沙灘宋師傅的開發(fā)板開發(fā)的程序。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 北条麻妃av一区二区三区 | 国产清纯白嫩初高生视频在线观看 | 日韩欧美一区二区三区免费观看 | 丝袜美腿av | 欧美一区二区三区在线看 | 91影片 | 91色在线视频 | 拍戏被cao翻了h承欢 | 韩国主播午夜大尺度福利 | 中文av网站 | 天天人人精品 | 男女视频免费 | 91精品国产色综合久久不卡98 | 天堂av免费观看 | 91成人 | 日本a网站 | 欧美在线视频a | 久热电影 | 亚洲欧美综合精品久久成人 | 国产日韩欧美中文 | 特级丰满少妇一级aaaa爱毛片 | 一区二区中文字幕 | 99这里只有精品视频 | 国产成人福利 | 亚洲 中文 欧美 日韩 在线观看 | 欧美高清视频在线观看 | 天天综合国产 | 91精品国产一区二区三区蜜臀 | 久久一| 大乳boobs巨大吃奶挤奶 | 亚洲三级在线观看 | 国产精品一区二区不卡 | 久久久.com| 国产日韩欧美在线 | 国产三区视频在线观看 | 一级毛片在线播放 | 无码一区二区三区视频 | 青青草一区 | 中文字幕欧美一区 | 一区二区福利视频 | 亚洲精品一区二区三区蜜桃久 |