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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602顯示PWM頻率和占空比 單片機(jī)源程序Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:507486 發(fā)表于 2020-3-15 11:10 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include "LCD1602.H"
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. unsigned int fr=50; //頻率 50hz
  6. unsigned char dc=50;//50%占空比
  7. uchar fr_g=0;
  8. uchar fr_s=0;
  9. uchar dc_g=0;
  10. uchar dc_s=0;
  11. /* 配置并啟動 PWM,fr-頻率,dc-占空比 */

  12. unsigned int high,low;
  13. unsigned long tmp;
  14. unsigned char HighRH = 0; //高電平重載值的高字節(jié)
  15. unsigned char HighRL = 0; //高電平重載值的低字節(jié)
  16. unsigned char LowRH = 0; //低電平重載值的高字節(jié)
  17. unsigned char LowRL = 0; //低電平重載值的低字節(jié)

  18. void ConfigPWM();
  19. void ClosePWM();

  20. sbit key1=P3^1; //定義按鍵位置  加占空比
  21. sbit key2=P3^0; //定義按鍵位置  減占空比
  22. sbit PWMOUT = P2^1;

  23. /********************************************************************
  24. //* 名稱 : Delay_1ms()
  25. //* 功能 : 延時子程序,延時時間為 1ms * x
  26. //* 輸入 : x (延時一毫秒的個數(shù))
  27. //* 輸出 : 無
  28. //***********************************************************************/
  29. void Delay_1ms(uint i)//1ms延時
  30. {
  31.         uchar x,j;
  32.         for(j=0;j<i;j++)
  33.         for(x=0;x<=148;x++);        
  34. }

  35. void key()
  36. {

  37.         if(!key1)   //按下相應(yīng)的按鍵,數(shù)碼管顯示相應(yīng)的碼值
  38.                 { Delay_1ms(10);
  39.                         if(!key1)
  40.                         {
  41.       if(dc++>=100)dc=100;
  42.         
  43.                         }
  44.                         while(!key1);
  45.                 }
  46.                
  47.                 if(!key2)
  48.                 {
  49.                 Delay_1ms(10);
  50.                         if(!key2)
  51.                         {
  52.                       if(dc--<=0)dc=100;
  53.                
  54.                         }
  55.                         while(!key2);
  56.                 }
  57.         }

  58. void ConfigPWM()
  59. {
  60. tmp = (11059200/12) / fr; //計算一個周期所需的計數(shù)值
  61. high = (tmp*dc) / 100; //計算高電平所需的計數(shù)值
  62. low = tmp - high; //計算低電平所需的計數(shù)值
  63. high = 65536 - high + 12; //計算高電平的重載值并補(bǔ)償中斷延時
  64. low = 65536 - low + 12;//計算低電平的重載值并補(bǔ)償中斷延時

  65. HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節(jié)
  66. HighRL = (unsigned char)high;
  67. LowRH = (unsigned char)(low>>8); //低電平重載值拆分為高低字節(jié)
  68. LowRL = (unsigned char)low;

  69. TMOD &= 0xF0; //清零 T0 的控制位
  70. TMOD |= 0x01; //配置 T0 為模式 1
  71. TH0 = HighRH; //加載 T0 重載值
  72. TL0 = HighRL;
  73. ET0 = 1; //使能 T0 中斷
  74. TR0 = 1; //啟動 T0
  75. PWMOUT = 1; //輸出高電平
  76. }

  77. /* 關(guān)閉 PWM */
  78. void ClosePWM()
  79. {
  80. TR0 = 0; //停止定時器
  81. ET0 = 0; //禁止中斷
  82. PWMOUT = 1; //輸出高電平
  83. }





  84. void main()
  85. {uint i;
  86.         LCD1602_Init(1,0,0);//lcd1602初始化
  87.         Delay_1ms(100);
  88.         
  89.         LCD1602_DisplayChar(1,2,':');//顯示e
  90.         LCD1602_DisplayChar(2,1,'d');//顯示p
  91.         LCD1602_DisplayChar(2,2,':');//顯示:
  92.         LCD1602_DisplayChar(1,6,'H');//顯示t
  93.         LCD1602_DisplayChar(1,7,'Z');//顯示e
  94.         LCD1602_DisplayChar(2,6,'%');//顯示t
  95.         LCD1602_DisplayChar(1,1,'f');//顯示t
  96.         TMOD = 0x00;
  97.   TL1 = 0xD8;
  98.   TH1 = 0xf0;
  99.   TR1 = 1; //啟動定時器
  100.   ET1 = 1; //使能定時器中斷
  101.         EA = 1; //開總中斷


  102.         while(1)
  103.         {
  104.                 key();
  105.                 ConfigPWM();
  106.            for (i=0; i<40000; i++);
  107.                 fr_g = fr%10;
  108.                 fr_s = fr /10;
  109.                 dc_g = dc%10;
  110.                 dc_s = dc/10;
  111.         LCD1602_DisplayChar(1,4,fr_s+48);//顯示t
  112.         LCD1602_DisplayChar(1,5,fr_g+48);//顯示e
  113.         LCD1602_DisplayChar(2,4,dc_s+48);//顯示p
  114.         LCD1602_DisplayChar(2,5,dc_g+48);//顯示:
  115.         
  116.         }
  117.         
  118. }


  119. /* T0 中斷服務(wù)函數(shù),產(chǎn)生 PWM 輸出 */
  120. void InterruptTimer0() interrupt 1
  121. {

  122. if (PWMOUT == 1)
  123. { //當(dāng)前輸出為高電平時,裝載低電平值并輸出低電平
  124. TH0 = LowRH;
  125. TL0 = LowRL;
  126. PWMOUT = 0;
  127. }
  128. else
  129. { //當(dāng)前輸出為低電平時,裝載高電平值并輸出高電平
  130. TH0 = HighRH;
  131. TL0 = HighRL;
  132. PWMOUT = 1;
  133. }
  134. }
  135. void TM1_Isr() interrupt 3 using 1
  136. {
  137. key();
  138. }
復(fù)制代碼

全部資料51hei下載地址:
lcd1602顯示PWM頻率和占空比1.rar (66.36 KB, 下載次數(shù): 100)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:162491 發(fā)表于 2020-3-16 22:02 | 只看該作者
感謝分享 下來看看
回復(fù)

使用道具 舉報

板凳
ID:214276 發(fā)表于 2020-3-17 01:14 | 只看該作者
最近看到有些傳感器輸出的是PWM信號,不知道大神能不能寫個檢測PWM值的程序。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产片淫级awww | av在线一区二区三区 | 日日网 | 粉嫩国产精品一区二区在线观看 | 最新中文字幕 | 国产黄色电影 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 国产一区二区自拍 | 欧美一页| 波多野结衣电影一区 | 中文字幕1区 | 日本精品视频在线 | 欧美精品久久久 | 视频一区在线观看 | 日韩午夜影院 | 国产一区二区精华 | 成人免费黄色片 | 国产a一区二区 | 一区二区三区福利视频 | 精品久久久久久久久久久久久 | 欧美日韩在线综合 | 91久久久精品国产一区二区蜜臀 | 成人网av | 欧美一级免费黄色片 | www久久久 | 中文字字幕在线中文乱码范文 | 亚洲欧美国产一区二区三区 | 精品动漫一区 | 欧美精品一区二区三区四区五区 | 一区二区三区在线播放 | 国产成人av一区二区三区 | 日韩欧美精品一区 | 无码一区二区三区视频 | 国产视频导航 | 欧美成人免费在线视频 | 啪视频在线 | 天天视频一区二区三区 | 精品无码久久久久久国产 | 嫩草视频在线免费观看 | 久久久久久av | 98久久 |