題目:基于單片機(jī)的電子賀卡設(shè)計(jì)
內(nèi)容:
1、設(shè)計(jì)基于單片機(jī)的伴奏樂曲(30分)
2、設(shè)計(jì)基于單片機(jī)的彩屏圖片(30分)
3、通過矩陣鍵盤按鍵顯示不同彩屏圖片,并伴有不同樂曲(30分)
4、創(chuàng)新部分(自主設(shè)計(jì))(10分)
要求:
1、根據(jù)設(shè)計(jì)內(nèi)容,設(shè)計(jì)系統(tǒng)硬件結(jié)構(gòu),畫出系統(tǒng)流程圖。
2、應(yīng)用Keil、Proteus軟件開發(fā)應(yīng)用系統(tǒng)并仿真調(diào)試。
文件包含程序代碼、proteus仿真以及報(bào)告
目錄
1.概論
2.需求分析
3.系統(tǒng)硬件設(shè)計(jì)
3.1 硬件仿真圖
3.2 鍵盤控制
3.3 發(fā)聲裝置
3.4 顯示裝置
4.主要程序設(shè)計(jì)
4.1 程序設(shè)計(jì)思想
4.1.1 音調(diào)脈沖的產(chǎn)生
4.1.2音樂節(jié)拍的產(chǎn)生
4.1.3 音符碼表的編制
4.1.4 主要程序
4.2 主程序框圖
5.心得體會(huì)
1. 概論
科技日新月異,許許多多的電子產(chǎn)品走進(jìn)千家萬戶。而眾多電子產(chǎn)品絕大多數(shù)是基于單片機(jī)的,在單片機(jī)軟件驅(qū)動(dòng)I/O上掛載設(shè)備,于是有各種各樣功能的電子產(chǎn)品。伴隨著科技的快速進(jìn)步和社會(huì)的發(fā)展,單片機(jī)技術(shù)的應(yīng)用已經(jīng)進(jìn)入到我們的生活、工作等很多領(lǐng)域,這已經(jīng)成為了一種非常成熟的電子技術(shù)。本系統(tǒng)是以單片機(jī)為核心元件,實(shí)現(xiàn)了基于單片機(jī)的伴奏樂曲、基于單片機(jī)的彩屏圖片并通過矩陣鍵盤按鍵顯示不同彩屏圖片并伴有不同樂曲的諸多功能的電子賀卡。通過單片機(jī)、AMPIRE128*64圖形液晶顯示屏、蜂鳴器以及按鍵幾個(gè)元件的協(xié)調(diào)合作,完成了一個(gè)簡(jiǎn)單音樂播放器的基本功能。
2.需求分析
目前市場(chǎng)上有很多種音樂芯片或音樂模塊,可以直接產(chǎn)生各種曲子。但是這種模塊價(jià)格比較貴,性價(jià)比不高。對(duì)于一些僅需要產(chǎn)生簡(jiǎn)單的音符或簡(jiǎn)短曲子的場(chǎng)合,例如智能玩具、電子賀卡等,可以使用單片機(jī)配合簡(jiǎn)單的蜂鳴器就能產(chǎn)生需要的音樂效果,這種方法充分發(fā)揮了單片機(jī)的優(yōu)勢(shì)。單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒有單片機(jī)的蹤跡。因此,單片機(jī)的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計(jì)算機(jī)應(yīng)用與智能化控制的科學(xué)家、工程師。利用單片機(jī)實(shí)現(xiàn)音樂播放有很多要點(diǎn),例如外部電路簡(jiǎn)單,控制方便等,因而備受廣大單片機(jī)愛好者的喜愛。通過音樂發(fā)聲器的設(shè)計(jì)方案,掌握C語言的編程方法。并熟練的運(yùn)用AT89C52單片機(jī)定時(shí)器產(chǎn)生固定頻率的方波信號(hào),推動(dòng)喇叭發(fā)出旋律,按下單鍵可以演奏預(yù)先設(shè)置的歌曲旋律,最重要的是自己還可以通過程序設(shè)計(jì)輸入自己喜歡的歌曲來演奏。
3.系統(tǒng)硬件設(shè)計(jì)3.1 硬件仿真圖 單片機(jī)為核心元件,P1口低四位作為矩陣鍵盤的控制引腳,通過按鍵控制進(jìn)行相應(yīng)曲目切換與停止。單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器使P2.7輸出一系列不同頻率的脈沖控制音調(diào)的變化,蜂鳴器連接P2.7實(shí)現(xiàn)發(fā)聲。P3口連接AMPIRE128*64的數(shù)據(jù)輸入輸出引腳。每當(dāng)進(jìn)行曲目切換時(shí)便執(zhí)行相應(yīng)顯示函數(shù)使屏幕顯示圖片。如圖3.1, 圖3.1 3.2 鍵盤控制本設(shè)計(jì)采用2*2矩陣鍵盤控制相應(yīng)曲目播放,每個(gè)按鍵進(jìn)行實(shí)時(shí)掃描以檢測(cè)是否有按鍵按下。三個(gè)按鍵控制曲目切換,一個(gè)按鍵控制停止曲目播放。如圖3.2, 圖3.2 3.3 發(fā)聲裝置通過單片機(jī)定時(shí)器/計(jì)數(shù)器使P2.7輸出一系列不同頻率的脈沖控制音調(diào)高低與延時(shí)函數(shù)控制節(jié)拍,使用蜂鳴器放出樂曲。如圖3.3, 圖3.3 3.4 顯示裝置通過AMPIRE128*64顯示對(duì)應(yīng)曲目圖片,液晶模塊顯示漢字方法:使用圖形液晶模塊以點(diǎn)陣形式來顯示漢字和圖形,每8個(gè)點(diǎn)組成1個(gè)字節(jié),每個(gè)點(diǎn)用一個(gè)二進(jìn)制位表示,存1的點(diǎn)顯示時(shí)在屏上顯示一個(gè)亮點(diǎn),存0的點(diǎn)則在屏上不顯示,在液晶屏上豎向8個(gè)點(diǎn)為1個(gè)字節(jié)數(shù)據(jù),通過字模提取軟件按照先左后右,先上后下倒序的方式對(duì)漢字進(jìn)行字模提取。如圖3.4, 圖3.4 4.主要程序設(shè)計(jì)4.1 程序設(shè)計(jì)思想4.1.1 音調(diào)脈沖的產(chǎn)生要讓單片機(jī)產(chǎn)生音頻脈沖,只要計(jì)算出某一音頻的周期,將此周期除以2得到半周期,利用定時(shí)器對(duì)此半周期進(jìn)行定時(shí),每當(dāng)定時(shí)時(shí)間到時(shí),就將P2.7引腳上的電平取反,從而得到所需要的音頻脈沖。 4.1.2音樂節(jié)拍的產(chǎn)生可以通過延時(shí)程序來產(chǎn)生不同的節(jié)拍。如果1拍為0.4秒,則1/4為0.1秒,只要設(shè)定延時(shí)時(shí)間就可以求得節(jié)拍時(shí)間。例如一段延時(shí)程序Delay為1/4拍,則一拍只要調(diào)用4次Delay程序,依此類推。 4.1.3 音符碼表的編制編寫一段音樂音符碼表時(shí),先把樂譜的音符找出,建立對(duì)應(yīng)的音調(diào)碼及定時(shí)器初值表,建立節(jié)拍碼表。每個(gè)音符使用1個(gè)字節(jié),字節(jié)的高4位存放音符的音調(diào)碼,低4位存放音符的節(jié)拍碼。音符對(duì)應(yīng)的音調(diào)碼表和定時(shí)器初值表(fosc=12MHz)。 C語言將音調(diào)碼表和定時(shí)器初值表表示出來即為: uchar code TABLE[ ]={ //音符對(duì)應(yīng)的定時(shí)器初值表 0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44,0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1}; 音符碼表為: uchar code GRACE[ ]={ //《奇異恩典》音符碼表 0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18,0x14,0x48,0x62,0x42,0x68,0x54,0x8c,0x64,0x86,0x62,0x82,0x62,0x48,0x14,0x26,0x42,0x42,0x22,0x18,0x14,0x48,0x62,0x42,0x68,0x54,0x4c,0x48,0x00}; uchar code JOY[]={ //《歡樂頌》音符碼表0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x66,0x52,0x58,0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48,0x54,0x54,0x64,0x44,0x54,0x62,0x72,0x64,0x44,0x54,0x62,0x72,0x64,0x54,0x44,0x54,0x18,0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56, 0x42,0x48,0x00}; uchar code HAPPY[]={ //《生日快樂》音符碼表 0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0x00}; 4.1.4 主要程序- 本程序使用2*2矩陣鍵盤,通過P1.0,P1.1控制鍵盤列,P1.2,P1.3控制鍵盤列。相關(guān)程序如下:
- void Key_Scan()
- {
- uchar i,temp1;
- P1=0xfb;
- for(i=0;i<=1;i++)
- {
- if(L1==0)
- {
- if(i==0)
- key=a[ i];
- else
- key=a[i+1];
-
- }
- if(L2==0)
- {
- if(i==0)
- key=a[i+1];
- else
- key=a[i+2];
- }
-
- delay_10ms();
- temp1=P1;
- temp1=temp1|0x03;
- temp1=temp1<<1;
- temp1=temp1|0x03;
- P1=temp1;
- }
- }
復(fù)制代碼
- 利用全局變量key來獲取按下的鍵號(hào),并使用key值充當(dāng)switch-case循環(huán)語句參數(shù)執(zhí)行相應(yīng)的播放程序。每次調(diào)用相應(yīng)的音調(diào)碼后便執(zhí)行鍵盤掃描函數(shù),如有按鍵按下,則進(jìn)行曲目切換。播放整首曲目部分程序如下:
while(*(p[key]+k)!=0) //判斷取得的音符碼是否為結(jié)束碼 { beat=*(p[key]+k)&0x0f; //取節(jié)拍碼 m=_crol_(*(p[key]+k),4)&0x0f; //取音調(diào)碼 if(beat!=0) { //判斷取得的音調(diào)碼是否為0, 若不是,根據(jù)取得的音調(diào)碼計(jì)算T0初值 m1=--m*2+1; m=m*2; tl=TL0=TABLE[m1]; th=TH0=TABLE[m]; } else { //取得的節(jié)拍碼為0,則停止T0 TR0=0; } Delay(beat); k++; Key_Scan(); delay_10ms(); if(temp!=key)break; } TR0=0; k=0; break; - 利用循環(huán)語句while(1)實(shí)現(xiàn)曲目單曲循環(huán)。
- 通過AMPIRE128*64顯示相應(yīng)的圖片,利用取字模軟件獲取相應(yīng)圖片的編碼,每個(gè)編碼數(shù)組為1024字節(jié)。取字模時(shí)縱向倒序格式。AMPIRE128*64的部分程序代碼如下:
//忙檢查 void check_busy() { uchar a=0; for(a=0;a<200;a++); //此處為延時(shí),一段時(shí)間后確保處于空閑狀態(tài) //此處為狀態(tài)查詢,查詢忙狀態(tài),沒有使用成功,以后再調(diào)試 RW=1; RS=0; E=1; while(1) { E=1; if(!(P0&0x80)) break; a++; if(a>10) break; } E=1;} //寫命令函數(shù) void write_cmd(uchar inst) { check_busy(); RS=0; RW=0; E=1; P3=inst; E=0; _nop_();} //寫數(shù)據(jù)函數(shù) void write_data(uchar dat) {check_busy(); RS=1;RW=0;E=1;P3=dat; E=0;_nop_();} //初始化函數(shù) void LCD_Init() {write_cmd(0x30);//30H--基本指令操作? delayus(4); write_cmd(0x0c);//開顯示,關(guān)光標(biāo),不閃爍。 delayus(10); write_cmd(0x01);//清除顯示 delayus(10); write_cmd(0x06);//光標(biāo)的移動(dòng)方向左,DDRAM的地址計(jì)數(shù)器(AC)加1。 delayus(10); } //設(shè)置顯示坐標(biāo) void set_xy(uchar x,uchar y) //x為行,y為列 { if(y>=64) //列地址大于等于64時(shí)右屏顯示? {CS2=0; //低電平選擇 CS1=1; //寫右屏是左屏關(guān)閉,不然兩邊會(huì)同時(shí)顯示 y=y-64;}else //列地址小于64時(shí)左屏顯示 {CS1=0;CS2=1 }write_cmd(0x40|y); //寫列地址 _nop_();write_cmd(0xb8|x); } //顯示函數(shù) void disp_hz(uchar *p) {uchar i; for(i=0;i<128;i++) {set_xy(0,i);write_data(p[ i]); [ i]set_xy(1,i);write_data(p[i+128]); set_xy(2,i);write_data(p[i+256]); set_xy(3,i);write_data(p[i+384]); set_xy(4,i);write_data(p[i+512]); set_xy(5,i);write_data(p[i+640]); set_xy(6,i);write_data(p[i+768]); set_xy(7,i);write_data(p[i+896]); set_xy(8,i);write_data(p[i+1024]); }}
5.心得體會(huì)此次設(shè)計(jì)的不足之處在于鍵盤按鍵個(gè)數(shù)較少,可控制的功能比較簡(jiǎn)單;顯示圖片由于需要自己設(shè)計(jì)、繪畫,加之本人繪畫能力水品低,致使顯示圖片并不美觀;由于時(shí)間原因,并不能設(shè)置更多曲目,所以只編制了三首曲目。希望在以后的學(xué)習(xí)中不斷改進(jìn)此設(shè)計(jì)。具體實(shí)施計(jì)劃:將每個(gè)按鍵控制單獨(dú)曲目改為“上一曲”或者“下一曲”以便解決多曲目存取與播放;設(shè)置“快進(jìn)”與“減慢”對(duì)于曲目的播放速度進(jìn)行控制;將彩屏上的圖片設(shè)置為動(dòng)態(tài);設(shè)置相應(yīng)按鍵控制播放聲音的大小。 本次課設(shè)可以說是我經(jīng)歷過最有意義的一次。由于整學(xué)期對(duì)于《單片機(jī)與接口技術(shù)》的學(xué)習(xí)只是停留在了課本上,當(dāng)拿到課設(shè)題目時(shí),可以說一點(diǎn)思路都沒有。通過上網(wǎng)查詢,我了解到了有關(guān)播放曲目的一些知識(shí)。但對(duì)于整個(gè)課設(shè)來說,這只是小部分。我花了不到兩天的時(shí)間終于構(gòu)思出了通過矩陣鍵盤控制曲目播放。我對(duì)于AMPIRE128*64的了解一片空白。通過網(wǎng)上查詢與看相關(guān)源程序。我了解了它顯示的基本原理。通過思考設(shè)計(jì)了滿足要求的程序。調(diào)試加修改的過程中我又完成了AMPIRE128*64圖片的顯示。經(jīng)過最后的整合,兩者合二為一。我完成了本次課設(shè),成就感與喜悅并存。 學(xué)習(xí)知識(shí)就是為了運(yùn)用,我學(xué)了這么多年的知識(shí),但卻很少真正能夠憑借自己力量做出一件屬于自己的東西。這次課設(shè)為我的理論與實(shí)踐相結(jié)合打下了堅(jiān)實(shí)的基礎(chǔ),為自己樹立了信心以及以后的實(shí)踐積攢了經(jīng)驗(yàn)。
單片機(jī)源程序如下: - #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SPEAK=P2^7; //定義蜂鳴器輸出端口
- sbit CS1=P2^4;
- sbit CS2=P2^3;
- sbit RS=P2^2;
- sbit RW=P2^1;
- sbit E=P2^0;
- sbit L1=P1^0;
- sbit L2=P1^1;
- uchar code HZ0[]={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0xE0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xFF,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0D,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x21,0x62,0x9C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xF0,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0x63,0xC1,0x81,0x00,0x00,0x00,0x00,0x01,0x0B,0x1E,
- 0x1C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xFF,0x00,0x08,0x04,0x02,0x01,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x30,0x78,0x78,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x01,0x03,0x02,0x06,0x0C,0x38,0xF0,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x41,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x07,0x07,0xE7,0x04,0x04,0x04,0x04,0x04,0x06,0x07,0xE3,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x04,0x84,0x44,0x24,0x1F,0x24,0x44,0x84,0x04,0x04,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x08,0x08,
- 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x7F,0x44,0x64,0x64,0x64,0x54,0x4C,0x47,0x4C,0x54,0x64,0x64,0x64,0x64,0x64,0x7F,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0xFE,0x42,0x42,0x42,0xFF,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x42,
- 0x42,0x42,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x04,0x02,0xF3,0x92,0x92,0xF2,0x02,0xFE,0x02,0x02,0x03,0x02,0x04,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x41,0x41,0xFF,
- 0x41,0x41,0x41,0x41,0xFF,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x0C,
- 0x70,0xC0,0x80,0x00,0x00,0x00,0x30,0x40,0x40,0x00,0x00,0x10,0x20,0x40,0x80,0x80,
- 0x00,0x00,0x08,0x10,0x20,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,
- 0x04,0x04,0x87,0x44,0x24,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x24,0x47,0x84,
- 0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x08,0x0F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x20,0x10,0x0F,
- 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
- 0x03,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
- 0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- uchar code HZ1[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x80,
- 0x00,0x04,0x88,0xD0,0xE0,0x60,0x30,0x31,0x12,0x1C,0x18,0x08,0x08,0x0F,0x18,0x18,
- 0x18,0x30,0x34,0x22,0xE0,0xC0,0xA0,0x10,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x20,0x40,0x40,0xE0,
- 0x79,0x0F,0x03,0x01,0x30,0x08,0x0C,0x02,0x02,0x02,0x0C,0x10,0x00,0x00,0x1C,0x02,
- 0x01,0x01,0x02,0x8C,0x10,0x01,0x03,0x1F,0xFD,0xF0,0x48,0x44,0x42,0x41,0x81,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x04,0x08,0x08,0x08,0x08,0x8B,
- 0x5F,0x38,0xF0,0xC0,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x20,0x20,0x20,0x20,0x10,
- 0x08,0x04,0x03,0x00,0x00,0x80,0xC0,0x70,0x3F,0x6D,0x82,0x04,0x08,0x10,0x20,0x01,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x41,0x00,
- 0x40,0x20,0x10,0x0B,0x07,0x06,0x0E,0x0C,0x88,0x5C,0x38,0x18,0x08,0x08,0x0C,0x8C,
- 0x4C,0x24,0x1E,0x06,0x03,0x01,0x03,0x04,0x18,0x20,0x00,0x01,0x02,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0xC0,0xF0,0xF8,0x3E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x81,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0x70,0x70,
- 0x70,0x38,0x38,0x38,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0xC0,0xE0,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x20,0xC0,0xE0,0xE0,0xE0,0x60,
- 0xE0,0xE0,0x60,0x60,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xF0,0xF8,0x7C,0x7C,0x3E,0xDF,0xFF,0xFD,
- 0x20,0x1F,0x1F,0x1F,0xEF,0xEE,0x0E,0x0E,0xCF,0xFF,0x7F,0x3F,0x1F,0x0F,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xF8,0xF8,
- 0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,
- 0x0F,0x83,0xC1,0xE0,0xE0,0xE3,0x07,0x0F,0x0F,0x1F,0x1E,0xF0,0xF0,0x78,0x3C,0x3F,
- 0x3F,0x31,0x70,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0x7E,0x3F,0x1F,0x0F,0x1F,0x3F,0xB9,0xF9,
- 0xF0,0xC0,0xF0,0x7C,0x3F,0x07,0x12,0x11,0x30,0x70,0xE0,0xE0,0xC0,0xC0,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xC8,0xEF,0x03,0x0F,0x0E,0x0E,0x0F,0xFF,0xFF,
- 0xFF,0x0F,0x0E,0xCE,0xCE,0x8E,0x8F,0x0E,0x0C,0x00,0x00,0x00,0x03,0xC3,0xF0,0xFC,
- 0xDF,0xDF,0xCB,0xE1,0xF0,0xFE,0x7E,0xFE,0xFC,0xE0,0x00,0x7F,0x7F,0xE2,0xFC,0x3E,
- 0xCE,0xC0,0x80,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x03,0x01,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,
- 0x07,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0E,0x06,0x00,0x00,0x00,0x03,0x07,0x07,
- 0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x01,0x09,0x0C,0x06,0x07,0x03,0x03,0x00,0x00,
- 0x00,0x01,0x03,0x0F,0x0F,0x0E,0x0E,0x0C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- uchar code HZ2[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80,0x40,0x20,0x50,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x01,0x01,0x0A,0x34,0x30,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x3E,0xE3,0x00,0x03,0x07,0x18,0x28,0xB0,0xA0,0xC0,0x00,0x00,
- 0x00,0x00,0x3F,0x40,0x80,0x80,0x81,0x82,0x83,0x7C,0x78,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x01,0x01,0x81,0x80,0x80,0x40,
- 0x40,0x00,0x40,0xC0,0x80,0x80,0x80,0x81,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0x00,0xE0,0xE0,0xE0,0xF0,0xF0,
- 0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFE,
- 0xFF,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFC,0xFA,0xFC,0xFC,0xF8,0xFC,
- 0xF8,0xF8,0xF0,0x70,0x60,0xE0,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,
- 0xFC,0xFC,0x7C,0x3E,0x3F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,
- 0x03,0x03,0x03,0x0F,0x1F,0x1F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x2F,
- 0x03,0x01,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
- 0x07,0x07,0x03,0x01,0x00,0x00,0x07,0x07,0x07,0x0F,0x3F,0x3F,0x7F,0xFF,0x7F,0x3F,
- 0x0F,0x07,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x38,0x38,0xF0,0xF0,
- 0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xFC,0xFF,0xFF,0x7F,0x0F,0x07,0x01,
- 0x00,0x00,0x00,0xC0,0x00,0x00,0xF0,0x00,0x01,0x01,0x03,0x03,0x03,0x01,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x40,0x40,0x40,0xC1,0x01,0x01,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x40,0x41,0xF9,0x41,0xC0,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x40,0x20,0x10,0xD0,
- 0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x03,0xFF,0xFF,0xFE,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xE1,0x00,0x00,0x00,0x00,0x00,
- 0x04,0x02,0x01,0x09,0x09,0x09,0xFF,0x09,0x09,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x7F,0x44,0x44,0x44,0x44,0x40,0x7F,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x01,0x01,0x01,0xFF,0x01,0x02,0x0C,0x84,0x64,0x1F,0x14,0x67,0x84,
- 0x84,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x47,0x24,0x94,0x04,0xFF,
- 0x04,0x14,0x24,0x44,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,
- 0xF0,0xFF,0x5F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x3C,0x78,0x78,0xF0,
- 0x90,0x11,0x21,0x21,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x50,0x10,0x5C,0x1E,0x5F,0x1F,0x1F,
- 0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- void delayus(uchar delay)
- {
- uchar i;
- for(i=0;i<=delay;i++)
- _nop_();
- }
- void check_busy()
- {
- uchar a=0;
- for(a=0;a<200;a++); //此處為延時(shí),一段時(shí)間后確保處于空閑狀態(tài)
- //此處為狀態(tài)查詢,查詢忙狀態(tài),沒有使用成功,以后再調(diào)試
- /*RW=1;
- RS=0;
- E=1;
- while(1)
- {
- E=1;
- if(!(P0&0x80))
- break;
- a++;
- if(a>10)
- break;
-
- }
- E=1;*/
- }
- void write_cmd(uchar inst)
- {
- check_busy();
- RS=0;
- RW=0;
- E=1;
- P3=inst;
- E=0;
- _nop_();
- }
- void write_data(uchar dat)
- {
- check_busy();
- RS=1;
- RW=0;
- E=1;
- P3=dat;
- E=0;
- _nop_();
- }
- void LCD_Init()
- {
- write_cmd(0x30);//30H--基本指令操作?
- delayus(4);
- write_cmd(0x0c);//開顯示,關(guān)光標(biāo),不閃爍。
- delayus(10);
- write_cmd(0x01);//清除顯示
- delayus(10);
- write_cmd(0x06);//光標(biāo)的移動(dòng)方向左,DDRAM的地址計(jì)數(shù)器(AC)加1。
- delayus(10);
- }
- void set_xy(uchar x,uchar y) //x為行,y為列
- {
- if(y>=64) //列地址大于等于64時(shí)右屏顯示?
- {
- CS2=0; //低電平選擇
- CS1=1; //寫右屏是左屏關(guān)閉,不然兩邊會(huì)同時(shí)顯示
- y=y-64;
- }
- else //列地址小于64時(shí)左屏顯示
- {
- CS1=0; //同上
- CS2=1;
- }
- write_cmd(0x40|y); //寫列地址
- _nop_();
- write_cmd(0xb8|x); //寫行地址?
- }
- //顯示函數(shù)
- void disp_hz(uchar *p)
- {
- uchar i;
- for(i=0;i<128;i++)
- {
- set_xy(0,i);
- write_data(p[i]);
- set_xy(1,i);
- write_data(p[i+128]);
- set_xy(2,i);
- write_data(p[i+256]);
- set_xy(3,i);
- write_data(p[i+384]);
- set_xy(4,i);
- write_data(p[i+512]);
- set_xy(5,i);
- write_data(p[i+640]);
- set_xy(6,i);
- write_data(p[i+768]);
- set_xy(7,i);
- write_data(p[i+896]);
- set_xy(8,i);
- write_data(p[i+1024]);
- }
- }
- void disp_zf(uchar R,uchar L,uchar *p)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- set_xy(2*R,8*L+i);
- write_data(p[i]);
- set_xy(2*R+1,8*L+i);
- write_data(p[i+8]);
- }
- }
- uchar beat,tl,th,key=0,k=0,temp; //定義節(jié)拍和T0初值變量
- uchar code TABLE[]={ //音符對(duì)應(yīng)的定時(shí)器初值表
- 0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44,
- 0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,
- 0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,
- 0xfe,0x85,0xfe,0x9a,0xfe,0xc1};
- uchar code GRACE[]={ //《奇異恩典》音符碼表
- 0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18,
- 0x14,0x48,0x62,0x42,0x68,0x54,0x8c,0x88,
- 0x64,0x86,0x62,0x82,0x62,0x48,0x14,0x26,0x42,0x42,0x22,0x18,
- 0x14,0x48,0x62,0x42,0x68,0x54,0x4c,0x48,0x00};
- uchar code JOY[]={ //《歡樂頌》音符碼表
- 0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,
- 0x44,0x44,0x54,0x64,0x66,0x52,0x58,0x64,
- 0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,
- 0x44,0x54,0x64,0x56,0x42,0x48,0x54,0x54,
- 0x64,0x44,0x54,0x62,0x72,0x64,0x44,0x54,
- 0x62,0x72,0x64,0x54,0x44,0x54,0x18,0x64,
- 0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,
- 0x44,0x54,0x64,0x56, 0x42,0x48,0x00};
- uchar code HAPPY[]={ //《生日快樂》音符碼表
- 0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
- 0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
- 0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
- 0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
- 0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
- 0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
- 0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
- 0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
- 0x00};
- void Timer0_Initialize();
- void delay_10ms();
- void Delay(uchar);
- void Key_Scan();
- uint a[4]={0,1,2,3};
- void main()
- {
- uchar m,m1; //定義臨時(shí)變量
- uchar *p[3];
- uchar beat=0;
- p[0]=GRACE;
- p[1]=JOY;
- p[2]=HAPPY;
- Timer0_Initialize();
- while(1)
- {
- Key_Scan();
- if(key!=3)
- TR0=1;
- switch(key)
- {
- P1=0xff;
- case 0:
- disp_hz(HZ0 );
- temp=key;
- TR0=1;
- while(*(p[key]+k)!=0) //判斷取得的音符碼是否為結(jié)束碼
- {
- beat=*(p[key]+k)&0x0f; //取節(jié)拍碼
- m=_crol_(*(p[key]+k),4)&0x0f; //取音調(diào)碼
- if(beat!=0)
- { //判斷取得的音調(diào)碼是否為0 { //不是,根據(jù)取得的音調(diào)碼計(jì)算T0初值
- m1=--m*2+1;
- m=m*2;
- tl=TL0=TABLE[m1];
- th=TH0=TABLE[m];
-
- }
- else
- { //取得的節(jié)拍碼為0,則停止T0
- TR0=0;
- }
- Delay(beat);
- k++;
- Key_Scan();
- delay_10ms();
- if(temp!=key)break;
- }
- TR0=0;
- k=0;
- break;
-
- case 1:
- disp_hz(HZ1 );
- temp=key;
- TR0=1;
- while(*(p[key]+k)!=0) //判斷取得的音符碼是否為結(jié)束碼
- {
- beat=*(p[key]+k)&0x0f; //取節(jié)拍碼
- m=_crol_(*(p[key]+k),4)&0x0f; //取音調(diào)碼
- if(beat!=0)
- { //判斷取得的音調(diào)碼是否為0 { //不是,根據(jù)取得的音調(diào)碼計(jì)算T0初值
- m1=--m*2+1;
- m=m*2;
- tl=TL0=TABLE[m1];
- th=TH0=TABLE[m];
-
- }
- else
- { //取得的節(jié)拍碼為0,則停止T0
- TR0=0;
- }
- Delay(beat);
- k++;
- Key_Scan();
- delay_10ms();
- if(temp!=key)break;
- }
- TR0=0;
- k=0;
- break;
-
- case 2:
- disp_hz(HZ2 );
- temp=key;
- TR0=1;
- while(*(p[key]+k)!=0) //判斷取得的音符碼是否為結(jié)束碼
- {
- beat=*(p[key]+k)&0x0f; //取節(jié)拍碼
- m=_crol_(*(p[key]+k),4)&0x0f; //取音調(diào)碼
- if(beat!=0)
- { //判斷取得的音調(diào)碼是否為0 { //不是,根據(jù)取得的音調(diào)碼計(jì)算T0初值
- m1=--m*2+1;
- m=m*2;
- tl=TL0=TABLE[m1];
- th=TH0=TABLE[m];
-
- }
- else
- { //取得的節(jié)拍碼為0,則停止T0
- TR0=0;
- }
- Delay(beat);
- k++;
- Key_Scan();
- delay_10ms();
- if(temp!=key)break;
- }
- TR0=0;
- k=0;
- break;
- case 3:
- TR0=0;break;
- }
- }
- }
-
-
-
- void Timer0_Initialize()
- {
- EA=1;
- ET0=1;
- TMOD=0x01;
- TR0=1;
- }
- void timer0() interrupt 1 using 1
- {
- TL0=tl;
- TH0=th; //重裝定時(shí)初值
- SPEAK=~SPEAK;
- } //蜂鳴器控制端口電平取反 } /************************ 四分之一拍延時(shí)函數(shù) ************************/
- void Delay_Beat()
- {
- uint i;
- for(i=0;i<20000;i++);
- }
- void Delay(uchar tt)
- {
- uchar i;
- for(i=0;i<tt;i++)
- Delay_Beat();
- }
- void delay_10ms()
- {
- int i;
- for(i=0;i<200;i++);
- }
- void Key_Scan()
- {
- uchar i,temp1;
- P1=0xfb;
- for(i=0;i<=1;i++)
- {
- if(L1==0)
- {
- if(i==0)
- key=a[i];
- else
- key=a[i+1];
-
- }
- if(L2==0)
- {
- if(i==0)
- key=a[i+1];
- else
- key=a[i+2];
- }
-
- delay_10ms();
- temp1=P1;
- temp1=temp1|0x03;
- temp1=temp1<<1;
- temp1=temp1|0x03;
- P1=temp1;
- }
- }
復(fù)制代碼
0.png (47.68 KB, 下載次數(shù): 98)
下載附件
2018-7-10 02:11 上傳
所有資料51hei提供下載:
基于單片機(jī)的電子賀卡設(shè)計(jì).rar
(139.38 KB, 下載次數(shù): 211)
2018-7-9 16:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|