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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10760|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品www | 最新中文字幕在线 | 久久久激情视频 | 99re热精品视频国产免费 | av在线一区二区三区 | 最新国产在线 | 久久精品国产一区二区电影 | 久草中文网 | 亚洲一区二区三区在线播放 | 国产一区精品在线 | www久久久 | 影音先锋男 | 亚洲精选一区二区 | 国产视频中文字幕 | 91天堂网| 久久国内精品 | 欧美日韩在线视频一区 | 国产精品久久久久久婷婷天堂 | 天堂色综合| 999久久久 | 久久久久国产一级毛片 | 九色在线 | 午夜视频在线 | 亚洲成人自拍网 | 91高清免费观看 | 久久婷婷香蕉热狠狠综合 | h在线播放| 国产欧美精品一区二区三区 | 在线第一页 | 亚洲91| 老牛嫩草一区二区三区av | 久久久久久精 | 99视频在线免费观看 | 成人伊人 | 综合一区| 日韩中文视频 | 国产人成精品一区二区三 | 中文成人在线 | 亚洲视频 欧美视频 | 91高清在线观看 | 在线视频三区 |