999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用單片機驗證音調高低與振動頻率的關系

2019-10-25 06:24:40吝歡歡任新成王玉清
物理教學探討 2019年9期
關鍵詞:單片機定義

吝歡歡,任新成,王玉清

延安大學物理與電子信息學院,陜西延安716000

1引言

“音調”是物理8年級上冊《聲音的特性》一節中的重要概念。我們都知道,聲音的高低叫做音調,在日常生活中,我們可以通過聽覺的不同感受來辨別音調的高低。但是,由于對發聲體的振動頻率我們無法直觀感知,更難以獲得準確的數據。所以,“音調高低與振動頻率的關系”就成為本節的教學難點。因此,如何讓學生更好地感受音調的高低、明確振動頻率的大小,并進一步得到兩者的相互關系就成為教學的關鍵所在[1]。

利用AT89C51單片機的定時器中斷功能,通過改變蜂鳴器的發聲頻率來控制音調高低,模擬簡易電子琴的工作過程。能夠使學生更加直觀地感受物理現象,精確驗證音調高低與發聲體振動頻率的關系,總結物理規律。而且單片機操作系統成本低廉 (一般在二三十元不等),性價比高,為學習和應用提供了便利條件。

2 實驗基本原理介紹

2.1 AT89C51單片機簡介

AT89C51單片機是美國ATMEL公司生產的低電壓、高性能CMOS8位單片機,內含4KB可反復擦寫的只讀程序存儲器(ROM)和128KB隨機數據存儲器(RAM)。內置通用8位中央處理器(CPU)和Flash存儲單元,并且兼容MCS-51指令系統。

圖1 AT89C51單片機控制蜂鳴器電路圖

2.2 AT89C51單片機控制發聲系統

AT89C51單片機控制發聲系統[2]如圖1所示,它是由單片機、時鐘電路、復位電路、按鍵電路和蜂鳴器電路組成。其中,時鐘電路由一個12 MHz的晶振和兩個33 pF的電容組成,它們決定了單片機的工作時間精度為1 μs。該系統采用按鍵手動復位方式,即在單片機運行期間,用手動按鍵的方式使單片機初始化。系統利用P1口的P1.0-P1.7引腳設置了8個獨立按鍵,當有鍵按下時,P1口相應的引腳置為低電平,單片機接收脈沖信號。在實驗中,我們用其中P1.0-P1.6這7個引腳分別來控制C調中音的7個音調。蜂鳴器電路主要由蜂鳴器、PNP型三極管和一個電阻組成,低電平有效,即當向電路輸入高電平(P3.0引腳置1)時,蜂鳴器中無電流通過,電路不發聲;當向其輸入低電平(P3.0引腳置0)時,蜂鳴器中有電流通過,產生蜂鳴。我們可以通過控制高、低電平的持續時間來形成不同頻率的脈沖電壓,驅動蜂鳴器發聲,從而實現對音調高低的控制。

2.3 音調控制原理

當單片機[3]內部定時器/計數器T0工作在計數器模式1時,寄存器TH0和TL0是以全部16位參與工作,計數長度為216=65 536。我們就可以通過改變計數初值TH0、TL0來產生不同的頻率。 例如,C 調中音 1(do)的音頻 f=523 Hz,周期s=1912 μs,定時器的定時時間為μs=956 μs,即每經過 956 μs,使輸出口改變一次脈沖電壓。定時器的計數值=956,則裝入T0計數器初值65 536-956=64 580,即啟動T0工作后,每計數956次時將產生溢出中斷,進入中斷服務后將P3.0(RXD)引腳輸出電平取反就可得到中音do的音符頻率,如圖2所示。

圖2 音符脈沖波形圖

同理,C調中音各音符的頻率與計數初值如表1所示。

表1 C調中音各音符的頻率與計數初值對照表

3 實驗過程

我們使用Keil C51軟件的C語言編寫程序來實現實驗目的。

3.1 準備工作

首先,啟動Keil C51軟件進入編輯界面,單擊“Project”菜單,在彈出的下拉子菜單中選擇“New Project”選項建立新工程,選擇文件保存路徑,輸入工程文件名后點擊保存,在彈出的對話框中選擇相應的單片機型號,即Atmel公司的AT89C51型單片機,點擊確定按鈕。然后,在編輯界面“File”菜單的下拉子菜單中單擊“New”選項新建文件。 再單擊“File”菜單下的“Save As”選項保存該文件,在彈出的對話框中“文件名”欄內輸入文件名及對應的擴展名,如“test.c”。單擊“保存”按鈕后回到編輯界面,單擊“Target 1”前面的“+”號,在“Source Group 1”上單擊右鍵后再單擊“Add Files to Group‘Source Group 1’”。 最后,在彈出的對話框中選中文件test.c,單擊 “Add”按鈕,如圖3所示。

圖3 Keil C51編輯界面

3.2 輸入程序和編譯

在KeilC51的編輯界面輸入如下C語言源程序:

#include<reg51.h> //包含51單片機寄存器定義的頭文件

sbit key1=P1^0; //將key1位定義為P1.0引腳

sbit key2=P1^1; //將key2位定義為P1.1引腳

sbit key3=P1^2; //將key3位定義為P1.2引腳

sbit key4=P1^3; //將key4位定義為P1.3引腳

sbit key5=P1^4; //將key5位定義為P1.4引腳

sbit key6=P1^5; //將key6位定義為P1.5引腳

sbit key7=P1^6; //將key7位定義為P1.6引腳

sbit sound=P3^0; //將sound位定義為P3.0

unsigned int C; //定義全局變量,儲存定時器的定時常數

unsigned long n; //定義無符號數n

//以下是C調中音的音頻宏定義

#define do 64580 //將“do”宏定義為中音“1”的初值64580

#define re 64687 //將“re”宏定義為中音“2”的初值64687

#define mi 64780 //將“mi”宏定義為中音“3”的初值64780

#define fa 64822 //將“fa”宏定義為中音“4”的初值64822

#define sol 64900 //將“sol”宏定義為中音“5”的初值64900

#define la 64969 //將“la”宏定義為中音“6”的初值64969

#define si 65031 //將“si”宏定義為中音“7”的初值65031

timer0()interrupt 1 //函數功能:產生中斷,改變脈沖電壓

{TH0=C/256; //對16位計數器高8位TH0賦值

TL0=C%256; //對16位計數器低8位TL0賦值

sound=~sound;} //取反形成脈沖電壓,輸出音頻

void main(void) //函數功能:主函數

{TMOD=0x01; //使用定時器0的工作模式1

ET0=1; //定時器T0中斷允許

EA=1; //開總中斷

while(1) //無限循環,按鍵掃描

{if(key1==0) //檢測key1鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key1) //如果key1鍵按下,循環指令

{C=do; //將中音do的初值賦給C

TR0=1;}} //開定時器T0

if(key2==0) //檢測key2鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key2) //如果key2鍵按下,循環指令

{C=re; //將中音re的初值賦給C

TR0=1;}} //開定時器T0

if(key3==0) //檢測key3鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key3) //如果key3鍵按下,循環指令

{C=mi; //將中音mi的初值賦給C

TR0=1;}} //開定時器T0

if(key4==0) //檢測key4鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key4) //如果key4鍵按下,循環指令

{C=fa; //將中音fa的初值賦給C

TR0=1;}} //開定時器T0

if(key5==0) //檢測key5鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key5) //如果key5鍵按下,循環指令

{C=sol; //將中音sol的初值賦給C

TR0=1;}} //開定時器T0

if(key6==0) //檢測key6鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key6) //如果key6鍵按下,循環指令

{C=la; //將中音la的初值賦給C

TR0=1;}} //開定時器T0

if(key7==0) //檢測key7鍵按下

{for(n=0;n<5000;n++); //延時 5ms,按鍵消抖,防止誤操作

while(!key7) //如果key7鍵按下,循環指令

{C=si; //將中音si的初值賦給C

TR0=1;}} //開定時器T0

TR0=0; //關定時器

sound=1;}} //關蜂鳴器

程序輸入完畢后,單擊“Project”菜單下的“Built Target”選項,確認編譯無誤,如圖4所示。

圖4 Keil C51程序編譯界面

3.3 調試和下載

依次單擊 “Debug”菜單下的“Start/Stop Debug Session”和“Go”選項調試運行,然后再依次單擊 “Stop Running” 和 “Start/Stop Debug Session”選項停止運行。選擇“Project”菜單下的“Options for Target ‘Target 1’”選項 ,在彈出的對話框中將“Target”選項卡的Xtal(MHz)一欄輸入 12,選擇“Output”選 項 卡中的“Create HEX File”選項,點擊確定按鈕,使程序編譯后產生HEX代碼,最后用燒錄軟件(STC-ISP)將程序下載至AT89C51單片機中即可,如圖5所示。

圖5 程序下載界面

4 實驗小結

利用AT89C51單片機的基本操作功能,可以用實驗的方法精確驗證音調高低與發聲體振動頻率的關系,使學生更加清晰、直觀地感受物理現象,自主總結物理規律,同時寓教于樂,通過模擬電子琴的工作流程,激發了學生強烈的好奇心和求知欲望,而且了解了有關編程方面的知識和方法,訓練了學生的邏輯思維。

猜你喜歡
單片機定義
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風格”
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
Microchip推出兩個全新PIC單片機系列
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国产在线视频欧美亚综合| 91麻豆国产精品91久久久| 久久午夜影院| 免费久久一级欧美特大黄| 免费一级α片在线观看| swag国产精品| 欧美在线精品一区二区三区| 国模私拍一区二区| 国产精品亚洲五月天高清| 亚洲最新地址| 日韩 欧美 国产 精品 综合| 久久久久中文字幕精品视频| 99精品影院| 亚洲人成在线免费观看| 日韩欧美国产三级| 亚洲成年人网| 亚洲黄网在线| 亚洲国模精品一区| 国产精品熟女亚洲AV麻豆| 国产哺乳奶水91在线播放| 亚洲综合片| 亚洲午夜国产精品无卡| 麻豆精品在线视频| 亚洲无码日韩一区| 国产91无码福利在线| 青草视频免费在线观看| 精品无码专区亚洲| 亚洲国产精品一区二区高清无码久久| 国产成人精品综合| 国产成人精品三级| 亚洲最黄视频| 老司国产精品视频91| 99re免费视频| 国产三级毛片| 久久精品人人做人人爽电影蜜月| 欧美色视频在线| 无码网站免费观看| 9cao视频精品| 日韩精品无码免费一区二区三区| 欧美成人a∨视频免费观看| 成人自拍视频在线观看| 亚洲人成网站色7799在线播放| 在线播放国产99re| 国产精品区网红主播在线观看| 亚洲欧美成人网| 99伊人精品| 亚洲精品你懂的| 国产福利在线免费观看| 国产91小视频在线观看| 色综合综合网| 91在线播放国产| 国产又爽又黄无遮挡免费观看 | 中国成人在线视频| 97综合久久| 亚洲最大福利视频网| 国产无遮挡猛进猛出免费软件| 亚洲成人动漫在线观看| 久久精品人人做人人爽97| 九九九国产| 天堂av高清一区二区三区| 国产黄在线观看| 国产www网站| 无码中文字幕乱码免费2| 久久香蕉国产线| 国产99视频免费精品是看6| lhav亚洲精品| 色香蕉网站| 婷婷丁香色| 日韩 欧美 小说 综合网 另类| 在线国产欧美| 日韩美毛片| 久久精品91麻豆| 免费国产一级 片内射老| 国产精品手机在线观看你懂的 | 精品第一国产综合精品Aⅴ| 国产精品美人久久久久久AV| 无码日韩精品91超碰| 亚洲swag精品自拍一区| 黄色污网站在线观看| 精品国产一区二区三区在线观看| 毛片免费在线视频| 色欲综合久久中文字幕网|