日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无源蜂鸣器c语言编程,无源蜂鸣器+LED

發(fā)布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无源蜂鸣器c语言编程,无源蜂鸣器+LED 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.聯(lián)系生活

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

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++)//延時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)生了也就不響了,大家可以注釋掉這個語句看看現(xiàn)象是不是一樣的

LED2=1;

delay_ms(1000);//延時1s

}

}

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

2.學(xué)以致用

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

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

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

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)的時間就不一樣了

{

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秒的時間

}

}

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

總結(jié)

以上是生活随笔為你收集整理的无源蜂鸣器c语言编程,无源蜂鸣器+LED的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。