帶有LCD顯示的音樂倒數(shù)計數(shù)器 單片機(jī)技術(shù)是一門不可或缺的技術(shù),對我們將來的工作以及生活和學(xué)習(xí)都有很密切的聯(lián)系。近年來,隨著電子技術(shù)和微機(jī)計算機(jī)的迅速發(fā)展,單片機(jī)的檔次不斷提高,其應(yīng)用領(lǐng)域也在不斷的擴(kuò)大,已在工業(yè)控制、尖端科學(xué)、智能儀器儀表、日用家電、汽車電子系統(tǒng)、辦公自動化設(shè)備、個人信息終端及通信產(chǎn)品中得到了廣泛的應(yīng)用,成為現(xiàn)代電子系統(tǒng)中最重要的智能化的核心部件。 單片機(jī)由CPU、一定容量的RAM和ROM構(gòu)成,定時、計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。而51系列單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次設(shè)計通過對它的學(xué)習(xí)、應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計、開發(fā)軟、硬的能力。 本設(shè)計利用AT89C51單片機(jī)結(jié)合字符型LCD顯示器設(shè)計一個簡易的倒數(shù)計數(shù)器。用4個按鍵操作來設(shè)置當(dāng)前想要倒計數(shù)的時間。做一小段時間倒計數(shù),當(dāng)?shù)褂嫈?shù)為0時,則發(fā)出一段音樂聲響,通知倒計數(shù)終了,該做應(yīng)當(dāng)做的事。應(yīng)用 Proteus的ISIS軟件和Keil uVision3來實(shí)現(xiàn)該計數(shù)器的設(shè)計與仿真。該方法仿真效果真實(shí)、準(zhǔn)確,節(jié)省了硬件資源。 該多功能計數(shù)器可以應(yīng)用于一般的生活和工作中,也可以通過改裝,提高性能,增加新功能,從而給人們的生活和工作帶來更多的方便。
目 錄 1 設(shè)計概述和要求 1.1 設(shè)計概述 1.2 設(shè)計要求 2 系統(tǒng)設(shè)計 2.1 框圖設(shè)計 2.2 元件清單 3軟件設(shè)計 3.1 程序流程圖 3.1.1 主程序流程圖 3.1.2 蜂鳴器發(fā)聲程序流程圖 3.2 蜂鳴器發(fā)聲電路原理 3.3 蜂鳴器發(fā)聲程序的關(guān)鍵代碼 4 PROTEUS仿真結(jié)果 4.1 總體電路仿真結(jié)果 4.2 假設(shè)倒計時為5秒時的仿真結(jié)果 5 總結(jié) 6 附表(本設(shè)計所有程序) ………………………………………….14 參考文獻(xiàn)
1 設(shè)計概述和要求本設(shè)計的任務(wù)是利用AT89C51單片機(jī)結(jié)合字符型LCD顯示器設(shè)計一個簡易的倒數(shù)計數(shù)器。做一小段時間倒計數(shù),當(dāng)?shù)褂嫈?shù)為0時,則發(fā)出一段音樂聲響。 1.1 設(shè)計概述20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展。在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透到了社會的各個領(lǐng)域,有力的推動和提高了社會生產(chǎn)力的發(fā)展與信息化程度。同時也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提升,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 隨著科技的發(fā)展和社會的進(jìn)步,人們對數(shù)字鐘的要求越來越高,多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化。數(shù)字鐘實(shí)際上是一個對標(biāo)準(zhǔn)頻率進(jìn)行計數(shù)的計數(shù)電路,走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校。單片計算機(jī)即單片微型計算機(jī),是集CPU,RAM,ROM,定時/計數(shù)和多種接口于一體的微控制器。它體積小成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)品和工業(yè)自動化上。由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠(yuǎn)遠(yuǎn)超多老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大地方便,而且大大的擴(kuò)展了鐘表原先的報時功能,諸如定時自動報警、0按時自動打鈴、定時廣播、自動啟閉路燈、定時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以數(shù)字化為基礎(chǔ)的,因此研究數(shù)字鐘及擴(kuò)大其應(yīng)用有著非,F(xiàn)實(shí)的意義。 本系統(tǒng)采用單片機(jī)作為數(shù)字鐘的核心控制器,讀取時鐘的值,并通過LCD液晶顯示器顯示出來,而且可以通過按鍵電路控制執(zhí)行信號,給時鐘賦初值。還可以設(shè)置鬧鐘,當(dāng)計數(shù)為0時,發(fā)出一陣音樂聲。并可拓展其功能顯示年月日。 1.2設(shè)計要求 利用AT89C51單片機(jī)結(jié)合字符型LCD顯示器設(shè)計一個簡易的倒數(shù)計數(shù)器,可用來煮方便面、煮開水或小睡片刻等。作品先接受用戶輸入的倒數(shù)計數(shù)時間,然后由用戶啟動作品工作(可用一個閃爍的LED燈指示),當(dāng)?shù)褂嫈?shù)為0時,則發(fā)出一段音樂聲響,通知倒計數(shù)終了,該做應(yīng)當(dāng)做的事。定時鬧鐘的基本功能如下。 - 字符型LCD(16 ? 2)顯示器。
- 顯示格式為“TIME 分分:秒秒”。
用4個按鍵操作來設(shè)置當(dāng)前想要倒計數(shù)的時間。一旦按下鍵則開始倒計數(shù),當(dāng)計數(shù)為0時,發(fā)出一陣音樂聲 2 系統(tǒng)設(shè)計2.1 框圖設(shè)計本項(xiàng)目的系統(tǒng)設(shè)計框圖如圖2-1所示: 
圖2-1 系統(tǒng)框圖 由系統(tǒng)框圖可看出,本設(shè)計由單片機(jī)AT89C51、LCD液晶顯示器、控制鍵盤、蜂鳴器、復(fù)位單路和定時器電路幾大模塊構(gòu)成。 2.2 元件清單主控單片機(jī)采用AT89C51芯片,時鐘模塊選用一12MHZ晶振,產(chǎn)生時鐘脈沖。顯示模塊采用LCD1602,設(shè)置部分選用鍵盤按鍵電路,發(fā)聲部分選用BUZZER蜂鳴器。還有一些電源、電阻、電容、接地等。 主要元件清單如圖2-2所示:   
圖2-2 主要元件清單
AT89C51: AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。 主要特性:與MCS-51 兼容 、4K字節(jié)可編程閃爍存儲器 、壽命:1000寫/擦循環(huán)、數(shù)據(jù)保留時間:10年 、全靜態(tài)工作:0Hz-24MHz 、三級程序存儲器鎖定 、128×8位內(nèi)部RAM 、32可編程I/O線 、兩個16位定時器/計數(shù)器 、5個中斷源 、可編程串行通道 、低功耗的閑置和掉電模式 、片內(nèi)振蕩器和時鐘電路。
1602LCD: 1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2-1所示. 表2-1 1602液晶模塊控制指令 序號 | 指令 | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 1 | 清顯示 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 光標(biāo)返回 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * | 3 | 置輸入模式 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | 4 | 顯示開/關(guān)控制 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | 5 | 光標(biāo)或字符移位 | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * | 6 | 置功能 | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * | 7 | 置字符發(fā)生存貯器地址 | 0 | 0 | 0 | 1 | 字符發(fā)生存貯器地址 | 8 | 置數(shù)據(jù)存貯器地址 | 0 | 0 | 1 | 顯示數(shù)據(jù)存貯器地址 | 9 | 讀忙標(biāo)志或地址 | 0 | 1 | BF | 計數(shù)器地址 | 10 | 寫數(shù)到CGRAM或DDRAM) | 1 | 0 | 要寫的數(shù)據(jù)內(nèi)容 | 11 | 從CGRAM或DDRAM讀數(shù) | 1 | 1 | 讀出的數(shù)據(jù)內(nèi)容 |
鍵盤: 鍵盤采用5個button,分別控制倒計時開始、調(diào)分個位、調(diào)分十位、調(diào)秒個位、調(diào)秒十位;另外還加一個總開關(guān)用于控制所有電路的通電情況。
蜂鳴器: 用三極管、電阻和speaker組成蜂鳴器電路。蜂鳴器最重要的特點(diǎn)是只要按照極性要求加上合適的直流電壓就可以發(fā)出固有頻率的聲音 3軟件設(shè)計3.1 程序流程圖3.1.1 主程序流程圖主程序開始初始化,然后掃描鍵盤、復(fù)位電路和計數(shù)器。當(dāng)鍵盤按鍵有按下時,調(diào)整計數(shù)器值,LCD顯示新值。當(dāng)復(fù)位鍵有按下時,計數(shù)器復(fù)位為初值,重新倒計數(shù)。當(dāng)計數(shù)器值倒計為0時,蜂鳴器發(fā)出聲音,計數(shù)器停止倒計,程序結(jié)束。主程序流程圖如圖3-1所示: 
1
電子信息工程專業(yè)設(shè)計文檔 3軟件設(shè)計3.1 程序流程圖3.1.1 主程序流程圖主程序開始初始化,然后掃描鍵盤、復(fù)位電路和計數(shù)器。當(dāng)鍵盤按鍵有按下時,調(diào)整計數(shù)器值,LCD顯示新值。當(dāng)復(fù)位鍵有按下時,計數(shù)器復(fù)位為初值,重新倒計數(shù)。當(dāng)計數(shù)器值倒計為0時,蜂鳴器發(fā)出聲音,計數(shù)器停止倒計,程序結(jié)束。主程序流程圖如圖3-1所示: 
圖3-1 主程序流程圖 3.1.2 蜂鳴器發(fā)聲程序流程圖 蜂鳴器發(fā)聲程序流程圖如圖3-2所示: 
圖3-2 蜂鳴器發(fā)聲程序流程圖 3.2 蜂鳴器發(fā)聲電路原理 對于單片機(jī)產(chǎn)生音樂,關(guān)鍵是控制頻率的輸出.我們知道,不同的聲音對應(yīng)不同的頻率,產(chǎn)生有規(guī)律的頻率輸出就可以得到相應(yīng)規(guī)律的聲音.有8個基本音符:do﹑re﹑mi﹑fa﹑so﹑la﹑xi﹑do,八個不同的音符對應(yīng)著不同的頻率.只要我們對照音符輸出相對應(yīng)的頻率,就可以產(chǎn)生美妙的音樂.本文中采用了T0中斷方式產(chǎn)生不同頻率, 并用按鍵控制音樂的播放和停止。用三極管、電阻和BUZZER組成蜂鳴器電路。蜂鳴器最重要的特點(diǎn)是只要按照極性要求加上合適的直流電壓就可以發(fā)出固有頻率的聲音。 3.3 蜂鳴器發(fā)聲程序的關(guān)鍵代碼下面是蜂鳴器報警的子程序清單: FLAG BIT 00H ORG 00H START: JB P3.1,START JNB FLAG,NEXT MOV R2,#200 DV: CPL P3.7 LCALL DELY500 LCALL DELY500 DJNZ R2,DV CPL FLAG NEXT: MOV R2,#200 DV1: CPL P3.7 LCALL DELY500 DJNZ R2,DV1 CPL FLAG SJMP START DELY500: MOV R7,#250 LOOP: NOP DJNZ R7,LOOP RET END
4 PROTEUS仿真結(jié)果4.1 總體電路仿真結(jié)果總體電路仿真結(jié)果如圖4-1所示: 
圖4-1 總體電路仿真結(jié)果
4.2 假設(shè)倒計時為5秒時的仿真如圖4-2所示
圖4-2 假設(shè)倒計時設(shè)為5秒時的仿真 4、3 時間設(shè)置的仿真 設(shè)置時間的仿真,例如設(shè)置為22分22秒如圖4-3 
5 總結(jié)通過此次多功能數(shù)字計數(shù)器的設(shè)計制作,我們將從書本上學(xué)到的知識應(yīng)用于實(shí)踐,再次鞏固了我的單片機(jī)知識,提高了我的電路仿真設(shè)計能力。雖然設(shè)計過程中遇到了很多困難,但是在解決這些問題的過程無疑是對自身專業(yè)素質(zhì)的提高。當(dāng)最終調(diào)試成功的時候也是對自己的一種肯定。此次的設(shè)計不僅增強(qiáng)了自己在專業(yè)設(shè)計方面的信息,鼓舞了自己,更是一次興趣的培養(yǎng),為以后的學(xué)習(xí)方向明確了重點(diǎn)。 另外在這次設(shè)計中我們遇到了不少的問題,針對不同的問題我們采取不同的解決方法,最終一一解決了。在我們遇到不懂得問題時,利用課本上、參考書上的知識,以及網(wǎng)上的資料最終解決問題。和隊(duì)友之間相互討論,明白了團(tuán)隊(duì)合作的重要性。 本次項(xiàng)目設(shè)計還存在很多不足,比如,LCD的日期顯示還不夠完美,計數(shù)功能也不夠詳細(xì)等。以后爭取完善這個設(shè)計,以提高我們的單片機(jī)設(shè)計能力。 這里很感謝李曉艷老師給我們的指導(dǎo)和教育,感謝她給我們提供了良好的學(xué)習(xí)設(shè)計環(huán)境,也很感謝可愛的伙伴們,讓我覺得團(tuán)隊(duì)的力量很偉大。 6 附表(本設(shè)計所有程序)
- #include <reg51.h>
- #include <intrins.h>
- sbit rs= P2^4;
- sbit rw = P2^5;
- sbit ep = P2^6;
- sbit k1=P1^4;
- sbit k2=P1^5;
- sbit k3=P1^6;
- sbit k4=P1^7;
- sbit k5=P1^3;
- sbit speaker=P3^0;
- unsigned char code dis1[] = {"The Last Time "};
- unsigned char code dis2[] = {"TIME 00:00"};
- unsigned char code dis3[] = {"0123456789"};
- unsigned int num=0;
- unsigned int miaogw=0;
- unsigned int miaosw=0;
- unsigned int fengw=0;
- unsigned int fensw=0;
- unsigned char flag=1;
- unsigned char timer0h,timer0l,time;
- //世上只有媽媽好數(shù)據(jù)表
- code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
- 6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
- 6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
- 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
- 2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
- };
- // 音階頻率表 高八位
- code unsigned char FREQH[]={
- 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
- 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
- 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
- 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
- } ;
- // 音階頻率表 低八位
- code unsigned char FREQL[]={
- 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
- 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
- 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
- 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
- };
- void delayyy(unsigned char t)
- {
- unsigned char t1;
- unsigned long t2;
- for(t1=0;t1<t;t1++)
- {
- for(t2=0;t2<8000;t2++)
- {
- ;
- }
- }
- TR0=0;
- }
- void t0int() interrupt 1
- {
- TR0=0;
- speaker=!speaker;
- TH0=timer0h;
- TL0=timer0l;
- TR0=1;
- }
- void song()
- {
- TH0=timer0h;
- TL0=timer0l;
- TR0=1;
- delayyy(time);
- }
- void delay(unsigned char ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i = 0; i< 250; i++)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- bit lcd_bz()
- {
- bit result;
- rs = 0;
- rw = 1;
- ep = 1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- result = (bit)(P0 & 0x80);
- ep = 0;
- return result;
- }
- void lcd_wcmd(unsigned char cmd)
- {
- while(lcd_bz());//判斷LCD是否忙碌
- rs = 0;
- rw = 0;
- ep = 0;
- _nop_();
- _nop_();
- P0 = cmd;
- _nop_();
- _nop_();
- ep = 1;
- _nop_();
- _nop_();
- ep = 0;
- }
- void lcd_pos(unsigned char pos)
- {
- lcd_wcmd(pos | 0x80);
- }
- void lcd_wdat(unsigned char dat)
- {
- while(lcd_bz());//判斷LCD是否忙碌
- rs = 1;
- rw = 0;
- ep = 0;
- P0 = dat;
- _nop_();
- _nop_();
- ep = 1;
- _nop_();
- _nop_();
- ep = 0;
- }
- void lcd_wshuzi(void)
- {
- lcd_pos(0x47);
- lcd_wdat(dis3[fensw]);
- lcd_pos(0x48);
- lcd_wdat(dis3[fengw]);
- lcd_pos(0x4A);
- lcd_wdat(dis3[miaosw]);
- lcd_pos(0x4B);
- lcd_wdat(dis3[miaogw]);
- }
- void lcd_init() //LCD初始化
- {
- lcd_wcmd(0x38);
- delay(1);
- lcd_wcmd(0x0c);
- delay(1);
- lcd_wcmd(0x06);
- delay(1);
- lcd_wcmd(0x01);
- delay(1);
- }
- void keyscan(void)
- {
- while(flag)
- {
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- fensw++;
- while(!k1);
- if(fensw==10)
- fensw=0;
- }
- }
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- fengw++;
- while(!k2);
- if(fengw==10)
- fengw=0;
- }
- }
- if(k3==0)
- {
- delay(10);
- if(k3==0)
- {
- miaosw++;
- while(!k3);
- if(miaosw==10)
- miaosw=0;
- }
- }
- if(k4==0)
- {
- delay(10);
- if(k4==0)
- {miaogw++;
- while(!k4);
- if(miaogw==10)
- miaogw=0;
- }
- }
- if(k5==0)
- flag=0;
- lcd_wshuzi();
- }
- }
- void delay1s(void)
- {
- unsigned char h,i,j,k;
- for(h=5;h>0;h--)
- for(i=4;i>0;i--)
- for(j=116;j>0;j--)
- for(k=214;k>0;k--);
- }
- void main(void)
- {
- unsigned char j; unsigned char k,i;
- speaker=0;
- lcd_init();// 初始化LCD
- delay(10);
- lcd_pos(0x02);//設(shè)置顯示位置
- j = 0;
- while(dis1[j] != '\0')
- {
- lcd_wdat(dis1[j]);//顯示字符
- j++;
- }
- while(1)
- {
- lcd_pos(0x42);// 設(shè)置顯示位置
- i = 0;
- while(dis2[i] != '\0')
- {
- lcd_wdat(dis2[i]);// 顯示字符
- i++; }
- keyscan();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
帶有LCD顯示的音樂倒數(shù)計數(shù)器課程設(shè)計.doc
(807 KB, 下載次數(shù): 131)
2018-5-28 16:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|