两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.定時(shí)器中斷實(shí)現(xiàn)間隔切換

在第六章第4講的測(cè)試代碼中提到過(guò)數(shù)碼管微閃爍問(wèn)題,這是由于三八譯碼器的IO端口切換的間隔時(shí)間不均勻?qū)е拢@部分的問(wèn)題宋老師已經(jīng)在《手把手教你學(xué)51單片機(jī)》文檔6.4.2節(jié)有詳細(xì)解釋?zhuān)⒃?.5.2節(jié)里解決了這個(gè)問(wèn)題。數(shù)碼管掃描函數(shù)我們使用定時(shí)器0強(qiáng)制實(shí)現(xiàn)間隔1ms切換三八譯碼器的IO輸出,這樣保證了每個(gè)數(shù)碼管被點(diǎn)亮的時(shí)間都是均勻的。我們?cè)谥骱瘮?shù)里不停地執(zhí)行數(shù)碼管顯示函數(shù)。這里是測(cè)試代碼,用定時(shí)器1實(shí)現(xiàn)add間隔50ms自增1,數(shù)碼管顯示add的值。

#include <reg52.h> 
#include <function.h> //詳見(jiàn)第六章第8講
#include <timer.h>
 
u32 add=9999;
 
void main()
{   
    LED_Init();          //初始化LED硬件模塊
    EA = 1;              //閉合總中斷開(kāi)關(guān)
    TIM0_Init(1000,33);  //定時(shí)1ms,因?yàn)橹袛嗪瘮?shù)占用時(shí)間多一點(diǎn),所以微調(diào)的值跨度比較大
    TIM1_Init(50000,10); //定時(shí)50ms,10是微調(diào)使定時(shí)更精確
    
    while(1)
    {   
        ShowNumber(add);
    }   
}
 
void TIM0_IRQHandler() interrupt 1
{
    TH0 = T0RH; //重新加載重載值
    TL0 = T0RL;
    SEG_Scan(); //間隔1ms執(zhí)行三八譯碼器的不同IO輸出低電平
}
 
void TIM1_IRQHandler() interrupt 3
{
    TH1 = T1RH; //重新加載重載值
    TL1 = T1RL;
    add++; 
}


2.PWM簡(jiǎn)單入門(mén)

PWM概念在《手把手教你學(xué)51單片機(jī)》文檔10.2節(jié)有很好的解釋?zhuān)@里筆者就不費(fèi)筆墨講解了,我們簡(jiǎn)單入門(mén)PWM來(lái)讓8盞小燈實(shí)現(xiàn)較暗地點(diǎn)亮。P0端口輸出如下

P0端口輸出圖

代碼實(shí)現(xiàn)如下

#include <reg52.h> 
#include <function.h> //詳見(jiàn)第六章第8講
#include <timer.h>

u8 pwm=0;
void main()
{   
    LED_Init();            //初始化LED硬件模塊
    EA = 1;                //閉合總中斷開(kāi)關(guān)
    TIM0_Init(1000,10);    //定時(shí)1ms,10是微調(diào)使定時(shí)更精確
    
    while(1)
    {   
        if(pwm<=8)P0=0xFF; //pwm在0~8之間都會(huì)執(zhí)行“P0=0xFF;”,也就是占空比為90%,小燈顯示較暗
        else P0=0x00; 
    }   
}
 
void TIM0_IRQHandler() interrupt 1
{ 
    TH0 = T0RH;       //重新加載重載值
    TL0 = T0RL;
  
    pwm++;
    if(pwm>=10)pwm=0; //pwm在0~9之間間隔1ms變化
}


3.淺談例程代碼

在宋老師的lesson10_2例程代碼中的“void ConfigPWM(unsigned int fr, unsigned char dc)”函數(shù)里大家閱讀起來(lái)可能有點(diǎn)吃力,這里筆者解析一下。

我們先再次復(fù)習(xí)一下知識(shí),定時(shí)器每加1經(jīng)過(guò)的時(shí)間是(12/11059200)秒,如果計(jì)數(shù)到11059200(多次溢出),時(shí)間也就過(guò)去了12秒。時(shí)間過(guò)去了1秒的時(shí)候計(jì)數(shù)值就是(11059200/12)。

“ConfigPWM(100, 10);”意味著tmp的數(shù)值周期是(1/100)秒,也就是頻率為100Hz。這個(gè)周期里高電平定時(shí)持續(xù)的時(shí)間為“(1/100)*0.1”秒,低電平定時(shí)持續(xù)的時(shí)間為“(1/100)*0.9”秒。所以占空比為10%。

主函數(shù)里的延時(shí)就是讓這個(gè)PWM波形持續(xù)一段時(shí)間,然后又到下一個(gè)占空比為40%的PWM波形持續(xù)一段時(shí)間。4個(gè)階段的占空比不同,也就表現(xiàn)為小燈的顯示亮度不同。

這里筆者做個(gè)效果圖給大家理解吧

PWM效果圖

點(diǎn)贊(0)

C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程

解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程

從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程

只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線(xiàn)編譯      (登錄可減少運(yùn)行等待時(shí)間)