版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 通信工程學(xué)院</b></p><p><b> 課程設(shè)計(jì)說明書</b></p><p> 題 目 信號發(fā)生器的設(shè)計(jì) </p><p> 課 程 名 稱 單片機(jī)原理及應(yīng)用A </p><p> 專 業(yè)
2、 電子信息工程 </p><p><b> 目 錄</b></p><p><b> 一、課程設(shè)計(jì)目的</b></p><p><b> 二、課程設(shè)計(jì)任務(wù)</b></p><p><b> 三、課程設(shè)計(jì)要求</b>
3、</p><p><b> 四、課程設(shè)計(jì)思路</b></p><p> 五、課程設(shè)計(jì)軟件仿真結(jié)果截圖</p><p><b> 六、課程設(shè)計(jì)體會</b></p><p><b> 七、主要參考文獻(xiàn)</b></p><p> 八、附錄:源程序代碼
4、</p><p><b> 課程設(shè)計(jì)目的:</b></p><p> 在學(xué)習(xí)《單片機(jī)原理及應(yīng)用A》課程的基礎(chǔ)上,進(jìn)一步深入理解MCS-51單片機(jī)的結(jié)構(gòu)、工作原理和應(yīng)用技術(shù),提高單片機(jī)控制系統(tǒng)設(shè)計(jì)、研發(fā)的能力;按照教學(xué)計(jì)劃的要求,利用一周時(shí)間,綜合應(yīng)用所學(xué)知識,設(shè)計(jì)具有一定功能的小型單片機(jī)控制系統(tǒng),培養(yǎng)學(xué)生一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力,要求學(xué)生能通過
5、獨(dú)立思考、查閱工具書、參考文獻(xiàn),提出自己的設(shè)計(jì)方案,找出設(shè)計(jì)中遇到問題的解決途徑。</p><p><b> 課程設(shè)計(jì)要求:</b></p><p> 1、整個(gè)課程設(shè)計(jì)的各個(gè)環(huán)節(jié)都要自己動手。</p><p> 2、通過TLC5615串行D/A轉(zhuǎn)換芯片完成信號發(fā)生器設(shè)計(jì),經(jīng)由示波器觀察信號波形;</p><p>
6、 3、采用C語言編程實(shí)現(xiàn); </p><p> 4、其他要求參見“nKDE-51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)實(shí)驗(yàn)指導(dǎo)書;</p><p> 5、基本任務(wù)為必做項(xiàng)目,附加任務(wù)為選做項(xiàng)目;</p><p> 6、對課程設(shè)計(jì)進(jìn)行總結(jié),撰寫課程設(shè)計(jì)說明書。</p><p><b> 三、課程設(shè)計(jì)任務(wù):</b></p>
7、<p> 1、基本任務(wù):利用nKDE-51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)上的硬件資源,實(shí)現(xiàn)信號發(fā)生器的功能。</p><p> 2、附加任務(wù):通過鍵盤(1)選擇輸出信號的波形;</p><p> ?。?)調(diào)整幅度、頻率等參數(shù)。</p><p> 3、工作量要求:(1)設(shè)計(jì)的硬件電路圖與程序流程圖;</p><p><b>
8、(2)源程序代碼;</b></p><p> ?。?)系統(tǒng)運(yùn)行結(jié)果符合課程設(shè)計(jì)要求。</p><p><b> 四、課程設(shè)計(jì)思路:</b></p><p> 1、TLC5615芯片結(jié)構(gòu):</p><p> 引腳功能:DIN:串行數(shù)據(jù)輸入端 OUT
9、 SCLK</p><p> SCLK:串行時(shí)鐘輸入端 REFin CS </p><p> CS:片選端,低電平有效 DIN </p><p> OUT:DAC模擬電
10、壓輸出端 DOUT </p><p> REFin:基準(zhǔn)輸入端</p><p> 2、TLC5615芯片工作原理:</p><p> TLC5615由16位轉(zhuǎn)換寄存器、控制邏輯、10位DAC寄存器、上電復(fù)位、DAC、外部基準(zhǔn)放大器、基準(zhǔn)電壓倍增器等部分組成。</p>
11、<p> TLC5615通過固定增益為2 的運(yùn)放緩沖電阻串接網(wǎng)絡(luò),把10位數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換成模擬電壓。上電時(shí),內(nèi)部電路吧10DAC寄存器復(fù)位至全0,其輸出具有與基準(zhǔn)輸入相同的極性。</p><p> (1)數(shù)據(jù)輸入。由于DAC是12位寄存器,所以在寫入10位數(shù)據(jù)后,最低2位寫入2個(gè)“0”。</p><p> (2)輸出緩沖器。輸出緩沖器具有滿電源電壓幅度輸出,它帶有短路保護(hù)并
12、能驅(qū)動有100pF負(fù)載電容的2kΩ負(fù)載。</p><p> ?。?)外部基準(zhǔn)。外部基準(zhǔn)電壓輸入經(jīng)過緩沖,使得DAC輸入電阻與代碼無關(guān)。因此,REFin的輸入電阻為10MΩ,輸入電容典型值為5pF,它們與輸入代碼無關(guān)。基準(zhǔn)電壓決定DAC的滿度輸出。</p><p> ?。?)邏輯接口。邏輯輸入端可使用TTL或CMOS邏輯電平。使用滿電源電壓幅度時(shí),CMOS邏輯可得到最小的功耗。使用TTL邏輯
13、電平是,功耗需求增加約2倍。</p><p> (5)串行時(shí)鐘和更新速率。TLC5615的最大串行時(shí)鐘頻率近似為14MHz。通常,數(shù)字更新速率受片選周期的限制。對于滿度輸入階躍跳變,10位DAC的建立時(shí)間約為12.5μs,這把更新頻率限制在80KHz。</p><p> 當(dāng)片選信號為低電平時(shí),輸入數(shù)據(jù)讀入16bit移位寄存器。SCLK輸入的上升沿把數(shù)據(jù)移入輸入寄存器,接著,CS的上升沿
14、把數(shù)據(jù)傳送至DAC寄存器,當(dāng)CS為高電平時(shí),輸入的數(shù)據(jù)不能由時(shí)鐘同步送入輸入寄存器。所有CS的跳變應(yīng)發(fā)生在SCLK輸入為低電平時(shí)。</p><p> DIN只需要輸入12位數(shù)據(jù),DIN輸入的12位數(shù)據(jù)中,前10位為TLC5615輸入的D/A轉(zhuǎn)換數(shù)據(jù),并且輸入時(shí),高位在前,低位在后,后2位必須寫入為0的2位數(shù)值,因?yàn)門LC5615的DAC輸入鎖存器為12位寬。</p><p><b&
15、gt; 總流程圖:</b></p><p> 程序編譯及軟件仿真電路原理圖:</p><p><b> 元器件列表:</b></p><p> 五、課程設(shè)計(jì)軟件仿真結(jié)果截圖:</p><p> 1、按下三角波鍵示波器輸出三角波,同時(shí)液晶屏上顯示“san jiao bo”</p><
16、;p> 按下“鋸齒波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“ju chi bo”</p><p> 按下“方波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“fang bo”</p><p> 按下“正弦波”鍵示波器輸出三角波,同時(shí)液晶屏上顯示“sine”</p><p> 當(dāng)無任何鍵按下時(shí)示波器輸出直線,同時(shí)液晶屏上顯示“wave” </p>
17、<p> 6、顯示字符“三”:</p><p><b> 課程設(shè)計(jì)體會:</b></p><p> 本次課程設(shè)計(jì)我做的是信號發(fā)生器,參考相關(guān)書籍和老師給的程序,很快就把三角波、鋸齒波、方波、正弦波四種波形顯示出來了。后面就是波形顯示切換和在液晶屏上顯示對應(yīng)波形說明的問題。在老師同學(xué)和自己的努力下,在原程序上利用IF語句和SWITCH語句實(shí)現(xiàn)了波形按鍵切
18、換功能,即想要顯示方波按下“方波”鍵即可。另外我們這組還在LCM 1602液晶屏上顯示出了漢字,通過參考資料加上自己對漢字顯示原理的理解,最終在液晶屏上顯示出漢字“三”,雖然只是簡單的“三”,但是過程是相當(dāng)不容易。這次課程設(shè)計(jì)很有趣,讓我實(shí)實(shí)在在收獲了不少東西,知道了DA轉(zhuǎn)換和LCM1602顯示的原理,尤其是在LCM 1602漢字的顯示原理。這次課程設(shè)計(jì)也提高了我的編程能力和同學(xué)的合作能力。</p><p>&l
19、t;b> 主要參考文獻(xiàn):</b></p><p> 1、《nKDE51單片機(jī)實(shí)驗(yàn)教學(xué)系統(tǒng)實(shí)驗(yàn)指導(dǎo)書》南京郵電大學(xué),2011年</p><p> 2、《單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)》(第2版),謝維成等編著,清華大學(xué)出版社,2009年</p><p> 3、《單片機(jī)原理及應(yīng)用》(第2版),李建忠,西安電子科技大學(xué)出版社,2008年<
20、/p><p> 4、《基于protues的51系列單片機(jī)設(shè)計(jì)與仿真》侯玉寶 陳忠平 李成群等編著,電子工業(yè)出版社</p><p><b> 八、源程序代碼: </b></p><p><b> LCM1602.H</b></p><p> #ifndef LCM1602_h</p>
21、<p> #define LCM1602_h</p><p> #define BUSYFLAG0x80</p><p> #define BLINK0x01</p><p> #define NOBLINK0x00</p><p> unsigned char LCMReadState(void);</
22、p><p> void LCMDelay(int);</p><p> void LCMWriteCmd(unsigned char);</p><p> void LCMWriteData(unsigned char);</p><p> void LCMClear(void);</p><p> void L
23、CMInit(void);</p><p> void LCMGotoXY(unsigned char,unsigned char);</p><p> void LCMDisplayChar(unsigned char,unsigned char,unsigned char);</p><p> void LCMDisplayString(unsigned
24、char,unsigned char,unsigned char*);</p><p> void LCMBlink(unsigned char,unsigned char,unsigned char);</p><p><b> #endif</b></p><p><b> BOXING.H</b></p&
25、gt;<p> #include <reg51.h></p><p> #include <stdio.h></p><p> #include <intrins.h></p><p> #include <LCM1602.h></p><p> #define OSC
26、22118400</p><p> #define BAUDRATE9600</p><p> sbitDIN = P1^4; //串行數(shù)據(jù)輸入端</p><p> sbitSCK = P1^5; //串行時(shí)鐘輸入端</p><p> sbitCS = P1^6; //DA片選端</p>&l
27、t;p> sbit S0= P2^0; // 三角波</p><p> sbit S1= P2^1; //鋸齒波</p><p> sbit S2= P2^2; //方波波</p><p> sbit S3= P2^3;//正弦波</p><p><b> //正弦波</b
28、></p><p> unsigned char code type[256]={ </p><p> 0x80,0x83,0x86,0x89,0x8c,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,</p><p> 0xae,0xb1,0xb3,0xb6,0xb9,</p><
29、;p> 0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,</p><p> 0xe0,0xe2,0xe4,0xe6,0xe8,</p><p> 0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xfa,0
30、xfa,0xfb,</p><p> 0xfc,0xfd,0xfd,0xfe,0xfe,</p><p> 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfb,</p><p> 0xfa,0xfa,0xf9,0xf8,0xf6,</p><p
31、> 0xf5,0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,</p><p> 0xdc,0xda,0xd8,0xd5,0xd3,</p><p> 0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,0xb1,0xa
32、e,0xab,</p><p> 0xa8,0xa5,0xa2,0x9f,0x9c,</p><p> 0x99,0x96,0x93,0x90,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x77,0x74,0x70,0x6d,</p><p> 0x6a,0x67,0x64,0x61,0x5e,</p><p&g
33、t; 0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x39,0x37,0x34,</p><p> 0x32,0x2f,0x2d,0x2b,0x28,</p><p> 0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0f,
34、0x0d,</p><p> 0x0c,0x0b,0x0a,0x08,0x07,</p><p> 0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x01,</p><p> 0x01,0x02,0x02,0x02,0x03,</p><p>
35、 0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,</p><p> 0x15,0x16,0x18,0x1a,0x1c,</p><p> 0x1e,0x20,0x22,0x24,0x26,0x28,0x2b,0x2d,0x2f,0x32,0x34,0x37,0x39,0x3c,0x
36、3f,</p><p> 0x41,0x44,0x47,0x4a,0x4d,</p><p> 0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x74,0x77,0x7a,</p><p><b> 0x7d};</b></p><p>
37、void DAConvert(unsigned int da)//并行轉(zhuǎn)串行</p><p><b> {</b></p><p><b> int i;</b></p><p><b> da <<= 2;</b></p><p> da &=
38、0xFFC;</p><p><b> SCK = 0;</b></p><p><b> CS = 0;</b></p><p> for(i=0;i<12;i++)</p><p><b> {</b></p><p> if(da
39、& 0x800)</p><p><b> DIN = 1;</b></p><p> else DIN = 0;</p><p><b> SCK = 1;</b></p><p><b> SCK = 0;</b></p><p>&
40、lt;b> da <<= 1;</b></p><p><b> }</b></p><p><b> CS = 1;</b></p><p><b> SCK = 1;</b></p><p><b> DIN = 1;<
41、;/b></p><p><b> }</b></p><p> void Delay(unsigned int t)</p><p><b> {</b></p><p> unsigned int i;</p><p> while(t--)</p&
42、gt;<p> {for(i=0;i<100;i++);}</p><p><b> }</b></p><p> void ling ()</p><p> { LCMClear() ;</p><p> LCMDisplayString(1,5,"wave "
43、);</p><p><b> while(1)</b></p><p> { DAConvert(0);</p><p> if(S0==0||S1==0||S2==0||S3==0)break;</p><p><b> }</b></p><p><b&g
44、t; }</b></p><p> void sanjiaobo()</p><p> { LCMClear() ;</p><p> LCMDisplayString(1,2,"san jiao bo");</p><p><b> while(1)</b></p&
45、gt;<p> { unsigned int i;</p><p> for(i=0;i<256;i++)</p><p> {DAConvert(i);} </p><p> for (i=256;i>0;i--)</p><p> { DAConvert(i);}</p><p&g
46、t; if(S0==1)break;}</p><p><b> }</b></p><p> void juchibo()</p><p> { LCMClear() ;</p><p> LCMDisplayString(1,2,"ju chi bo");</p>
47、<p><b> while(1)</b></p><p> {unsigned int i;</p><p> for (i=0;i<256;i++)</p><p> { DAConvert(i);}</p><p> if(S1==1)break;}</p><p
48、><b> }</b></p><p> void fangbo()</p><p> { LCMClear() ;</p><p> LCMDisplayString(1,2,"fang bo");</p><p><b> while (1)</b>
49、;</p><p><b> {</b></p><p> DAConvert(40);</p><p> Delay(50);</p><p> DAConvert(0);</p><p> Delay(50);</p><p> if(S2==1)brea
50、k; }</p><p><b> }</b></p><p> void sine()</p><p> { LCMClear() ;</p><p> LCMDisplayString(1,5,"sine");</p><p><b> whi
51、le(1)</b></p><p><b> {</b></p><p> unsigned char i;</p><p> DAConvert(type[i]);</p><p><b> i++;</b></p><p> if(S3==1)bre
52、ak;}</p><p><b> }</b></p><p> void boxing(void)</p><p> { int key=0;</p><p><b> while(1)</b></p><p><b> { </b>
53、</p><p> if ( S0==1&&S1==1 && S2==1 &&S3==1 ) key=0;</p><p> if ( S0==0) key=1;</p><p> if ( S1==0) key=2;</p><p> if ( S2==0) key=3;</p&
54、gt;<p> if ( S3==0) key=4;</p><p> switch (key)</p><p> {case 0: ling(); </p><p><b> break;</b></p><p> case 1: sanjiaobo();</p><p&
55、gt;<b> break;</b></p><p> case 2: juchibo();</p><p><b> break;</b></p><p> case 3: fangbo();</p><p><b> break;</b></p>&
56、lt;p> case 4: sine();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
57、t;p><b> LCM1602.C</b></p><p> #include <reg51.h></p><p> #include <intrins.h></p><p> #include <LCM1602.H> </p><p> #include <b
58、oxing.h></p><p> #define BUSYFLAG0x80</p><p> #define BLINK0x01</p><p> #define NOBLINK0x00</p><p> #define LCM_DBP0</p><p> sbit LCM_RS= P
59、1^0;</p><p> sbit LCM_RW= P1^1;</p><p> sbit LCM_E= P1^2;</p><p> sbit LCM_BLC= P1^3;</p><p> unsigned int data DelayConst = 140;</p><p> /******
60、************************************************************************</p><p> 函數(shù)名:LCMDelay</p><p> 功 能:通過循環(huán)的方式延時(shí)</p><p> 參 數(shù):int,表示要延時(shí)的毫秒數(shù)</p><p> ************
61、******************************************************************/</p><p> void LCMDelay(int ms)</p><p><b> {</b></p><p> unsigned int i,cnt;</p><p> c
62、nt = DelayConst * ms;</p><p> for(i=0;i<cnt;i++);</p><p><b> }</b></p><p> /******************************************************************************</p>
63、;<p> 函數(shù)名:LCMReadState</p><p> 功 能:查詢LCM的忙標(biāo)志/當(dāng)前AC地址</p><p> 返 回:BYTE,最高bit為1表示忙,為0表示閑</p><p> **************************************************************************
64、****/</p><p> unsigned char LCMReadState(void)</p><p><b> {</b></p><p> unsigned char state;</p><p> LCM_E = 0;</p><p> LCM_RS = 0;</p&
65、gt;<p> LCM_RW = 1;</p><p> LCM_E = 1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> state = LCM_DB;</p><p>
66、 LCM_E = 0;</p><p> return state;</p><p><b> }</b></p><p> /*******************************************************************************</p><p> 函數(shù)名:
67、LCMClear</p><p><b> 功 能:清屏</b></p><p> *******************************************************************************/</p><p> void LCMClear(void)</p><p&
68、gt;<b> {</b></p><p> LCMDelay(1);</p><p> LCM_E = 0;</p><p> LCM_RS = 0;</p><p> LCM_RW = 0;</p><p> LCM_DB = 0x01;</p><p>
69、 LCM_E = 1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> LCM_E = 0;</p><p> LCMDelay(1);</p><p><b> }</b&g
70、t;</p><p> /*******************************************************************************</p><p> 函數(shù)名:LCMWriteCmd</p><p> 功 能:向LCM寫入控制字</p><p> 參 數(shù):BYTE,命令字節(jié)。寫入
71、前不判斷忙表示(因?yàn)槌跏蓟^程中不能判斷)</p><p> *******************************************************************************/</p><p> void LCMWriteCmd(unsigned char cmd)</p><p><b> {</
72、b></p><p> LCMDelay(1);</p><p> LCM_E = 0;</p><p> LCM_RS = 0;</p><p> LCM_RW = 0;</p><p> LCM_DB = cmd;</p><p> LCM_E = 1;</p>
73、<p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> LCM_E = 0;</p><p><b> }</b></p><p> /******************************
74、************************************************</p><p> 函數(shù)名:LCMWriteData</p><p> 功 能:向LCM寫入數(shù)據(jù)</p><p> 參 數(shù):BYTE,將要寫入的數(shù)據(jù)</p><p> **********************************
75、********************************************/</p><p> void LCMWriteData(unsigned char dc)</p><p><b> {</b></p><p> while(LCMReadState() & BUSYFLAG);</p>&l
76、t;p> LCM_RS = 1;</p><p> LCM_RW = 0;</p><p> LCM_DB = dc;</p><p> LCM_E = 1;</p><p><b> _nop_();</b></p><p><b> _nop_();</b&g
77、t;</p><p> LCM_E = 0;</p><p><b> }</b></p><p> /******************************************************************************</p><p> 函數(shù)名:LCMInit</p
78、><p> 功 能:初始化LCM</p><p> 參 數(shù):DWORD,晶振頻率(Hz),供計(jì)算延時(shí)常數(shù)</p><p> ******************************************************************************/</p><p> void LCMInit(void
79、)</p><p><b> {</b></p><p> LCMDelay(60);// 延時(shí)60ms,等待LCM復(fù)位</p><p> LCMWriteCmd(0x38);// 功能設(shè)置:8位接口,2行,5x7字符點(diǎn)陣</p><p> LCMDelay(5);// 延時(shí)<
80、/p><p> LCMWriteCmd(0x38);// 第二次</p><p> LCMDelay(1);// 延時(shí)</p><p> LCMWriteCmd(0x38);// 此后可以通過監(jiān)測忙標(biāo)志判斷指令執(zhí)行情況</p><p> while(LCMReadState() & BUSYFLAG);
81、</p><p> LCMWriteCmd(0x08);// 關(guān)閉顯示 </p><p> while(LCMReadState() & BUSYFLAG);</p><p> LCMWriteCmd(0x01);// 清屏</p><p> while(LCMReadState() & BUSYFLA
82、G);</p><p> LCMWriteCmd(0x06);// 顯示地址自動增量,整體不移位</p><p> while(LCMReadState() & BUSYFLAG);</p><p> LCMWriteCmd(0x0e);// 開顯示,開光標(biāo),不閃爍</p><p> while(LCMRead
83、State() & BUSYFLAG);</p><p><b> }</b></p><p> /******************************************************************************</p><p> 函數(shù)名:LCMGotoXY</p><
84、;p> 功 能:移動光標(biāo)到X行,Y列</p><p> 參 數(shù):BYTE,x表示行(0,1),y表示列(橫向,取值0~0x0f)</p><p> ******************************************************************************/</p><p> void LCMGoto
85、XY(unsigned char x,unsigned char y)// x:行(0~1) y:列(0~F)</p><p><b> {</b></p><p> unsigned char cmd;</p><p><b> if(x==0)</b></p><p><b>
86、; {</b></p><p> cmd = 0x80 | y;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cmd = 0x80 |
87、0x40 | y; //(第1行第0列為40H開始)</p><p><b> }</b></p><p> LCMWriteCmd(cmd);</p><p> while(LCMReadState() & BUSYFLAG);</p><p><b> }</b></p&g
88、t;<p> /******************************************************************************</p><p> 函數(shù)名:LCMDisplayString</p><p> 功 能:從指定的位置開始顯示字符串</p><p> 參 數(shù):x表示行(0,1),y表示列
89、(橫向,取值0~0x0f),*str為指向?qū)⒁@示的字符串的指針</p><p> ******************************************************************************/</p><p> void LCMDisplayString(unsigned char x,unsigned char y,unsigned
90、char* str)</p><p><b> {</b></p><p> unsigned char ptr;</p><p><b> ptr = 0;</b></p><p> while(*(str+ptr) != 0)</p><p><b>
91、 {</b></p><p> LCMDisplayChar(x,(y+ptr),*(str+ptr));</p><p><b> ptr++;</b></p><p><b> }</b></p><p><b> }</b></p>&l
92、t;p> #include <reg51.h></p><p> #include <stdio.h></p><p> #define BUSYFLAG0x80</p><p> #define BLINK0x01</p><p> #define NOBLINK0x00</p>
93、<p> #define OSC22118400</p><p> unsigned char ucTH,ucTL,Ticks;</p><p> //*****************************************************************************</p><p> // 函數(shù)名:T0
94、ISR</p><p> // 功 能:50ms中斷服務(wù)程序</p><p> //*****************************************************************************</p><p> void T0ISR(void) interrupt 1</p><p>&l
95、t;b> {</b></p><p> TH0 = ucTH;</p><p> TL0 = ucTL;</p><p><b> TR0 = 1;</b></p><p><b> Ticks ++;</b></p><p> if(Ticks
96、 == 20)</p><p><b> {</b></p><p> Ticks = 0;</p><p> LCM_BLC = 0;</p><p><b> }</b></p><p><b> }</b></p><
97、p> void main(void)</p><p><b> {</b></p><p><b> // 初始化</b></p><p> EA = 0;// 停止所有中斷</p><p> Ticks = 0;</p><p> ucTH =
98、(65536-OSC/12/20)/256;// 計(jì)算50ms定時(shí)的時(shí)間常數(shù)</p><p> ucTL = (65536-OSC/12/20)%256;</p><p> TMOD = 0x01;// T0:模式1,16位定時(shí)器</p><p> TH0 = ucTH;</p><p> TL0 = ucTL;</
99、p><p> ET0 = 1;// T0允許中斷</p><p> TR0 = 1;// 啟動定時(shí)器</p><p> EA = 1;// 打開總中斷允許</p><p> LCMInit();</p><p> LCMClear();</p><p><
100、b> while(1)</b></p><p> {boxing();} </p><p><b> }</b></p><p><b> 漢字顯示程序</b></p><p> #include<reg51.h> </p><p>
101、 #define uint unsigned int </p><p> #define uchar unsigned char </p><p> sbit rs=P1^0; </p><p> sbit rw=P1^1; </p><p> sbit en=P1^2;</p><p> sbit LCM
102、_BLC = P1^3; </p><p><b> //字符“三”</b></p><p> uchar code table[]={0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x0F,//“三”左上半部分</p><p> 0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x7C, /
103、/“三”右上半部分</p><p> 0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00, //“三”左下半部分</p><p> 0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00//“三”右下半部分</p><p><b> };</b></p><p>
104、 void delay(uint n) //延時(shí) </p><p><b> { </b></p><p> uint x,y; </p><p> for(x=n;x>0;x--) </p><p> for(y=110;y>0;y--); <
105、/p><p><b> } </b></p><p> void lcd_wcom(uchar com) //向lcm1602寫入命令字 </p><p><b> { </b></p><p><b> rs=0; </b></p
106、><p><b> rw=0; </b></p><p><b> P0=com; </b></p><p> delay(5); </p><p><b> en=1; </b></p><p><b> en=0; </b>
107、;</p><p><b> } </b></p><p> void lcd_wdat(uchar dat) //向lcm1602寫入數(shù)據(jù) </p><p><b> { </b></p><p><b> rs=1; </b></
108、p><p><b> rw=0; </b></p><p><b> P0=dat; </b></p><p> delay(5); </p><p><b> en=1; </b></p><p><b> en=0; </b&g
109、t;</p><p><b> } </b></p><p> void lcd_init() //lcm1602初始化</p><p><b> { </b></p><p> lcd_wcom(0x38); </p
110、><p> lcd_wcom(0x0c); </p><p> lcd_wcom(0x06); </p><p> lcd_wcom(0x01); </p><p><b> }</b></p><p> void main
111、() </p><p><b> { </b></p><p><b> char m=0;</b></p><p> LCM_BLC = 0; </p><p> lcd_init(); </p><p> lcd_wcom(0x40);
112、 //設(shè)定CGRAM地址 </p><p> for(m=0;m<64;m++) //將代碼寫入CGRAM中 </p><p><b> { </b></p><p> lcd_wdat(table[m]); </p><p><b> } </b
113、></p><p> lcd_wcom(0x85); //設(shè)定上排的顯示位置 </p><p> for(m=0;m<2;m++) </p><p><b> { </b></p><p> lcd_wdat(m); </p><p><
114、b> } </b></p><p> lcd_wcom(0xc5); //設(shè)定下排的顯示位置 </p><p> for(m=2;m<4;m++) </p><p><b> { </b></p><p> lcd_wdat(m); </p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機(jī)課程設(shè)計(jì)---多功能信號發(fā)生器設(shè)計(jì)
- 課程設(shè)計(jì)---基于單片機(jī)的信號發(fā)生器的設(shè)計(jì)
- 基于單片機(jī)的函數(shù)信號發(fā)生器課程設(shè)計(jì)
- 課程設(shè)計(jì)—基于單片機(jī)的方波信號發(fā)生器
- 課程設(shè)計(jì)--基于單片機(jī)的函數(shù)信號發(fā)生器
- 課程設(shè)計(jì)-基于單片機(jī)的函數(shù)信號發(fā)生器設(shè)計(jì)
- 基于51單片機(jī)函數(shù)信號發(fā)生器設(shè)計(jì)
- 基于單片機(jī)的函數(shù)信號發(fā)生器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告(信號發(fā)生器)
- 單片機(jī)信號發(fā)生器課程設(shè)計(jì)論文
- 簡易信號發(fā)生器單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告---基于單片機(jī)的波形發(fā)生器
- 基于單片機(jī)的波形發(fā)生器課程設(shè)計(jì)
- 基于at89s51單片機(jī)的信號發(fā)生器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-pwm波信號發(fā)生器的研制
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--信號發(fā)生器
- 單片機(jī)課程設(shè)計(jì)--波形發(fā)生器的設(shè)計(jì)
- 課程設(shè)計(jì)基于單片機(jī)之波形發(fā)生器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)(波形發(fā)生器)
- 單片機(jī)課程設(shè)計(jì)---波形發(fā)生器
評論
0/150
提交評論