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

1.聯(lián)系生活

我們已經(jīng)學(xué)會(huì)控制無源蜂鳴器鳴叫的時(shí)間,那么作為本章最后一講,聯(lián)合我們學(xué)過的LED章節(jié)知識(shí),寫一個(gè)用開發(fā)板實(shí)現(xiàn)一個(gè)生活常見現(xiàn)象的代碼,比如常見機(jī)器報(bào)警時(shí),燈亮的時(shí)候蜂鳴器就響,燈滅的時(shí)候就不響,時(shí)間上表現(xiàn)為燈亮的時(shí)候蜂鳴器馬上響,亮的時(shí)間和鳴叫的時(shí)間都為1秒,然后燈滅與鳴叫停止也持續(xù)1秒,循環(huán)往復(fù)就形成報(bào)警信號(hào)了。

#include <reg52.h> 
sbit BEEP  = P1^6;
sbit LED2  = P0^0;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;

void delay_ms(unsigned int x)
{
    unsigned int i,j;
    if(x==1000)
    {
        for(i=0;i<19601;i++)//延時(shí)1s
        {
            for(j=5;j>0;j--);
        }
    }
    else while(x--)for(j=115;j>0;j--);
}

void main()
{  
    unsigned int i,time;
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************
   
    while(1)
    {
        LED2=0; 
        for(time=0;time<3700;time++)//軟件調(diào)試出此處for循環(huán)用了1秒
        {  
            BEEP=!BEEP;
            for(i=0;i<30;i++);
        }
        BEEP=0;//固定住蜂鳴器的電平使其不響,其實(shí)這條語句也可不寫,因?yàn)樯厦娴膄or語句執(zhí)行完就沒有方波產(chǎn)生了也就不響了,大家可以注釋掉這個(gè)語句看看現(xiàn)象是不是一樣的
        LED2=1;
        delay_ms(1000);//延時(shí)1s 
    } 
}

用手機(jī)秒表同步來測還挺準(zhǔn)的。

 

2.學(xué)以致用

既然我們學(xué)過函數(shù)封裝,那么我們也意識(shí)到主函數(shù)中實(shí)現(xiàn)蜂鳴器鳴叫的部分可以把它封裝起來,加入注釋表示這個(gè)函數(shù)實(shí)現(xiàn)的是蜂鳴器鳴叫1秒,也就是用掉了CPU運(yùn)行時(shí)間的1秒。

有了這個(gè)思路我們再重新思考,既然蜂鳴器鳴叫1秒占用了CPU運(yùn)行1秒的時(shí)間,那么我們不就認(rèn)為此時(shí)它對LED2來說就是一個(gè)延時(shí)函數(shù)了,所以我們再猜想,如果不用“void delay_ms()”做延時(shí)照樣實(shí)現(xiàn)本講所說的報(bào)警功能,有什么辦法嗎?

有!那就是用函數(shù)傳參。

#include <reg52.h> 
sbit BEEP  = P1^6;
sbit LED2  = P0^0;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;

void BEEP_ON(unsigned char x)
{
    unsigned int i,time;
    for(time=0;time<3643;time++)//重新改寫為3643才使軟件調(diào)試出此處for循環(huán)用了1秒,因?yàn)榧佣嗔薸f else語句所以花費(fèi)的時(shí)間就不一樣了
    {  
        if(x==1) BEEP=!BEEP;
        else BEEP=0;
        for(i=0;i<30;i++);
    }
}

void main()
{  
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************
   
    while(1)
    {
        LED2=0; 
        BEEP_ON(1);//參數(shù)為1,蜂鳴器就響1秒
        LED2=1;
        BEEP_ON(0);//參數(shù)為0,引腳電平被固定,蜂鳴器不響,但還是占用了CPU運(yùn)行1秒的時(shí)間
    } 
}

對于初學(xué)者來說自己怎么也不會(huì)想得到這么巧妙的方法,是不是我們不適合搞編程呢。當(dāng)然并不是,只是我們讀的程序太少,分析和思考的時(shí)間還不夠,所以說我們想熟悉整套流程是需要3個(gè)月來磨煉的!

點(diǎn)贊(1)

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

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

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

從零到寫出一個(gè)爬蟲的Python編程課程

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

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

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

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

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