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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10884|回復: 6
收起左側

注釋詳細的51單片機pwm調光代碼

[復制鏈接]
ID:433086 發表于 2019-5-18 14:59 | 顯示全部樓層 |閱讀模式
單片機pwm調光源程序如下:
  1. /*-----------------------------------------------
  2.   名稱:PWM調光
  3.   修改:無
  4.   內容:通過PWM(脈寬調制)調節LED的亮度
  5. ------------------------------------------------*/
  6. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  7. sbit LED0=P1^0;// 用sbit 關鍵字 定義 LED到P1.0端口,LED是自己任意定義且容易記憶的符號


  8. void Delay(unsigned int t); //函數聲明
  9. /*------------------------------------------------
  10.                     主函數
  11. ------------------------------------------------*/
  12. void main (void)
  13. {
  14.                   
  15. unsigned int CYCLE=1000,PWM_LOW=0;//定義周期并賦值
  16. while (1)         //主循環
  17.   {
  18. LED0=1;
  19. Delay(60000);        //特意加延時,可以看到熄滅的過程
  20. for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低
  21. //電平時間,這個循環中低電平時長從1累加到CYCLE(周期)的值,即600次

  22.                    LED0=0;        //點亮LED  
  23.                    Delay(PWM_LOW);//延時長度,600次循環中從1加至599
  24.                    LED0=1;        //熄滅LED
  25.               Delay(CYCLE-PWM_LOW);//延時長度,600次循環中從599減至1
  26.      
  27.    }
  28. LED0=0;
  29. for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //與逐漸變亮相反的過程

  30.                    LED0=0;
  31.                    Delay(PWM_LOW);
  32.                    LED0=1;
  33.               Delay(CYCLE-PWM_LOW);
  34.      
  35.    }
  36.                      //主循環中添加其他需要一直工作的程序
  37.   }
  38. }
  39. /*------------------------------------------------
  40. 延時函數,含有輸入參數 unsigned int t,無返回值
  41. unsigned int 是定義無符號整形變量,其值的范圍是
  42. 0~65535
  43. ------------------------------------------------*/
  44. void Delay(unsigned int t)
  45. {
  46. while(--t);
  47. }
復制代碼

所有資料51hei提供下載:
15-PWM調光.zip (20.94 KB, 下載次數: 165)


回復

使用道具 舉報

ID:563595 發表于 2020-6-4 00:48 | 顯示全部樓層
這個程序我覺得是很標準的寫法,容易讀。感謝。
回復

使用道具 舉報

ID:709856 發表于 2020-12-31 08:03 | 顯示全部樓層
借鑒一下,做了個九檔調光電路,數碼管顯示。
回復

使用道具 舉報

ID:468878 發表于 2020-12-31 10:14 | 顯示全部樓層
有點意思,做單純的PWM還是思路不錯的,沒搞計時器,最簡單的。
回復

使用道具 舉報

ID:390416 發表于 2020-12-31 11:37 | 顯示全部樓層
#include "STC89.H"                                        //頭文件包含
#include <intrins.h>                                //頭文件包含
typedef unsigned char u8;                        //重新定義數據類型名
typedef unsigned short u16;                        //重新定義數據類型名
typedef unsigned long u32;                        //重新定義數據類型名
sbit PWM_OUT=P2^1;        
u8 idata PWM_Write_Byte[3]=0;

// 定時器0初始化  晶振11059200,12T,輸出50Hz的PWM,占空比0~255
// 定時器初值為:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
//***************************祁緒電子 2020年5月***
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定時器工作模式
        TMOD |= 0x02;                                        //配置定時器工作模式 8位自動重裝模式
    TL0 = 0xB8;;                    //定時器初值
    TH0 = 0xB8;                                //定時器重裝初值
    TR0 = 1;                        //啟動定時器0
    ET0=1;                                                         //允許定時器0申請中斷
        EA=1;                                                        //中斷總閘閉合
}
//定時器0的CPU處理函數,位置任意寫都行
//****************************祁緒電子 2020年5月***
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部變量,不丟失數據
        if(pwm_t<PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}

// PWM 數模變換數據分配
//**************************祁緒電子 2020年5月***
void PWM_Allot()                                          
{
        static u8 kkk=0;        
        static u8 count=0;
        count++;
        if(count>100)
        {
                count=0;
                kkk++;
                PWM_Write_Byte[0]=kkk;        //kkk為占空比自動增加
                PWM_Write_Byte[1]=10;        
                PWM_Write_Byte[2]=10;
        }
}


void main()                                                        //主函數
{
        PWM_Init();
        while(1)                                                //主函數大循環
        {
                PWM_Allot();        
        }
}
回復

使用道具 舉報

ID:120677 發表于 2020-12-31 14:36 | 顯示全部樓層
程序很標準的寫法 注釋得詳細
回復

使用道具 舉報

ID:390416 發表于 2020-12-31 15:21 | 顯示全部樓層
STC89單片機 定時器做PWM程序 http://www.zg4o1577.cn/bbs/dpj-200820-1.html
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利精品一区 | 天天插天天干 | 亚洲36d大奶网 | 国产福利在线播放 | 久久久999成人 | 国产精品亚洲欧美日韩一区在线 | 免费在线观看黄网站 | 欧美在线观看一区二区 | 久久伊人久久 | 日韩视频免费在线 | 久久综合婷婷 | 成人毛片在线观看 | 一区二区免费视频 | 中国美女一级黄色片 | 午夜丁香视频在线观看 | 国产传媒在线观看 | 一级片在线观看视频 | 日韩av在线不卡 | 成人激情视频免费在线观看 | 成人亚洲视频 | 精品国产欧美日韩不卡在线观看 | 粉嫩一区二区三区四区公司1 | 很黄很污的网站 | 精品少妇一区二区三区日产乱码 | 成人av一区二区亚洲精 | 亚洲欧美综合精品久久成人 | 91五月天| 超碰av人人| 欧美 日韩精品 | 亚洲一区久久 | 日本激情视频在线播放 | 久久国产综合 | 成人一区av | 中文字幕在线视频免费视频 | 久久在线 | 在线播放第一页 | 成人在线视频一区 | 久久新 | 日韩欧美久久精品 | 国产视频久久 | 国产成人精品久久二区二区 |