第一篇:430定時(shí)器學(xué)習(xí)心得
Msp430單片機(jī)一共有5種類(lèi)型的定時(shí)器。
看門(mén)狗定時(shí)器(WDT)、基本定時(shí)器(Basic Timer1)、8位定時(shí)器/計(jì)數(shù)器(8-bit
Timer/Counter)、定時(shí)器A(Timer_A)和定時(shí)器B(Timer_B)。但是這些模塊不是所有msp430型號(hào)都具有的功能。
1、看門(mén)狗定時(shí)器(WDT)
學(xué)過(guò)電子的人可能都知道,看門(mén)狗的主要功能就是當(dāng)程序發(fā)生故障時(shí)能使受控系統(tǒng)重新啟動(dòng)。
msp430中它是一個(gè)16位的定時(shí)器,有看門(mén)狗和定時(shí)器兩種模式。
2、基本定時(shí)器(Basic Timer1)
基本定時(shí)器是msp430x3xx和msp430F4xx系列器件中的模塊,通常向其他外圍提供低頻控制信號(hào)。它可以只兩個(gè)8位定時(shí)器,也可以是一個(gè)16位定時(shí)器。
3、8位定時(shí)器/計(jì)數(shù)器(8-bit Timer/Counter)
如其名字所示,它是8位的定時(shí)器,主要應(yīng)用在支持串行通信或數(shù)據(jù)交換,脈沖計(jì)數(shù)或累加以及定時(shí)器使用。
4、16位定時(shí)器A和B
定時(shí)器A在所有msp430系列單片機(jī)中都有,而定時(shí)器B在msp430f13x/14x和
msp430f43x/44x等器件中出現(xiàn),基本的結(jié)構(gòu)和定時(shí)器A是相同的,由于本人最先熟悉并應(yīng)用的是定時(shí)器A所以在這里就主要談一下自己對(duì)定時(shí)器A的了解和應(yīng)用。
定時(shí)器A是16位定時(shí)器,有4種工作模式,時(shí)鐘源可選,一般都會(huì)有3個(gè)可配置輸入端的比較/捕獲寄存器,并且有8種輸出模式。通過(guò)8種輸出模式很容易實(shí)現(xiàn)PWM波。定時(shí)器A的硬件電路大致可分為2類(lèi)功能模塊:
一:計(jì)數(shù)器TAR
計(jì)數(shù)器TAR是主體,它是一個(gè)開(kāi)啟和關(guān)閉的定時(shí)器,如果開(kāi)啟它就是一直在循環(huán)計(jì)數(shù),只會(huì)有一個(gè)溢出中斷,也就是當(dāng)計(jì)數(shù)由0xffff到0時(shí)會(huì)產(chǎn)生一個(gè)中斷TAIFG。
二:比較/捕獲寄存器CCRX
如何實(shí)現(xiàn)定時(shí)功能呢?這就要靠三個(gè)比較/捕獲寄存器了(以后用CCRx表示)。
當(dāng)計(jì)數(shù)器TAR的計(jì)數(shù)值等于CCRx時(shí)(這就是捕獲/比較中的比較的意思:比較TAR是否等于CCRx),CCRx單元會(huì)產(chǎn)生一個(gè)中斷。依據(jù)中斷即可得到相應(yīng)的定時(shí)時(shí)間了。
這樣我們可以通過(guò)定時(shí)器A得到三個(gè)定時(shí)時(shí)間了。
一:程序示例
我先給出我的一個(gè)應(yīng)用程序,然后通過(guò)程序來(lái)書(shū)名定時(shí)器A的基本用法。程序如下: /****************************************************
*定時(shí)器初始化
****************************************************/
void init_TimerA(void)
{
CCTL0 = CCIE;//1:開(kāi)啟比較器0中斷
CCR0 = 32768;// 2:定時(shí)時(shí)間的選取
其為1S秒定時(shí):因?yàn)檫x擇的是ACLK,UpMode,所以TAR每增加1次的時(shí)間為1/32768s,一共增加32768次,所以為1s
CCTL1 = CCIE;// 開(kāi)啟比較器1中斷
CCR1 = 100;// 3.66mS顯示延遲
TACTL = TASSEL_1 + MC_1;// 3:選擇時(shí)鐘源和計(jì)數(shù)模式
時(shí)鐘源為ACLK并且為增計(jì)數(shù)模式
LPM3;//進(jìn)入低功耗3
}
/****************************************************
*定時(shí)器0中斷
****************************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
//用戶(hù)代碼 TACCR0
}
/****************************************************
二:程序分析
1):看程序中的定時(shí)器初始化模塊。
1:CCTL0 = CCIE;
CCTLx是相應(yīng)比較/捕獲寄存器的控制寄存器,它可對(duì)比較/捕獲寄存器進(jìn)行設(shè)置。
這語(yǔ)句的意思是:開(kāi)啟了CCR0的中斷使能,當(dāng)計(jì)數(shù)器TAR計(jì)數(shù)到CCR0時(shí)產(chǎn)生中斷。2:CCR0 = 32768;
CCRx就是相應(yīng)比較器的值。
其為1S秒定時(shí):因?yàn)檫x擇的是ACLK,UpMode,所以TAR每增加1次的時(shí)間為1/32768s,一共增加32768次,所以為1s定時(shí)。
3:TACTL = TASSEL_1 + MC_1;
TACTL是計(jì)數(shù)器的控制寄存器。
TASSEL_x是時(shí)鐘源的選擇。
0——TACLK,使用外部引腳信號(hào)作為輸入
1——ACLK,輔助時(shí)鐘
2——MCLK,系統(tǒng)主時(shí)鐘
3——INCLK,外部輸入時(shí)鐘
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch(TAIV)
{
case2: //用戶(hù)代碼 break;// TACCR1
case4://用戶(hù)代碼 break;// TACCR2
case 10://用戶(hù)代碼 break;//TAIFG
}
//根據(jù)需要是否要退出低功耗模式
LPM3_EXIT;// 退出低功耗
}
二:程序分析
1):看程序中的定時(shí)器初始化模塊。
1:CCTL0 = CCIE;
CCTLx是相應(yīng)比較/捕獲寄存器的控制寄存器,它可對(duì)比較/捕獲寄存器進(jìn)行設(shè)置。這語(yǔ)句的意思是:開(kāi)啟了CCR0的中斷使能,當(dāng)計(jì)數(shù)器TAR計(jì)數(shù)到CCR0時(shí)產(chǎn)生中斷。2:CCR0 = 32768;
CCRx就是相應(yīng)比較器的值。
其為1S秒定時(shí):因?yàn)檫x擇的是ACLK,UpMode,所以TAR每增加1次的時(shí)間為1/32768s,一共增加32768次,所以為1s定時(shí)。
3:TACTL = TASSEL_1 + MC_1;
TACTL是計(jì)數(shù)器的控制寄存器。
TASSEL_x是時(shí)鐘源的選擇。
0——TACLK,使用外部引腳信號(hào)作為輸入
1——ACLK,輔助時(shí)鐘
第二篇:定時(shí)器課程設(shè)計(jì)心得體會(huì)
定時(shí)器課程設(shè)計(jì)的心得體會(huì)
課程設(shè)計(jì)共兩周,第一周的任務(wù)是設(shè)計(jì)出原理圖,并把PCB版圖畫(huà)出來(lái);第二周的任務(wù)是根據(jù)原理圖制作電路板,我們組共五個(gè)人,我們分工合作,共同學(xué)習(xí),共同進(jìn)步。
第一周的時(shí)候,我們五個(gè)人中有人主要負(fù)責(zé)畫(huà)圖,有人負(fù)責(zé)查閱資料,有人負(fù)責(zé)學(xué)protell99(因?yàn)槲覀兡壳斑€沒(méi)有學(xué)protell99,畫(huà)PCB版圖需要用),有人負(fù)責(zé)審閱方案,然后我們?cè)俟餐套h,盡量讓我們的方案更完善,這其中大家都發(fā)揮了不可缺少的作用。第二周的時(shí)候,就進(jìn)入實(shí)驗(yàn)室進(jìn)行實(shí)訓(xùn)了,其實(shí)好期待自己動(dòng)手制作電路板,滿(mǎn)懷信心和期待的進(jìn)入了實(shí)驗(yàn)室開(kāi)始了又一個(gè)新的體驗(yàn)。我們的老師很認(rèn)真很耐心的教導(dǎo)我們?cè)趺床僮?,尤其是一些注意事?xiàng),對(duì)我們這些初次做課程設(shè)計(jì)的來(lái)說(shuō)我們真的懂得很少,通過(guò)老師的細(xì)心指導(dǎo)后,我們便開(kāi)始實(shí)戰(zhàn)了。我們按照順序先把圖紙轉(zhuǎn)印到電路板上,然后再對(duì)電路板進(jìn)行腐蝕,腐蝕的過(guò)程其實(shí)挺有意思的,看著電路板上的電路圖的線條在溶液里慢慢的越來(lái)越清晰的顯現(xiàn)出來(lái),其他部位的銅越來(lái)越少…目不轉(zhuǎn)睛的盯著電路板看,生怕錯(cuò)過(guò)了每一個(gè)細(xì)節(jié),終于腐蝕好了,雖然只完成了小小的一步,但我們也很興奮。接下來(lái)該打孔了,我們小心的操作著,我們組的每個(gè)成員都親自試著打孔,體驗(yàn)?zāi)欠N感覺(jué)。等打好孔后,刷了松香一切就緒后,開(kāi)始插件,好多器件自己以前從來(lái)都沒(méi)有見(jiàn)過(guò),只在課本上學(xué)習(xí)它的結(jié)構(gòu),性質(zhì)和功能,可是見(jiàn)都沒(méi)見(jiàn)過(guò),比如三極管,我以前就沒(méi)有見(jiàn)過(guò),直到這次見(jiàn)了后才知道原來(lái)一個(gè)三極管竟這么??!接下來(lái)焊接,對(duì)女生來(lái)說(shuō),焊接更是沒(méi)有接觸過(guò),我先看著他們焊,看了好長(zhǎng)時(shí)間終于鼓起勇氣決定自己也試試,拿上電烙鐵就感覺(jué)到它柄的溫度,慢慢的小心的焊下去…終于都做好了,最后是調(diào)試的過(guò)程,看著我們自己制作的電路板要工作了,我們很激動(dòng)同時(shí)也很緊張,我們剛開(kāi)始插上電源時(shí)預(yù)置一個(gè)數(shù)后,顯示器上并不顯示數(shù)字增加計(jì)時(shí),我們都面面相覷,可是我們并沒(méi)有灰心,我們開(kāi)始檢查是我們哪里出了錯(cuò),最后經(jīng)過(guò)我們認(rèn)真檢查和思考終于把錯(cuò)誤找了出來(lái)并改正了過(guò)來(lái),再次調(diào)試,我們預(yù)置60秒,看著顯示器的數(shù)字從零開(kāi)始增加,我們繃著心弦,終于顯示59,60報(bào)警器發(fā)出聲音報(bào)警,調(diào)試成功,我們好高興,感覺(jué)有點(diǎn)成就感。
通過(guò)這次課程設(shè)計(jì),我學(xué)習(xí)到了不少平時(shí)在課堂上學(xué)習(xí)不到的東西。
一、對(duì)課本上的知識(shí)有更深的理解。
通過(guò)原理圖的設(shè)計(jì),對(duì)課本上的知識(shí)有了更深的理解,課本上的知識(shí)是機(jī)械的,表面的,很零碎的,通過(guò)課程設(shè)計(jì),把原來(lái)以為很散的書(shū)本知識(shí)變的更為有聯(lián)系,對(duì)課本知識(shí)有了更深的理解。
二、對(duì)該理論在實(shí)踐中的應(yīng)用有深刻的理解。
通過(guò)設(shè)計(jì)原理,制作電路板,到調(diào)試成功實(shí)現(xiàn)功能,把以前疑惑比如學(xué)這些知識(shí)都是干什么用的,通過(guò)這次課程設(shè)計(jì),對(duì)該理論在實(shí)踐中的應(yīng)用和意義,有了更深刻的理解。
三、激發(fā)了學(xué)習(xí)的積極性。
通過(guò)該課程設(shè)計(jì),全面系統(tǒng)的理解了定時(shí)器構(gòu)造的一般原理和基本實(shí)現(xiàn)方法。把學(xué)過(guò)的電子技術(shù)的知識(shí)強(qiáng)化,能夠把課堂上學(xué)的知識(shí)通過(guò)我們?cè)O(shè)計(jì)的電路表示出來(lái),加深了對(duì)理論知識(shí)的理解。并激發(fā)了我們學(xué)習(xí)的積極性。
四、理解了學(xué)科之間的融合滲透。
本次課程設(shè)計(jì)所用器件大部分是用電子技術(shù)的數(shù)字部分里學(xué)的器件完成的,而也有些是模擬部分學(xué)的器件,而把這些器件連接起來(lái)用的則是電路的知識(shí),這就把這三門(mén)學(xué)科聯(lián)系起來(lái),把各個(gè)學(xué)科之間的知識(shí)融合起來(lái),對(duì)電子技術(shù)整體的認(rèn)識(shí)更加深刻。
五、鍛煉了自己的動(dòng)手能力以及加深了對(duì)自己認(rèn)識(shí)。
我們平時(shí)都只是學(xué)習(xí)課本上的知識(shí),動(dòng)手特別少,以致動(dòng)手能力比較差,所以通過(guò)這次課程設(shè)計(jì),通過(guò)自己動(dòng)手制作,鍛煉了自己的動(dòng)手能力,同時(shí)也是對(duì)自己能力的一次檢測(cè),使我們對(duì)自己有了更深一步的認(rèn)識(shí),看自己在哪些方面還不足,為以后更好的提高自己提供了幫助。
六、提高了自己與別人相處以及合作的能力。
因?yàn)檎n程設(shè)計(jì)是分小組做的,而且在設(shè)計(jì)過(guò)程中我們需要分工合作,這就要求我們要有與人友好相處和與人友好合作的能力,這在以后的工作中很重要。通過(guò)這次課程設(shè)計(jì),鍛煉了同時(shí)也提高了我們的這項(xiàng)能力,無(wú)論是對(duì)我們的生活還是對(duì)我們以后的工作都有很大的幫助。
很喜歡課程設(shè)計(jì),可以鍛煉我們各個(gè)方面的能力,希望以后有更多這樣的實(shí)訓(xùn)機(jī)會(huì)。同時(shí)也要謝謝兩位指導(dǎo)老師這么辛苦的帶領(lǐng)我們完成這些實(shí)訓(xùn)內(nèi)容。
第三篇:實(shí)驗(yàn)二 定時(shí)器程序設(shè)計(jì)121
一、實(shí)驗(yàn)?zāi)康膶W(xué)會(huì)使用單片機(jī)定時(shí)器產(chǎn)生定時(shí)中斷,并利用定時(shí)中斷產(chǎn)生更長(zhǎng)時(shí)間延時(shí)。
二、實(shí)驗(yàn)設(shè)備及器件
IBM PC機(jī)
一臺(tái)
DP-51PRO.NET單片機(jī)仿真器、編程器、實(shí)驗(yàn)儀三合一綜合開(kāi)發(fā)平臺(tái)
三、實(shí)驗(yàn)內(nèi)容
1.實(shí)驗(yàn)二 定時(shí)器程序設(shè)計(jì)
2.編寫(xiě)程序,使P10端口來(lái)控制LED閃爍 3.C語(yǔ)言程序
//1ms定時(shí)中斷實(shí)現(xiàn)100ms發(fā)光管閃爍 #include“REG51.h” sbit LED=P1^0;void main(void){ TMOD = 0x01;//設(shè)置定時(shí)器模式 16位定時(shí)器
TL0 = 0x18;//設(shè)置定時(shí)初值
TH0 = 0xFC;//設(shè)置定時(shí)初值
TR0 = 1;//定時(shí)器T0開(kāi)始計(jì)時(shí)
ET0=1;//開(kāi)定時(shí)器中斷
EA=1;
//開(kāi)總中斷
while(1);}
//******************** //1ms void pit0(void)interrupt 1(中斷程序){ static unsigned char ms_cnt=0;//16 ffff TL0 = 0x18;//設(shè)置定時(shí)初值
TH0 = 0xFC;//設(shè)置定時(shí)初值
if(++ms_cnt==100){
ms_cnt=0;
LED=!LED;} } 定時(shí)器的由程序
直接匯編語(yǔ)言 ORG 0 AJMP MAIN ORG 0BH AJMP PIT0 MAIN: MOV TMOD,#01H MOV TH0,#18H MOV TL0,#0FCH SETB TR0 SETB ET0 SETB EA SJMP $
生成;********************************** PIT0: MOV TH0,#18H MOV TL0,#0FCH INC R7 CJNE R7,#100,PIT0_R MOV R7,#0 CPL P1.0 PIT0_R: RETI END
四 實(shí)驗(yàn)要求
學(xué)會(huì)使用并掌握單片機(jī)定時(shí)器中斷來(lái)實(shí)現(xiàn)LED100ms閃爍。
五 實(shí)驗(yàn)步驟
1.調(diào)試運(yùn)行本節(jié)實(shí)驗(yàn)程序。若程序無(wú)錯(cuò)誤,編譯并進(jìn)行二進(jìn)制轉(zhuǎn)換,下載程序。
2.連接線路,將A2區(qū)的P10端口連接到D1區(qū)的任意LED接口。3.觀察LED燈閃爍情況
第四篇:AT89C52定時(shí)器2工作方式[定稿]
·定時(shí)器2:
定時(shí)器2 是一個(gè)16 位定時(shí)/計(jì)數(shù)器。它既可當(dāng)定時(shí)器使用,也可作為外部事件計(jì)數(shù)器使用,其工作方式由特殊功能寄
存器T2CON(如表3)的C/T2 位選擇。定時(shí)器2 有三種工作方式:捕獲方式,自動(dòng)重裝載(向上或向下計(jì)數(shù))方式和波特率發(fā)生器方式,工作方式由T2CON 的控制位來(lái)選擇。定時(shí)器2 由兩個(gè)8 位寄存器TH2 和TL2 組成,在定時(shí)器工作方式中,每個(gè)機(jī)器周期TL2 寄存器的值加1,由于一個(gè)機(jī)器周期由12 個(gè)振蕩時(shí)鐘構(gòu)成,因此,計(jì)數(shù)速率為振蕩頻率的1/12。在計(jì)數(shù)工作方式時(shí),當(dāng)T2 引腳上外部輸入信號(hào)產(chǎn)生由1 至0 的下降沿時(shí),寄存器的值加1,在這種工作方式下,每個(gè)機(jī)器周期的5SP2 期間,對(duì)外部輸入進(jìn)行采樣。若在第一個(gè)機(jī)器周期中采到的值為1,而在下一個(gè)機(jī)器周期中采到的值為0,則在緊跟著的下一個(gè)周期的S3P1 期間寄存器加1。由于識(shí)別1 至0 的跳變需要2 個(gè)機(jī)器周期(24 個(gè)振蕩周期),因此,最高計(jì)數(shù)速率為振蕩頻率的1/24。為確保采樣的正確性,要求輸入的電平在變化前至少保持一個(gè)完整周期的時(shí)間,以保證輸入信號(hào)至少被采樣一次。
·捕獲方式:
在捕獲方式下,通過(guò)T2CON 控制位EXEN2 來(lái)選擇兩種方式。如果EXEN2=0,定時(shí)器2 是一個(gè)16 位定時(shí)器或計(jì)數(shù)器,計(jì)數(shù)溢出時(shí),對(duì)T2CON 的溢出標(biāo)志TF2 置位,同時(shí)激活中斷。如果EXEN2=1,定時(shí)器2 完成相同的操作,而當(dāng)T2EX 引
腳外部輸入信號(hào)發(fā)生1 至0 負(fù)跳變時(shí),也出現(xiàn)TH2 和TL2 中的值分別被捕獲到RCAP2H 和RCAP2L 中。另外,T2EX 引
腳信號(hào)的跳變使得T2CON 中的EXF2 置位,與TF2 相仿,EXF2 也會(huì)激活中斷。捕獲方式如圖4 所示。
·自動(dòng)重裝載(向上或向下計(jì)數(shù)器)方式:
當(dāng)定時(shí)器2工作于16位自動(dòng)重裝載方式時(shí),能對(duì)其編程為向上或向下計(jì)數(shù)方式,這個(gè)功能可通過(guò)特殊功能寄存器T2CON
(見(jiàn)表5)的DCEN 位(允許向下計(jì)數(shù))來(lái)選擇的。復(fù)位時(shí),DCEN 位置“0”,定時(shí)器2 默認(rèn)設(shè)置為向上計(jì)數(shù)。當(dāng)DCEN
置位時(shí),定時(shí)器2 既可向上計(jì)數(shù)也可向下計(jì)數(shù),這取決于T2EX 引腳的值,參見(jiàn)圖5,當(dāng)DCEN=0 時(shí),定時(shí)器2 自動(dòng)設(shè)置
為向上計(jì)數(shù),在這種方式下,T2CON 中的EXEN2 控制位有兩種選擇,若EXEN2=0,定時(shí)器2 為向上計(jì)數(shù)至0FFFFH 溢出,置位TF2 激活中斷,同時(shí)把16 位計(jì)數(shù)寄存器RCAP2H 和RCAP2L重裝載,RCAP2H 和RCAP2L 的值可由軟件預(yù)置。若EXEN2=1,定時(shí)器2 的16 位重裝載由溢出或外部輸入端T2EX 從1 至0 的下降沿觸發(fā)。這個(gè)脈沖使EXF2 置位,如果
中斷允許,同樣產(chǎn)生中斷。
定時(shí)器2 的中斷入口地址是:002BH ——0032H。
當(dāng)DCEN=1 時(shí),允許定時(shí)器2 向上或向下計(jì)數(shù),如圖6 所示。這種方式下,T2EX 引腳控制計(jì)數(shù)器方向。T2EX 引腳為邏
輯“1”時(shí),定時(shí)器向上計(jì)數(shù),當(dāng)計(jì)數(shù)0FFFFH 向上溢出時(shí),置位TF2,同時(shí)把16 位計(jì)數(shù)寄存器RCAP2H 和RCAP2L 重裝
載到TH2 和TL2 中。T2EX 引腳為邏輯“0”時(shí),定時(shí)器2 向下計(jì)數(shù),當(dāng)TH2 和TL2 中的數(shù)值等于RCAP2H 和RCAP2L
中的值時(shí),計(jì)數(shù)溢出,置位TF2,同時(shí)將0FFFFH 數(shù)值重新裝入定時(shí)寄存器中。
當(dāng)定時(shí)/計(jì)數(shù)器2 向上溢出或向下溢出時(shí),置位EXF2 位。
·波特率發(fā)生器:
當(dāng)T2CON(表3)中的TCLK 和RCLK 置位時(shí),定時(shí)/計(jì)數(shù)器2 作為波特率發(fā)生器使用。如果定時(shí)/計(jì)數(shù)器2 作為發(fā)送器或
接收器,其發(fā)送和接收的波特率可以是不同的,定時(shí)器1 用于其它功能,如圖7 所示。若RCLK 和TCLK 置位,則定時(shí)器2
工作于波特率發(fā)生器方式。
波特率發(fā)生器的方式與自動(dòng)重裝載方式相仿,在此方式下,TH2 翻轉(zhuǎn)使定時(shí)器2 的寄存器用RCAP2H 和RCAP2L 中的16
位數(shù)值重新裝載,該數(shù)值由軟件設(shè)置。
在方式1 和方式3 中,波特率由定時(shí)器2 的溢出速率根據(jù)下式確定:方式1和3的波特率=定時(shí)器的溢出率/16
定時(shí)器既能工作于定時(shí)方式也能工作于計(jì)數(shù)方式,在大多數(shù)的應(yīng)用中,是工作在定時(shí)方式(C/T2=0)。定時(shí)器2 作為波
特率發(fā)生器時(shí),與作為定時(shí)器的操作是不同的,通常作為定時(shí)器時(shí),在每個(gè)機(jī)器周期(1/12 振蕩頻率)寄存器的值加1,而作為波特率發(fā)生器使用時(shí),在每個(gè)狀態(tài)時(shí)間(1/2 振蕩頻率)寄存器的值加1。波特率的計(jì)算公式如下:
方式1和3的波特率=振蕩頻率/{32*[65536-(RCP2H,RCP2L)]}
式中(RCAP2H,RCAP2L)是RCAP2H 和RCAP2L中的16 位無(wú)符號(hào)數(shù)。定時(shí)器2 作為波特率發(fā)生器使用的電路如圖7 所示。T2CON 中的RCLK 或TCLK=1 時(shí),波特率工作方式才有效。在波特率發(fā)生器工作方式中,TH2 翻轉(zhuǎn)不能使TF2 置位,故而不產(chǎn)生中斷。但若EXEN2 置位,且T2EX 端產(chǎn)生由1 至0 的負(fù)跳變,則會(huì)使EXF2 置位,此時(shí)并不能將(RCAP2H,RCAP2L)的內(nèi)容重新裝入TH2 和TL2 中。所以,當(dāng)定時(shí)器2 作
為波特率發(fā)生器使用時(shí),T2EX 可作為附加的外部中斷源來(lái)使用。需要注意的是,當(dāng)定時(shí)器2 工作于波特率器時(shí),作為定
時(shí)器運(yùn)行(TR2=1)時(shí),并不能訪問(wèn)TH2 和TL2。因?yàn)榇藭r(shí)每個(gè)狀態(tài)時(shí)間定時(shí)器都會(huì)加1,對(duì)其讀寫(xiě)將得到一個(gè)不確定的數(shù)值。
然而,對(duì)RCAP2 則可讀而不可寫(xiě),因?yàn)閷?xiě)入操作將是重新裝載,寫(xiě)入操作可能令寫(xiě)和/或重裝載出錯(cuò)。在訪問(wèn)定時(shí)器2
或RCAP2 寄存器之前,應(yīng)將定時(shí)器關(guān)閉(清除TR2)。
·可編程時(shí)鐘輸出:
定時(shí)器2 可通過(guò)編程從P1.0 輸出一個(gè)占空比為50%的時(shí)鐘信號(hào),如圖8 所示。P1.0 引腳除了是一個(gè)標(biāo)準(zhǔn)的I/O 口外,還可以通過(guò)編程使其作為定時(shí)/計(jì)數(shù)器2 的外部時(shí)鐘輸入和輸出占空比50%的時(shí)鐘脈沖。當(dāng)時(shí)鐘振蕩頻率為16MHz 時(shí),輸
出時(shí)鐘頻率范圍為61Hz—4MHz。
當(dāng)設(shè)置定時(shí)/計(jì)數(shù)器2 為時(shí)鐘發(fā)生器時(shí),C/T2(T2CON.1)=0,T2OE(T2MO
D.1)=1,必須由TR2(T2CON.2)啟
動(dòng)或停止定時(shí)器。時(shí)鐘輸出頻率取決于振蕩頻率和定時(shí)器2 捕獲寄存器(RCAP2H,RCAP2L)的重新裝載值,公式如下:
輸出時(shí)鐘頻率=振蕩器頻率/{4*[65536-(RCP2H,RCP2L)]}
在時(shí)鐘輸出方式下,定時(shí)器2 的翻轉(zhuǎn)不會(huì)產(chǎn)生中斷,這個(gè)特性與作為波特率發(fā)生器使用時(shí)相仿。定時(shí)器2 作為波特率
發(fā)生器使用時(shí),還可作為時(shí)鐘發(fā)生器使用,但需要注意的是波特率和時(shí)鐘輸出頻率不能分開(kāi)確定,這是因?yàn)樗鼈兺褂?/p>
RCAP2L和RCAP2L。
·UART:
AT89C52的UART 工作方式與AT89C51 工作方式相同。
·中斷:
AT89C52 共有6 個(gè)中斷向量:兩個(gè)外中斷(INT0 和INT1),3 個(gè)定時(shí)器中斷(定時(shí)器0、1、2)和串行口中斷。所有
這些中斷源如圖9 所示。
這些中斷源可通過(guò)分別設(shè)置專(zhuān)用寄存器IE 的置位或清0 來(lái)控制每一個(gè)中斷的允許或禁止。IE 也有一個(gè)總禁止位EA,它能控制所有中斷的允許或禁止。
注意表5 中的IE.6 為保留位,在AT89C51 中IE.5 也是保留位。程序員不應(yīng)將“1”寫(xiě)入這些位,它們是將來(lái)AT89 系
列產(chǎn)品作為擴(kuò)展用的。
定時(shí)器2 的中斷是由T2CON 中的TF2 和EXF2 邏輯或產(chǎn)生的,當(dāng)轉(zhuǎn)向中斷服務(wù)程序時(shí),這些標(biāo)志位不能被硬件清除,事實(shí)上,服務(wù)程序需確定是TF2 或EXF2 產(chǎn)生中斷,而由軟件清除中斷標(biāo)志位。定時(shí)器0 和定時(shí)器1 的標(biāo)志位TF0 和TF1 在定時(shí)器溢出那個(gè)機(jī)器周期的S5P2 狀態(tài)置位,而會(huì)在下一個(gè)機(jī)器周期才查
詢(xún)到該中斷標(biāo)志。然而,定時(shí)器2 的標(biāo)志位TF2 在定時(shí)器溢出的那個(gè)機(jī)器周期的S2P2 狀態(tài)置位,并在同一個(gè)機(jī)器周期內(nèi)
查詢(xún)到該標(biāo)志。
第五篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)音樂(lè)鬧鐘定時(shí)器
目錄:
0、任務(wù)書(shū)...............................................................................2
1、系統(tǒng)總體設(shè)計(jì)方案規(guī)劃與選定.......................................2
2、硬件設(shè)計(jì)...........................................................................5
3、軟件設(shè)計(jì)...........................................................................6
4、調(diào)試...................................................................................8
5、新增功能及實(shí)現(xiàn)方法.......................................................8
6、小結(jié)與體會(huì).......................................................................9
7、參考文獻(xiàn)...........................................................................9
8、附錄.................................................................................10
單片機(jī)課程設(shè)計(jì)
0.任務(wù)書(shū)
基于51單片機(jī)設(shè)計(jì)一個(gè)電子數(shù)字鐘,顯示時(shí)、分、秒,且具有鬧鐘功能。用8255接口實(shí)現(xiàn)4*8鍵盤(pán)及8位LED顯示。
32個(gè)鍵:0~9共10個(gè)鍵,調(diào)時(shí)(設(shè)置當(dāng)前時(shí)間)鍵;設(shè)定鬧鐘(定時(shí))鍵;走時(shí)鍵;光標(biāo)左右移動(dòng)各一個(gè)鍵。
要求鍵復(fù)位后,應(yīng)該最后面的LED上顯示H(待命狀態(tài))。
1.系統(tǒng)總體設(shè)計(jì)方案規(guī)劃與選定
1.1主控制芯片選擇
方案一:采用ARM微處理,做主控芯片,計(jì)算速度快,缺點(diǎn);成本高,控制較復(fù)雜,不容易焊接。
方案二:采用80C51單片機(jī)做主控制器,由單片機(jī)來(lái)完成采集和信號(hào)處理等底層的核心計(jì)算,做主控芯片,成本低,易控制,易實(shí)現(xiàn)。
經(jīng)過(guò)以上兩個(gè)方案比較,在此題方案二明顯優(yōu)于方案一,故采用80C51單片機(jī)做主控制器。
1.2定時(shí)模塊選擇
方案一:采用時(shí)鐘芯片DS1302。
DS1302 可以用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,且較單片機(jī)計(jì)時(shí)簡(jiǎn)單節(jié)約硬件資源,但存在時(shí)鐘精度不高,易受環(huán)境影響,出現(xiàn)時(shí)鐘混亂等缺點(diǎn)。
方案二:采用單片機(jī)內(nèi)部的定時(shí)系統(tǒng),外接晶振進(jìn)行分頻脈沖計(jì)數(shù)。
單片機(jī)課程設(shè)計(jì)
此系統(tǒng)采用12MHz晶振。
由于方案二使用簡(jiǎn)單,比方案一更適用該系統(tǒng)設(shè)計(jì),所以選擇方案二。
1.3 LED顯示及計(jì)時(shí)模塊選擇
方案一:74LS192計(jì)數(shù)器——74LS47七點(diǎn)顯示譯碼器
74LS192芯片是一塊可預(yù)置數(shù)可逆計(jì)數(shù)芯片,功能強(qiáng)大。將74LS192芯片CPU引腳接高電平可實(shí)現(xiàn)減法計(jì)數(shù),以倒計(jì)時(shí)顯示。可通過(guò)74LS47與LED共陽(yáng)極數(shù)字顯示器配合使用。
方案二:使用移位寄存器74HC595與譯碼器相連
74HC595具有8位移位寄存器和一個(gè)存儲(chǔ)器,使用時(shí)可直接與數(shù)字顯示器相連。
方案三:使用8255擴(kuò)展LED顯示計(jì)時(shí)模塊
8255是一個(gè)可編程并行接口芯片,有一個(gè)控制口和三個(gè)8位數(shù)據(jù)口,外設(shè)通過(guò)數(shù)據(jù)口與單片機(jī)進(jìn)行數(shù)據(jù)通信,各數(shù)據(jù)口的工作方式和數(shù)據(jù)傳送方向是通過(guò)用戶(hù)對(duì)控制口寫(xiě)控制字控制的。我們用到了A與B口分別進(jìn)行對(duì)數(shù)碼顯示管的片選和段選,且B口同時(shí)作為鍵盤(pán)掃描模塊的輸入口,與數(shù)碼顯示模塊分時(shí)復(fù)用。故采用方案三
1.4蜂鳴器的選擇
方案一:電磁式蜂鳴器
電磁式蜂鳴器主要是利用通電導(dǎo)體會(huì)產(chǎn)生磁場(chǎng)的特性,用一個(gè)固定的永久磁鐵與通電導(dǎo)體產(chǎn)生磁力推動(dòng)固定在線圈上的鼓膜。電磁式由于音色好,所以多用于語(yǔ)音、音樂(lè)等設(shè)備。對(duì)于不同提示音且考慮實(shí)際,此種較好。
方案二:壓電式蜂鳴器
單片機(jī)課程設(shè)計(jì)
壓電式蜂鳴器用的是壓電材料,即當(dāng)受到外力導(dǎo)致壓電材料發(fā)生形變時(shí)壓電材料會(huì)產(chǎn)生電荷。同樣,當(dāng)通電時(shí)壓電材料會(huì)發(fā)生形變。壓電式結(jié)構(gòu)簡(jiǎn)單耐用但音調(diào)單一音色差,適用于警報(bào)器等設(shè)備。
由于鬧鈴為音樂(lè)鬧鈴,所以使用電磁式蜂鳴器更為合適。
2.硬件設(shè)計(jì)
2.1 芯片的選擇
2.1.1 單片機(jī)80C51 2.1.1.1單片機(jī)80C51的組成
80c51單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說(shuō)明:
中央處理器:
中央處理器(CPU)是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。
數(shù)據(jù)存儲(chǔ)器(RAM)8051內(nèi)部有128個(gè)8位用戶(hù)數(shù)據(jù)存儲(chǔ)單元和128個(gè)專(zhuān)用寄存器單元,它們是統(tǒng)一編址的,專(zhuān)用寄存器只能用于存放控制指令數(shù)據(jù),用戶(hù)只能訪問(wèn),而不能用于存放用戶(hù)數(shù)據(jù),所以,用戶(hù)能使用的RAM只有128個(gè),可存放讀寫(xiě)的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶(hù)定義的字型表。
程序存儲(chǔ)器(ROM):
8051共有4096個(gè)8位掩膜ROM,用于存放用戶(hù)程序,原始數(shù)據(jù)或表格。
單片機(jī)課程設(shè)計(jì)
定時(shí)/計(jì)數(shù)器(ROM):
8051有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。
并行輸入輸出(I/O)口:
8051共有4組8位I/O口(P0、P1、P2或P3),用于對(duì)外部數(shù)據(jù)的傳輸。
2.1.1.2
MCS-51的引腳說(shuō)明:
MCS-52系列單片機(jī)中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個(gè)引腳中,正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對(duì)這些引腳的功能加以說(shuō)明:
MCS-51的引腳說(shuō)明:
MCS-52系列單片機(jī)中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個(gè)引腳中,正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用。
單片機(jī)課程設(shè)計(jì)
圖1 80C51的引腳
2.1.1.3 MCS-51單片機(jī)內(nèi)部定時(shí)器計(jì)數(shù)器、中斷系統(tǒng)簡(jiǎn)介(1)定時(shí)器計(jì)數(shù)器
1、MCS-51系列中51子系列有兩個(gè)16位的可編程定時(shí)計(jì)數(shù)器可:定時(shí)計(jì)數(shù)器T0和定時(shí)計(jì)數(shù)器T1。它由加法計(jì)數(shù)器、方式寄存器TMOD、控制寄存器TCON等組成。方式寄存器用于設(shè)定定時(shí)計(jì)數(shù)器T0和T1的工作方式,控制寄存器用于對(duì)定時(shí)計(jì)數(shù)器啟動(dòng)、停止進(jìn)行控制。
2、每個(gè)定時(shí)計(jì)數(shù)器既可以對(duì)系統(tǒng)時(shí)鐘計(jì)數(shù)實(shí)現(xiàn)定時(shí),也可以外部信號(hào)計(jì)數(shù)實(shí)現(xiàn)計(jì)數(shù)功能通過(guò)編程設(shè)定來(lái)實(shí)現(xiàn)。
3、每個(gè)定時(shí)計(jì)數(shù)器都有多種工作方式,其中T0有四種工作方式,T1有三種工作方式,T2有三種工作方式。通過(guò)編程可設(shè)定工作于某種方式。四種工作方式為:13位定時(shí)計(jì)數(shù)器、16位定時(shí)計(jì)數(shù)器、8位自動(dòng)重置定時(shí) 6
單片機(jī)課程設(shè)計(jì)
計(jì)數(shù)器、兩個(gè)8位定時(shí)計(jì)數(shù)器(只有T0有)
4、每一個(gè)定時(shí)計(jì)數(shù)器定時(shí)計(jì)數(shù)時(shí)間到時(shí)產(chǎn)生溢出,使相應(yīng)的溢出位置位,溢出可通過(guò)查詢(xún)或中斷方式處理。
(2)中斷系統(tǒng)
1、MCS-51單片機(jī)提供5個(gè)硬件中斷源,2個(gè)外部中斷源,2個(gè)定時(shí)計(jì)數(shù)器T0和T1的溢出中斷TF0和TF1,1個(gè)串行口發(fā)送TI和接收RI中斷。
2、MCS-51單片機(jī)中沒(méi)有專(zhuān)門(mén)的開(kāi)中斷和關(guān)中斷指令,對(duì)各個(gè)中斷源的允許和屏蔽是由內(nèi)部的中斷允許寄存器IE的各位來(lái)控制的。中斷允許寄存器IE的字節(jié)地址為A8H,可以進(jìn)行位尋址。系統(tǒng)復(fù)位時(shí),中斷允許寄存器IE的內(nèi)容為00H,如果要開(kāi)放某個(gè)中斷源,則必須使IE中的總控置位和對(duì)應(yīng)的中斷允許位置“1”。
3、MCS-51單片機(jī)有5個(gè)中斷源,為了處理方便,每個(gè)中斷源有兩級(jí)控制,高優(yōu)先級(jí)和低優(yōu)先級(jí)。通過(guò)由內(nèi)部的中斷優(yōu)先級(jí)寄存器IP來(lái)設(shè)置,中斷優(yōu)先級(jí)寄存器IP的字節(jié)地址為B8H,可以進(jìn)行位尋址。如果某位被置“1”,則對(duì)應(yīng)的中斷源被設(shè)為高優(yōu)先級(jí);如果某位被清零,則對(duì)應(yīng)的中斷源被設(shè)為低優(yōu)先級(jí)。對(duì)于同級(jí)中斷源,系統(tǒng)有默認(rèn)的優(yōu)先權(quán)順序,從高到低優(yōu)先權(quán)順序?yàn)橥獠恐袛?、定時(shí)計(jì)數(shù)器T0中斷、外部中斷
1、定時(shí)計(jì)數(shù)器T1中斷、串行口中斷。通過(guò)設(shè)置中斷優(yōu)先級(jí)寄存器IP能夠改變系統(tǒng)默認(rèn)的優(yōu)先級(jí)順序。
4、MCS-51單片機(jī)響應(yīng)中斷的條件為:中斷源有請(qǐng)求且中斷允許。
2.1.2 八位一體七段數(shù)碼管
單片機(jī)課程設(shè)計(jì)
數(shù)碼管使用條件:
a、段及小數(shù)點(diǎn)上加限流電阻。
b、使用電壓:段:根據(jù)發(fā)光顏色決定; 小數(shù)點(diǎn):根據(jù)發(fā)光顏色決定。c、使用電流:靜態(tài):總電流 80mA(每段 10mA);動(dòng)態(tài):平均電流 4-5mA 峰值電流 100mA 上圖為七段數(shù)碼管引腳圖,其中共陽(yáng)極數(shù)碼管引腳圖和共陰極相同。LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽(yáng)兩類(lèi),了解LED的這些特性,對(duì)編程是很重要的,因?yàn)椴煌?lèi)型的數(shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。右圖是共陰和共陽(yáng)極數(shù)碼管的內(nèi)部電路,它們的發(fā)光原理是一樣的,只是它們的電源極性不同而已。
將多只LED的陰極連在一起即為共陰式,而將多只LED的陽(yáng)極連在一起即為共陽(yáng)式。以共陰式為例,如把陰極接地,在相應(yīng)段的陽(yáng)極接上正電源,該段即會(huì)發(fā)光。當(dāng)然,LED的電流通常較小,一般均需在回路中接上限流電阻。假如我們將“b”和“c”段接上正電源,其它端接地或懸空,那么“b”和“c”段發(fā)光,此時(shí),數(shù)碼管顯示將顯示數(shù)字“1”。而將“a”、“b”、“d”、“e”和“g”段都接上正電源,其它引腳懸空,此時(shí)數(shù)碼管將顯示“2”。其它字符的顯示原理類(lèi)同。
單片機(jī)課程設(shè)計(jì)
2.1.3 并行接口擴(kuò)展芯片8255 8255內(nèi)部包括三個(gè)并行數(shù)據(jù)輸入/輸出端口,兩個(gè)工作方式控制電路,一個(gè)讀/寫(xiě)控制邏輯電路和8位總線緩沖器。
各部分功能概括如下:(1)端口A、B、C A口:是一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入鎖存器。B口:是一個(gè)8位數(shù)據(jù)輸入/輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入鎖存器。C口:是一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入緩沖器(輸入不鎖存)。
通常A口、B口作為數(shù)據(jù)輸入/輸出端口。C口作為控制/狀態(tài)信息端口,它在“方式控制字”的控制下可分為兩個(gè)4位端口,每個(gè)端口有一個(gè)4位鎖存器,分別與A口、B口配合使用,作為控制信號(hào)輸出或狀態(tài)信息輸入端口。
(2)工作方式控制電路
工作方式控制電路有兩個(gè),一個(gè)是A組控制電路,另一個(gè)是B組控制電路。
單片機(jī)課程設(shè)計(jì)
這兩組控制電路具有一個(gè)控制命令寄存器,用來(lái)接受中央處理器發(fā)來(lái)的控制字,以決定兩組端口的工作方式,也可根據(jù)控制字的要求對(duì)C口按位清“0”或者按位置“1”。
A組控制電路用來(lái)控制A口和C口的上半部分(PC7-PC4)。B組控制電路用來(lái)控制B口和C口的下半部分(PC3-PC0)。
(3)總線數(shù)據(jù)緩沖器
總線數(shù)據(jù)緩沖器是一個(gè)三態(tài)雙向8位緩沖器,作為8255與系統(tǒng)總線之間的接口,用來(lái)傳送數(shù)據(jù)、指令、控制命令以及外部狀態(tài)信息。
(4)讀/寫(xiě)控制邏輯電路
讀/寫(xiě)控制邏輯電路接受CPU發(fā)來(lái)的控制信號(hào)RD、WR、RESET、地址信號(hào)A1-A0等,然后根據(jù)控制信號(hào)的要求,將端口數(shù)據(jù)讀出,發(fā)往CPU,或者將CPU送來(lái)的數(shù)據(jù)寫(xiě)入端口。
2.2 電路的組成
2.2.1 數(shù)碼管顯示電路
數(shù)碼管顯示器成本低,配置靈活,與單片機(jī)接口簡(jiǎn)單,在單片機(jī)應(yīng)用系統(tǒng)中廣泛應(yīng)用。
數(shù)碼管的工作原理如下:
數(shù)碼管是由8個(gè)發(fā)光二極管構(gòu)成的顯示器件。在數(shù)碼管中,若將二極管的陽(yáng)極連在一起,稱(chēng)為共陽(yáng)極數(shù)碼管;若將二極管的陰極連在一起,稱(chēng)為共陰極數(shù)碼管。本次課程設(shè)計(jì)用到的8個(gè)數(shù)碼管均是共陽(yáng)極的。當(dāng)發(fā)光二極管導(dǎo)通時(shí),它就會(huì)發(fā)光。每個(gè)二極管就是一個(gè)筆劃,若干個(gè)二極管發(fā)光時(shí),就
單片機(jī)課程設(shè)計(jì)
構(gòu)成了一個(gè)顯示字符。將單片機(jī)的I/O口控制相應(yīng)的芯片與數(shù)碼管的a-g相連,高電平的位對(duì)應(yīng)的發(fā)光二極管亮,這樣,由I/O口輸出不同的代碼,就可以控制數(shù)碼管顯示不同的字符。8個(gè)數(shù)碼管均采用動(dòng)態(tài)顯示方式,顯示當(dāng)前的時(shí)間。
2.2.2 鍵盤(pán)掃描電路
鍵盤(pán)掃描電路圖
鍵盤(pán)可分為兩類(lèi):非編碼鍵盤(pán)和編碼鍵盤(pán);常見(jiàn)的非編碼鍵盤(pán)有兩種結(jié)構(gòu):獨(dú)立式鍵盤(pán)和矩陣式鍵盤(pán)。本次課程設(shè)計(jì)使用矩陣式鍵盤(pán)。
矩陣鍵盤(pán)的工作原理:按鍵設(shè)置在行、列線交點(diǎn)上,行、列線分別連接到按鍵開(kāi)關(guān)的兩端。列線通過(guò)上拉電阻接到+5V 電源上。無(wú)按鍵按下時(shí),列線處于高電平的狀態(tài),而當(dāng)有按鍵按下時(shí),列線電平與此列線相連的行線電平?jīng)Q定。
行列掃描法原理:第一步,使列線為編程的輸入線,行線是輸出線,拉低所有的行線,判斷列線的變化,如果有按鍵按下,按鍵按下的對(duì)應(yīng)列線被拉低,否則所有的列線都為高電平。第二步,在第一步判斷有鍵按下后,延時(shí)10ms消除機(jī)械抖動(dòng),再次讀取列值,如果此列線還處于低電平狀態(tài)則進(jìn)入下一步,否則返回第一步重新判斷。第三步,開(kāi)始掃描按鍵位置,采用 11
單片機(jī)課程設(shè)計(jì)
逐行掃描,分別拉低第一行,第二行,第三行,第四行,無(wú)論拉低哪一行其他三行都為高電平,讀取列值找到按鍵的位置,分別把行值和列值儲(chǔ)存在寄存器里。第四步,從寄存器中找到行值和列值并把其合并,得到按鍵值,對(duì)此按鍵值進(jìn)行編碼,與已經(jīng)設(shè)定好的鍵碼表進(jìn)行一一對(duì)比,如果不等,則繼續(xù)比較,如果相等,則利用轉(zhuǎn)移指令實(shí)現(xiàn)鍵盤(pán)掃描到按鍵功能的轉(zhuǎn)移。
2.2.3 音樂(lè)鬧鈴電路
蜂鳴器電路
2.2.3.1 蜂鳴器
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類(lèi)型,他廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電話 12
單片機(jī)課程設(shè)計(jì)
機(jī)等電子產(chǎn)品中作發(fā)聲器件。
2.2.3.2 單片機(jī)驅(qū)動(dòng)
單片機(jī)上面使用的蜂鳴器一般都是無(wú)源電磁式的蜂鳴器(如下圖所示)。它由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng),振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。
蜂鳴器發(fā)聲原理是電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來(lái)驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)IO引腳輸出的電流較小,單片機(jī)輸出的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,因此需要增加一個(gè)電流放大的電路。
2.2.4 復(fù)位電路
RESET/Vpd為復(fù)位信號(hào)復(fù)用腳,當(dāng)80C51通電,時(shí)鐘電路開(kāi)始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫(xiě)入07H,其它專(zhuān)用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開(kāi)始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),80C51的初始態(tài)。
上電復(fù)位:上電復(fù)位電路是—種簡(jiǎn)單的復(fù)位電路,只要在RST復(fù)位引腳接一個(gè)電容到VCC,接一個(gè)電阻到地就可以了。上電復(fù)位是指在給系統(tǒng)上電時(shí),復(fù)位電路通過(guò)電容加到RST復(fù)位引腳一個(gè)短暫的高電平信號(hào),這個(gè)復(fù) 13
單片機(jī)課程設(shè)計(jì)
位信號(hào)隨著VCC對(duì)電容的充電過(guò)程而回落,所以RST引腳復(fù)位的高電平維持時(shí)間取決于電容的充電時(shí)間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號(hào)必須維持足夠長(zhǎng)的時(shí)間。
電路圖如下:
上電自動(dòng)復(fù)位是通過(guò)外部復(fù)位電路的電容充電來(lái)實(shí)現(xiàn)的。只要Vcc的上升時(shí)間不超過(guò)1ms,就可以實(shí)現(xiàn)自動(dòng)上電復(fù)位。
3軟件設(shè)計(jì) 4.調(diào)試
5.新增功能及實(shí)現(xiàn)方法
5.1定時(shí)器產(chǎn)生音樂(lè)的原理
音樂(lè)的產(chǎn)生主要是通過(guò)單片機(jī)的I/O口輸出高低不同的脈沖信號(hào)來(lái)控制蜂鳴器發(fā)音。要想產(chǎn)生音頻脈沖信號(hào),需要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間。利用單片機(jī)定時(shí)器計(jì)時(shí)這個(gè)半個(gè)周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O口反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O口反相,這樣就能在此I/O口上得到此頻率的脈沖。
單片機(jī)課程設(shè)計(jì)
通常,利用單片機(jī)的內(nèi)部定時(shí)器0,工作在方式1下,改變計(jì)數(shù)初值TH0和TL0來(lái)產(chǎn)生不同頻率。
對(duì)于音樂(lè)的節(jié)拍,每個(gè)音符使用1個(gè)字節(jié),字節(jié)的高4位代表音符的高低,低4位代表音符的節(jié)拍。如果1拍為0.4S,1/4拍為0.1S,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間。假設(shè)1/4拍為1DELAY,那么1拍應(yīng)為4DELAY,以此類(lèi)推。所以只要求得1/4拍的DELAY,其余的節(jié)拍就是它的倍數(shù)。
總而言之,一首樂(lè)曲是由音階和節(jié)拍兩大要素構(gòu)成。一首樂(lè)曲演奏的原理是:不同音階分別對(duì)應(yīng)不同的頻率,發(fā)出不同的音調(diào),而節(jié)拍則控制發(fā)出音調(diào)時(shí)間的長(zhǎng)短;若將樂(lè)曲的音調(diào)連續(xù)發(fā)出,并使其按相應(yīng)的節(jié)拍變化,即可演奏一首樂(lè)曲。根據(jù)這一特點(diǎn),我們采用單片機(jī)輔以相應(yīng)的接口來(lái)設(shè)計(jì)音樂(lè)播放器。
5.2實(shí)現(xiàn)方法
利用定時(shí)器產(chǎn)生音樂(lè),添加了音樂(lè)鬧鐘功能,能在鬧鐘時(shí)間到來(lái)時(shí)蜂鳴器發(fā)出《祝你生日快樂(lè)》歌,但缺點(diǎn)是在響鈴時(shí)間里,無(wú)法正常顯示時(shí)間。在此次課程設(shè)計(jì)中,產(chǎn)生的音樂(lè)是利用查表法來(lái)改變定時(shí)器T1的初值,即改變音高,而通過(guò)延時(shí)來(lái)確定每個(gè)音符的長(zhǎng)短,即確定音長(zhǎng)。
6.小結(jié)與體會(huì) 7.參考文獻(xiàn)
【1】《單片機(jī)原理、接口及應(yīng)用——單片機(jī)嵌入式系統(tǒng)技術(shù)基礎(chǔ)(第2版)》,肖看、李群芳,清華大學(xué)出版社
【2】《單片機(jī)原理及應(yīng)用》,霍孟友,機(jī)械工程出版社
【3】《51系列單片機(jī)設(shè)計(jì)實(shí)例(第二版)》,樓然苗、李光飛,北京航
單片機(jī)課程設(shè)計(jì)
空航天大學(xué)出版社
8.附錄
8.1 源程序代碼ORG 0000H LJMP START
ORG 000BH LJMP T0INT;T0中斷服務(wù)程序
ORG 001BH LJMP TIM0
;;;;;主程序;;;;;;;;START:LCALL CLEA
START1:LCALL SCAN LCALL BELLSCAN LCALL KEYSCAN SJMP START1
CLEA:MOV R0,#70H MOV R7,#0EH CLEAR:MOV @R0,#00H INC R0 DJNZ R7,CLEAR;70H~7CH賦值0 MOV TMOD,#11H MOV TL0,#0B0H MOV TH0,#03CH SETB EA SETB ET0 SETB EX0 SETB TR0 CLR IT0 MOV 72H,#10 MOV 75H,#10 MOV 68H,#55H MOV 69H,#01H MOV 6AH,#00H CLR P1.0 RET
;延時(shí)子程序1MS DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET
DL10MS:ACALL SCAN ACALL SCAN ACALL SCAN RET
;《祝你生日快樂(lè)》音樂(lè)鬧鈴程序BELLSCAN:MOV A,6AH
CJNE A,7AH,BELLOUT
MOV A,69H
CJNE A,79H,BELLOUT
MOV A,68H
CJNE A,78H,BELLOUT
LCALL MUSIC BELLOUT:RET MUSIC:
MOV IE,#8AH MOV 30H,#00H
NEXT1:MOV A,30H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV R2,A JZ END0 ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH
單片機(jī)課程設(shè)計(jì)
JNZ SING CLR TR1 LJMP D1 SING:DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,@A+DPTR MOV TL1,A MOV 20H,A SETB TR1 D1:LCALL DELAY INC 30H LJMP NEXT1 END0:CLR TR1 LCALL BELLOUT
TIM0:PUSH ACC PUSH PSW MOV TL1,20H MOV TH1,21H CPL P1.0 POP PSW POP ACC RETI
DELAY:MOV R7,#02H D2:MOV R4,#187 D3:MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY RET
TABLE1:DW 64260,64400,64521,64580
DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217
TABLE:;1
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H;2
DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00H
SCAN:;把記的數(shù)送給偏移量
MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;寫(xiě)控制字,在顯示程序中A口輸出,B口輸出
MOV A,78H;秒 MOV B,#0AH DIV AB MOV 71H,A MOV 70H,B
MOV A,79H;分
MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B
MOV A,7AH;時(shí)
MOV B,#0AH DIV AB MOV 77H,A
MOV 76H,B;
單片機(jī)課程設(shè)計(jì)
T0中斷允許
;循環(huán)掃描顯示,數(shù)碼管顯示程序,數(shù)碼管為共陽(yáng)型
MOV R1,#70H MOV R5,#80H;位選
MOV R3,#08H SCAN1:MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;送A口位選
MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH MOVX @DPTR,A;送B口字形碼
LCALL DL1MS
INC R1;字形碼偏移量
MOV A,R5 RR A;位選碼
MOV R5,A DJNZ R3,SCAN1;8次
MOV DPTR,#7FFCH MOV A,#00H MOVX @DPTR,A;A口清位選
RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;對(duì)應(yīng)于“0”~“9”、“_”
;定時(shí)器T0中斷服務(wù)程序 T0INT:PUSH ACC
CLR ET0;停
CLR TR0;停T0工作
MOV TL0,#0B0H MOV TH0,#03CH SETB TR0;開(kāi)T0工作
INC 7BH;7BH存放20
MOV A,7BH
CJNE A,#14H,OUTT0;20
MOV 7BH,#00H
INC 78H;78H秒
MOV A,78H
CJNE A,#3CH,OUTT0;60
MOV 78H,#00H
INC 79H
;79H分
MOV A,79H
CJNE A,#3CH,OUTT0;60
MOV 79H,#00H
INC 7AH
;7AH時(shí)
MOV A,7AH
CJNE A,#18H,OUTT0;24
MOV 7AH,#00
OUTT0:SETB ET0;開(kāi)T0中斷允許
POP ACC RETI
;;;;;;鍵盤(pán)掃描子程序;;;;;;;;
KEYSCAN:MOV DPTR,#7FFFH MOV A,#82H
MOVX @DPTR,A;寫(xiě)控制字,此時(shí)A口輸出,B口輸入
MOV DPTR,#7FFEH MOV A,#00H
MOVX @DPTR,A;C口寫(xiě)0
單片機(jī)課程設(shè)計(jì)
MOV DPTR,#7FFDH MOVX A,@DPTR MOV B,A
;B口輸入
CJNE A,#0FFH,HAVE KEYOUT: RET
HAVE: LCALL DL10MS1 MOVX A,@DPTR CJNE A,B,KEYOUT;延時(shí)一段時(shí)間再檢測(cè)有鍵按下才開(kāi)始掃描處理
INC DPTR MOV A,#0FEH MOV B,A MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE0
MOV A,B RL A MOV B,A MOV DPTR,#7FFEH MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE1
MOV A,B RL A MOV B,A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE2
MOV A,B RL A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE3 ACALL KEYOUT;
KEYLIE0:MOV R2,#00H;R2 鍵碼 行值,第1行八個(gè)數(shù)
LJMP KEYGET
KEYLIE1:MOV R2,#08H;第2行,八個(gè)數(shù) LJMP KEYGET
KEYLIE2:MOV R2,#10H;第3行,八個(gè)數(shù) LJMP KEYGET
KEYLIE3:MOV R2,#18H;第4行,八個(gè)數(shù) LJMP KEYGET
KEYGET:MOV B,A
;B中存放B口讀入的列值
MOV DPTR,#KEYTAB MOV A,#0 NEXT: PUSH ACC
MOVC A,@A+DPTR CJNE A,B,AGAIN
POP ACC;A是偏移值,即列值 ADD A,R2;A中存放鍵碼
單片機(jī)課程設(shè)計(jì)
MOV B,A RL A
ADD A,B;PC偏移量
MOV LJMP KEYFUN30 LJMP KEYFUN31 RET KEYTAB:DB
0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DPTR,#KEYFUNTAB JMP @A+DPTR
AGAIN: POP ACC INC A CJNE A,#8,NEXT ACALL KEYOUT
KEYFUNTAB: LJMP KEYFUN00 LJMP KEYFUN01 LJMP KEYFUN02 LJMP KEYFUN03 LJMP KEYFUN04 LJMP KEYFUN05 LJMP KEYFUN06 LJMP KEYFUN07 LJMP KEYFUN08 LJMP KEYFUN09 LJMP KEYFUN10 LJMP KEYFUN11 LJMP KEYFUN12 LJMP KEYFUN13 LJMP KEYFUN14 LJMP KEYFUN15 LJMP KEYFUN16 LJMP KEYFUN17 LJMP KEYFUN18 LJMP KEYFUN19 LJMP KEYFUN20 LJMP KEYFUN21 LJMP KEYFUN22 LJMP KEYFUN23 LJMP KEYFUN24 LJMP KEYFUN25 LJMP KEYFUN26 LJMP KEYFUN27 LJMP KEYFUN28 LJMP KEYFUN29
;0 1 2 3 4 5 6 7
RET
DL10MS1:MOV R4,#20 DL3: MOV R5,#7DH DL4: NOP NOP
DJNZ R5,DL4 DJNZ R4,DL3 RET
KEYFUN00:MOV @R0,#00H MOV A,7EH
CJNE A,#0FFH,CALCU
RET
KEYFUN01:MOV @R0,#01H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN02:MOV @R0,#02H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN03:MOV @R0,#03H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN04:MOV @R0,#04H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN05:MOV @R0,#05H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN06:MOV @R0,#06H MOV A,7EH
CJNE A,#0FFH,CALCU RET
單片機(jī)課程設(shè)計(jì)
KEYFUN07:MOV @R0,#07H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN08:MOV @R0,#08H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN09:MOV @R0,#09H MOV A,7EH CJNE A,#0FFH,CALCU RET CALCU: MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 78H,A MOV A,74H MOV B,#0AH MUL AB ADD A,73H MOV 79H,A MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 7AH,A RET
KEYFUN10://調(diào)時(shí)鍵 CLR TR0
MOV R0,#77H;R0指向時(shí)的偏移量
MOV 7DH,#00H;閃爍標(biāo)志位
LCALL FLASH
RET FLASH:MOV A,@R0 MOV @R0,#0BH;R0(此時(shí)77H)指向熄滅的偏移量
MOV 7CH,#3DH;7CH單元存放循環(huán)次數(shù) RE: LCALL OFFSCAN DJNZ 7CH,RE;調(diào)用OFFSCAN60次,半秒
MOV @R0,A;R0(此時(shí)77H)指向原來(lái)的偏移量
MOV 7CH,#3DH RE1: LCALL OFFSCAN
DJNZ 7CH,RE1;調(diào)用OFFSCAN60次,半秒 LCALL KEYSCAN;鍵盤(pán)掃描
MOV A,7DH CJNE A,#0FFH,FLASH;判斷閃爍標(biāo)志位
RET OFFSCAN: PUSH ACC MOV R1,#70H MOV R5,#80H;位選
MOV R3,#08H OFFSCAN1:MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;寫(xiě)控制字
MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;A口輸出位選
MOV A,@R1 MOV DPTR,#OFFTAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH
MOVX @DPTR,A;B口輸出字形碼
LCALL DL1MS
INC R1
;R1指向下一個(gè)單元
MOV A,R5 RR A MOV R5,A;位選
DJNZ R3,OFFSCAN1;8次
單片機(jī)課程設(shè)計(jì)
MOV DPTR,#7FFCH MOV A,#00H MUL AB ADD A,73H MOV 69H,A MOVX @DPTR,A;A口位選清零
POP ACC RET OFFTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0FFH,89H RET //調(diào)時(shí)鍵按下
KEYFUN11:INC R0 RET KEYFUN12:DEC R0 RET KEYFUN13://走時(shí)鍵
MOV 7DH,#0FFH SETB TR0
RET KEYFUN14://鬧鈴鍵 MOV R0,#77H MOV 7EH,#0FFH;改變顯示單元,不改變計(jì)數(shù)單元
MOV 7DH,#00H;開(kāi)FLASH標(biāo)志位
LCALL FLASH RET
KEYFUN15://鬧鐘時(shí)間確認(rèn)鍵,寫(xiě)入計(jì)數(shù)比較單元
MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 68H,A
MOV A,74H MOV B,#0AH
MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 6AH,A RET
KEYFUN16:RET
KEYFUN17:MOV 7DH,#00H MOV 70H,#0CH
MOV 71H,#0BH
MOV 72H,#0BH
MOV 73H,#0BH
MOV 74H,#0BH
MOV 75H,#0BH
MOV 76H,#0BH
MOV 77H,#0BH;送熄滅符以及H符
MOV R0,#70H
LCALL FLASH
RET
KEYFUN18:MOV 7DH,#0FFH;關(guān)閉閃爍 LCALL CLEA RET KEYFUN19:RET KEYFUN20:RET KEYFUN21:RET KEYFUN22:RET KEYFUN23:RET KEYFUN24:RET KEYFUN25:RET KEYFUN26:RET KEYFUN27:RET KEYFUN28:RET KEYFUN29:RET KEYFUN30:RET KEYFUN31:RET ACALL KEYOUT END
單片機(jī)課程設(shè)計(jì)
8.2電路圖
總體電路圖