日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

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

51單片機(jī)如何擴(kuò)展外部端口

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

         要用51產(chǎn)生PWM去控制LED,首先要確定PWM的周期T和占空比D,確定了這些以后,可以用定時器產(chǎn)生一個時間基準(zhǔn)t,比如定時器溢出n次的時間是PWM的高電平的時間,則D*T=n*t,類似的可以求出PWM低電平時間需要多少個時間基準(zhǔn)n'。
那么就可以編寫程序,根據(jù)定的時間基準(zhǔn)t給定時器賦值初始化,然后開啟定時器,定義一個標(biāo)志位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單片機(jī)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)標(biāo)志,0:漸亮,1:漸暗*/    TMOD = 0x01;                         /*時間基準(zhǔn)為1ms*/    TH0 = (65536 - 100) / 256;                /*右端表達(dá)式編譯后為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;            /*時間基準(zhǔn)為1ms*/    TL0 = (65536 - 100) % 256;          /*即每1ms觸發(fā)一次中斷*/        if(count == PWM_ON)                    /*若中斷次數(shù)達(dá)到亮度設(shè)定值*/    {                                        P2 = 0xFF;                           /*則熄燈*/    }        count++;                                  /*每次中斷記錄+1*/        if(count == CYCLE)                      /*若中斷次數(shù)達(dá)到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

阳春市| 临江市| 麻江县| 佛冈县| 庆阳市| 洛南县| 永寿县| 三亚市| 大埔县| 上饶市| 五寨县| 五寨县| 泸溪县| 宿州市| 成安县| 敦煌市| 辽宁省| 思南县| 曲周县| 琼结县| 维西| 镇平县| 库伦旗| 梁平县| 呼图壁县| 南澳县| 东安县| 安西县| 汉中市| 翁牛特旗| 宜黄县| 嘉定区| 西丰县| 镇江市| 临汾市| 都安| 高平市| 大埔区| 云南省| 阿拉尔市| 航空|