68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術(shù)中心 >> 單片機入門 >> 51單片機如何擴展外部端口

51單片機如何擴展外部端口

作者:admin 來源:不詳 發(fā)布時間:2018-05-08  瀏覽:14
     我們知道 51單片機本身是沒有pwm接口的,這個程序是通過軟件模擬pwm.在一定的頻率的方波中,調(diào)整高電平和低電平的占空比,即可實現(xiàn)LED燈亮度控制。 

         要用51產(chǎn)生PWM去控制LED,首先要確定PWM的周期T和占空比D,確定了這些以后,可以用定時器產(chǎn)生一個時間基準t,比如定時器溢出n次的時間是PWM的高電平的時間,則D*T=n*t,類似的可以求出PWM低電平時間需要多少個時間基準n'。
那么就可以編寫程序,根據(jù)定的時間基準t給定時器賦值初始化,然后開啟定時器,定義一個標志位flag,根據(jù)flag的狀態(tài)決定輸出高平還是低電平,假設(shè)定義flag=1的時候輸出高電平,用一個變量去記錄定時器中斷的次數(shù),每次中斷就讓記錄中斷次數(shù)的變量+1,在中斷程序里面判斷這個變量的值是否到了 n,如果到了說明高電平的時間夠了,那么就改變flag為0,輸出低電平,同時記錄中斷變量的值清零,每次中斷的時候依舊+1,根據(jù)flag=0的情況跳去判斷記錄變量的值是否到了n' 如果到了,說明PWM的低電平時間夠了,那么就改flag=1,輸出改高電平,同時記錄次數(shù)變量清零,重新開始,如此循環(huán)便可得到想要的PWM波形。

 

/****************************************************************************************** * 文件:PWM.c                                                                     * 備注:51單片機PWM完全注釋                                          * ******************************************************************************************/#i nclude <STC89.H> unsigned char CYCLE;                        /*PWM周期長度*/unsigned char count = 0;             /*記錄中斷次數(shù)*/unsigned char PWM_ON;                    /*PWM高電平時間計數(shù)*/ void delay()                                 /*延時約78ms*/{    unsigned char i, j;                         for(j = 100; j; j--)                         for(i = 255; i; i--)            ;} void main(){    bit Flag;                                            /*變化狀態(tài)標志,0:漸亮,1:漸暗*/    TMOD = 0x01;                         /*時間基準為1ms*/    TH0 = (65536 - 100) / 256;                /*右端表達式編譯后為0xFF*/    TL0 = (65536 - 100) % 256;              /*同上*/    IE = 0x82;                                          /*開定時器0中斷0x82 = 10000010*/    TR0 = 1;                                  /*啟動定時器0*/    CYCLE = 10;                           /*十級亮度,即十級PWM*/     while(!Flag)                                /*漸亮,每一次變化亮度增加1*/    {        delay();                              /*延時*/        PWM_ON++;                                /*高電平脈寬延長,即亮度增加*/        if(PWM_ON == CYCLE)               /*若高電平脈寬增長到整個周期*/        {            Flag = 1;                                  /*則轉(zhuǎn)為漸暗*/        }    }     while(Flag)                                     /*漸暗,每一次變化亮度減少1*/    {        delay();                                       /*延時*/        PWM_ON--;                                /*高電平脈寬縮短,即亮度降低*/        if(PWM_ON == 0)                       /*若高電平脈寬縮短到0*/        {            Flag = 0;                                /*則轉(zhuǎn)為漸亮*/        }    }} void time0_server() interrupt 1 using 1{    TH0 = (65536 - 100) / 256;            /*時間基準為1ms*/    TL0 = (65536 - 100) % 256;          /*即每1ms觸發(fā)一次中斷*/        if(count == PWM_ON)                    /*若中斷次數(shù)達到亮度設(shè)定值*/    {                                        P2 = 0xFF;                           /*則熄燈*/    }        count++;                                  /*每次中斷記錄+1*/        if(count == CYCLE)                      /*若中斷次數(shù)達到PWM周期長度*/    {        count = 0;                              /*則清零中斷記錄*/        if(PWM_ON != 0)                      /*若此時亮度值非零*/        {            P2 = 0;                            /*則點燈*/        }    }}

編輯:admin  最后修改時間:2018-05-08

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

石景山区| 高唐县| 台安县| 余姚市| 读书| 鹿邑县| 信宜市| 育儿| 临澧县| 呼和浩特市| 桂林市| 霞浦县| 微山县| 毕节市| 牡丹江市| 文化| 屏边| 克山县| 日喀则市| 榆树市| 太谷县| 罗田县| 红原县| 青铜峡市| 酒泉市| 玉环县| 黎川县| 新沂市| 宝鸡市| 华池县| 讷河市| 吉木乃县| 河池市| 卢氏县| 德令哈市| 北安市| 黄浦区| 磐安县| 康平县| 格尔木市| 西乌珠穆沁旗|