液晶顯示AD信號的曲線_第1頁
液晶顯示AD信號的曲線_第2頁
液晶顯示AD信號的曲線_第3頁
液晶顯示AD信號的曲線_第4頁
液晶顯示AD信號的曲線_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、浙江海洋學(xué)院東??茖W(xué)技術(shù)學(xué)院單片機課程設(shè)計報告設(shè)計題目 液晶顯示AD信號的曲線 年級專業(yè) 2014 年 12 月 6 日課程設(shè)計量化評分標準 指標最高分評分要素評分方案設(shè)計35方案選擇合理,分析、設(shè)計正確,原理清楚,電路、程序流程圖清晰,結(jié)構(gòu)合理,程序簡潔、正確。  調(diào)試15過程清晰,調(diào)試方案設(shè)計合理,測試點選擇適當,程序編寫正確,調(diào)試步驟清楚。 結(jié)果20電路及程序運行結(jié)果正確,達到預(yù)期效果。  設(shè)計報告20報告結(jié)構(gòu)嚴謹,邏輯嚴密,論述層次清晰,語言流暢,表達準確,重點突出,報告完全符合規(guī)范化要求,用計算機打印成文。 工作態(tài)

2、度10工作態(tài)度認真,按時完成設(shè)計任務(wù),是否獨立完成。  總 評 成 績 指導(dǎo)老師評語:目 錄1.引 言42.方案設(shè)計42.1.設(shè)計要求42.2.設(shè)計方案43.硬件設(shè)計53.1.單片機最小系統(tǒng)53.2.lcd顯示部分63.3.按鍵部分83.4.信號采集電路ADC083294.軟件設(shè)計104.1.軟件流程104.2.分塊子程序模塊105.實驗結(jié)果與討論(或?qū)嶒灧抡媾c討論)115.1.實驗仿真115.2.結(jié)果討論126.心得體會137.附 錄A;源程序148.參考文獻20液晶顯示AD信號曲線1. 引 言隨著電子工業(yè)的飛速發(fā)展,諸多家用電子產(chǎn)品和各種 儀器儀表在顯示技術(shù)方

3、面提出了新的要求,原有的單純LED或LED數(shù)碼管、電磁式儀表等已遠不能滿足要求。建立性能優(yōu)良、價格低廉的既能顯示字符也能顯示漢字和圖形、圖表、曲線等的顯示器一直是工程技術(shù)人員所關(guān)注的問題。LCD液晶顯示器能勝任上述要求,且有工作電壓低、功耗小、驅(qū)動簡單、高可靠性、壽命長、性能穩(wěn)定等優(yōu)點,其發(fā)展前景極為廣闊。液晶應(yīng)用很廣,例如液晶電子手表,計算器以及液晶電視、便攜式計算機等,處處可以看到 液晶的足跡。本文主要介紹如何用AT89S52單片控制點陣液晶模塊將現(xiàn)場采集到的信號以實時曲線的方式表達,為信號的現(xiàn)場分析提供便利,有較高的實用價值。利用STC89C52單片機對12864液晶進行讀寫操作并顯示實

4、時信號波形,這樣便構(gòu)成了一個單片機簡易示波器。2. 方案設(shè)計2.1. 設(shè)計要求1、基本要求(1) 用ADC0832采集數(shù)據(jù)信號發(fā)生器中的正弦信號 。(2)在LCD(型號建議選LCD12864)上顯示信號的波形2、發(fā)揮部分 (1)能夠LCD12864上同時顯示2路信號信號(2)曲線上同時顯示 波形峰值例如CH0:0.15V2.2. 設(shè)計方案2.1.1 單片機芯片的選擇本設(shè)計選用STC89C52單片機,它是一種帶8K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,足夠本設(shè)計之用,高性能CMOS8位微處理器該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集

5、和輸出管腳相兼容。功能強大、使用方便的STC89C52單片機適用于許多較為復(fù)雜的應(yīng)用場合1。2.1.2 總體設(shè)計及系統(tǒng)原理LCD顯示AD采樣波形的整體設(shè)計思路較為明確簡單,包括單片機、自動復(fù)位電路、按鍵電路、LCD顯示電路、AD采樣電路。在確定系統(tǒng)的大體形式之后,畫出本系統(tǒng)的總體結(jié)構(gòu)布局,電路原理如圖2-1所示顯示電路用的是無字符AMPIRE12864,并行方式,P0口為LCD并行數(shù)據(jù)口,P2為LCD控制端口;P3為調(diào)頻按鍵口;P1為ADC0832數(shù)據(jù)采樣端口。 圖 2-1 系統(tǒng)設(shè)計3. 硬件設(shè)計3.1. 單片機最小系統(tǒng)單片機最小系統(tǒng)選用STC89C52,包含上電自動復(fù)位電路和手動復(fù)位電路,可

6、對單片機進行復(fù)位操作。圖 3-1 上電復(fù)位電路3.2. lcd顯示部分圖 3-2 顯示電路本設(shè)計顯示用的是LCD12864液晶顯示屏,用來顯示波形及其相應(yīng)參數(shù),LCD液晶顯示器能勝任上述要求,且有工作電壓低、功耗小、驅(qū)動簡單、高可靠性、壽命長、性能穩(wěn)定等優(yōu)點,其發(fā)展前景極為廣闊。sbit EN=P20; /EN使能sbit RW=P21;/RW端為0-寫,1-讀sbit RS=P22; /RS端為0命令,為1數(shù)據(jù)sbit CS1=P26;/片選1低電平有效,控制左半屏sbit CS2=P27;/片選2低電平有效,右半屏/一塊驅(qū)動驅(qū)動一塊64*64的液晶,每塊液晶有8頁,每頁8行,每行64位顯示

7、開關(guān)函數(shù):0x3e是關(guān)顯示,0x3f是開顯示指令是RS都為0;讀寫 狀態(tài)數(shù)據(jù)/指令RWRSDB7DB6DB5DB4DB3DB2DB1DB00011XXXXXX寫命令 設(shè)置選擇行命令 起始行0xc0;RWRSDB7DB6DB5DB4DB3DB2DB1DB00010111XXX寫命令 設(shè)置選擇頁(page)命令 起始頁 0xB8;RWRSDB7DB6DB5DB4DB3DB2DB1DB00001XXXXXX寫命令 設(shè)置選擇列(Y address)命令 起始列0x40;第一列為0x40一直到0x7F共64列,因為此液晶有128列,所以有兩塊驅(qū)動芯片驅(qū)動。RWRSDB7DB6DB5DB4DB3DB2DB

8、1DB010Busy0ON/OFFRESET0000讀狀態(tài) Busy:為1內(nèi)部忙,不能對液晶進行操作。0-工作正常。ON/OFF:1-顯示關(guān)閉;0-顯示打開RESET:1-復(fù)位狀態(tài);0-正常。 說明在Busy和RESET狀態(tài)時,除讀狀態(tài)指令外,其他任何指令均不會對驅(qū)動器產(chǎn)生作用。20/* LCD12864液晶測忙子程序(讀狀態(tài))形式2 */ void Busy(void) uchar busy; do EN=0; RS=0; RW=1; Delay_1ms(20); EN=1; busy=P0; Delay_1ms(20); EN=0; while(busy&0x80);寫命令/寫數(shù)據(jù)

9、 (形式一樣):/*形式一;需要#include<intrins.h>*/void Write_com(uchar value) Busy(); RS=0; /0為命令;1為數(shù)據(jù)RW=0;Lcd_data=value;EN=1;_nop_();_nop_();EN=0;設(shè)置頁:void Set_page(uchar page)page=0xB8|page; /1011 1000|page;page 07Write_lcd_com(page);設(shè)置起始行:void Set_line(uchar startline) /設(shè)置顯示的起始行 063 startline=0xC0|start

10、line; /起始 行地址為0xC0 Write_lcd_com(startline);void SetLine(uchar line) /line -> 0 : 7 選行寫指令 line = line & 0x07; line = line | 0xb8; /1011 1xxx SendCommand(line);void SetColum(uchar colum) /colum -> 0 :63 colum = colum & 0x3f; /0011 1111 框定范圍 超過64的自動減回063 colum = colum | 0x40; /01xx xxxx

11、SendCommand(colum);void SetStartLine(uchar startline) /startline -> 0 : 63置顯示起始行 startline = startline & 0x3f; startline = startline | 0xc0; /11xxxxxx SendCommand(startline);/*顯示開關(guān)函數(shù):0x3e是關(guān)顯示,0x3f是開顯示*/void Set_onoff(uchar onoff) if(onoff=1)Write_lcd_com(0x3f);elseWrite_lcd_com(0x3e);控制屏幕:voi

12、d SelectScreen(uchar screen)switch(screen) case 0:CS1=0;CS2=0;break;/全屏 case 1:CS1=0;CS2=1;break;/左半屏 case 2:CS1=1;CS2=2;break;/右半屏 default: break; 清屏的格式固定void ClearScreen(uchar screen) /清屏 0全屏 1左 2右 uchar i,j;SelectScreen(screen);for(i=0;i<8;i+) Set_page(i); Set_column(0); for(j=0;j<64;j+) Wr

13、ite_lcd_data(0); 初始化1:void Init_lcd(void)Busy();SelectScreen(0);Set_onoff(0);SelectScreen(0);Set_onoff(1);SelectScreen(0);ClearScreen(0);Set_page(0);3.3. 按鍵部分按鍵設(shè)定部分比較簡單,因為本系統(tǒng)按鍵少,所以在設(shè)計上采用了外部中斷按鍵方式。按下操作鍵動作如下:操作鍵P3.2:采樣間隔時間增加;圖 3-3 按鍵電路操作鍵P3.3:采樣間隔時間減少;3.4. 信號采集電路ADC0832此電路由信號發(fā)生其、一個電位器和一個ADC0832芯片組成,電位

14、器被用來調(diào)信號零點,P1_0片選信號,使能芯片;P1_1給芯片提供時鐘信號;P1_2、P1_3控制啟動芯片與采樣方式。圖 3-4 ADC0832電路4. 軟件設(shè)計4.1. 軟件流程圖4-1軟件設(shè)計流程根據(jù)電子鐘的功能設(shè)計要求給出如下的軟件設(shè)計流程4.2. 分塊子程序模塊主要分塊子程序說明如下:(1):adc0832.c :ADC采樣子程序;Adc0832.c主要是使用P1口配置ADC0832的啟動,采樣方式,與讀取ad數(shù)據(jù)的子函數(shù)。.(2)lcd.c :LCD液晶顯示子程序;ülcd.c配置了12864LCD所使用到得基本的底層程序及顯示漢字和Adc采樣數(shù)據(jù)的分析及顯示程序。(3)m

15、yfun.c:其他子函數(shù);ümyfun.c配置了關(guān)于按鍵的中斷初始化。(4)main.c:主函數(shù);主函數(shù)力求簡潔明了,能看出程序的運行順序。程序框架如下:圖4-2程序框架圖5. 實驗結(jié)果與討論(或?qū)嶒灧抡媾c討論)5.1. 實驗仿真依據(jù)各功能模塊的功能要求和工作過程畫出程序的流程圖,然后根據(jù)流程圖和系統(tǒng)的硬件連接寫出詳細的程序,接著對各個子程序進行編譯,調(diào)試,運行,看看是否能達到其功能,然后再將整個程序糅合在一起進行整體軟件調(diào)試。在整體調(diào)試中,需注意寄存器組不能重復(fù),在進入中斷時,哪些寄存器內(nèi)容和參數(shù)需入棧保護,以及調(diào)用子程序時各參數(shù)必須統(tǒng)一,在編譯通過時,最好能把整個程序再單步執(zhí)行一

16、遍。單步執(zhí)行時看看每步執(zhí)行完后數(shù)據(jù)各個特殊功能寄存器中數(shù)據(jù)的變化,這樣才能確保整個程序按照系統(tǒng)的工作過程和功能要求執(zhí)行。仿真結(jié)果如圖5-1所示。 圖5-1 實驗仿真結(jié)果5.2. 結(jié)果討論本設(shè)計以AT89C52單片機為系統(tǒng)的控制核心,采用proteus仿真軟件進行測試。Proteus是一款比較常用的單片機仿真軟件,用proteus和keil配合進行仿真提高系統(tǒng)運行效率與穩(wěn)定性。由于采用了動態(tài)掃描的方式實現(xiàn)對點陣式LED電子顯示屏的控制,使系統(tǒng)能夠穩(wěn)定、清晰地顯示波形。6. 心得體會單片機是電氣信息工程及其自動化專業(yè)一門必備的課程及技術(shù),而單片機課程設(shè)計則是檢驗學(xué)習(xí)成果,加深學(xué)習(xí)深度的一種途徑。課

17、程設(shè)計的三個星期是自己人生階段中很難忘的一段經(jīng)歷,從設(shè)計之初的無從下手到設(shè)計工作的圓滿完成,期間遇到了諸多的問題和困難。上網(wǎng)查資料,和同學(xué)討論程序思路,圖書館中翻閱關(guān)于lcd的資料,還有就是每個星期老師的檢查和指導(dǎo)。在這種不斷自學(xué)和探索中開闊了視野,思路一點一點的清晰,lcd12864模塊 adc0832模塊等等,仿真也一點一點的成型。同時,在此期間,我也從同學(xué)們那里得到許多幫助,他們在我苦無頭緒之時幫我找資料,在我有疑難時耐心給予解答,并一直給予我鼓勵和支持,支持我認真細致的完成這篇設(shè)計。我也要向他們致以謝意??梢哉f,沒有魯老師的耐心輔導(dǎo)與幫助,很難在規(guī)定時間內(nèi)完成這樣一篇論文。我向王建行,

18、魯曉東老師表示由衷的感謝!7. 附 錄A;源程序源程序代碼(主要語句要有注釋)/* adc0832.c */ #include"adc0832.h"void DELAY(uint i)while(-i);uchar Init_adc0(uchar j)uchar i,data_1st,data_2nd; while(1)CS=0; /片選芯片DI=1; /DI在第一個下降沿前必須高電平,表示啟動信號CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /1stDI=1; /第二 第三個下降沿前個輸入一個二進制數(shù)

19、/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /2ndDI=0; /各代表不同的采樣方式(10 CH0;11 CH1;00 CH0=IN+;01 CH0=IN-)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /3rd AD轉(zhuǎn)化初始化話完成DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_1st|=DO;data_1st<<=1;DELAY(2);CLK=1;DELAY(2);

20、 for(i=8;i>0;i-) CLK=0; data_2nd|=DO;data_2nd<<=1;DELAY(2);CLK=1;DELAY(2); CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;CS=1; /關(guān)閉adc0832DELAY(j); return data_1st; uchar Init_adc1(uchar j)uchar i,data_1st,data_2nd; while(1)CS=0

21、; /片選芯片DI=1; /DI在第一個下降沿前必須高電平,表示啟動信號CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /1stDI=1; /第二 第三個下降沿前個輸入一個二進制數(shù)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /2ndDI=1; /各代表不同的采樣方式(10 CH0;11 CH1;00 CH0=IN+;01 CH0=IN-)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=

22、0; /3rd AD轉(zhuǎn)化初始化話完成DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_1st|=DO;data_1st<<=1;DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_2nd|=DO;data_2nd<<=1;DELAY(2);CLK=1;DELAY(2); CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;DELAY(2); /等同于_nop_(); _nop_();CL

23、K=1;DELAY(2);CLK=0;CS=1; /關(guān)閉adc0832DELAY(j); return data_1st; /* adc0832.c */ #include"adc0832.h"void DELAY(uint i)while(-i);uchar Init_adc0(uchar j)uchar i,data_1st,data_2nd; while(1)CS=0; /片選芯片DI=1; /DI在第一個下降沿前必須高電平,表示啟動信號CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /1stDI=

24、1; /第二 第三個下降沿前個輸入一個二進制數(shù)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /2ndDI=0; /各代表不同的采樣方式(10 CH0;11 CH1;00 CH0=IN+;01 CH0=IN-)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /3rd AD轉(zhuǎn)化初始化話完成DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_1st|=DO;data_1st<<=1;D

25、ELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_2nd|=DO;data_2nd<<=1;DELAY(2);CLK=1;DELAY(2); CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;CS=1; /關(guān)閉adc0832DELAY(j); return data_1st; uchar Init_adc1(uchar j)uchar i,data_1st

26、,data_2nd; while(1)CS=0; /片選芯片DI=1; /DI在第一個下降沿前必須高電平,表示啟動信號CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /1stDI=1; /第二 第三個下降沿前個輸入一個二進制數(shù)/CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0; /2ndDI=1; /各代表不同的采樣方式(10 CH0;11 CH1;00 CH0=IN+;01 CH0=IN-)/CLK=0;DELAY(2); /等同于_nop_(); _nop

27、_();CLK=1;DELAY(2);CLK=0; /3rd AD轉(zhuǎn)化初始化話完成DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_1st|=DO;data_1st<<=1;DELAY(2);CLK=1;DELAY(2); for(i=8;i>0;i-) CLK=0; data_2nd|=DO;data_2nd<<=1;DELAY(2);CLK=1;DELAY(2); CLK=0;DELAY(2); /等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;DELAY(2);

28、/等同于_nop_(); _nop_();CLK=1;DELAY(2);CLK=0;CS=1; /關(guān)閉adc0832DELAY(j); return data_1st; /* lcd.c */#include"lcd12864.h"void Delay_1ms(uint x) uint i,j; for(i=x;i>0;i-) for(j=110;j>0;j-); void Busy(void) Lcd_data=0x00;RS=0;RW=1;EN=1; while(Lcd_data&0x80);EN=0;void Write_lcd_com(uchar

29、 value) Busy(); RS = 0; /RS端為0命令,為1數(shù)據(jù) RW = 0;Lcd_data = value;EN = 1;delaylcd(2); EN = 0;void Write_lcd_data(uchar date)Busy(); RS = 1;/RS端為0命令,為1數(shù)據(jù) RW = 0;Lcd_data = date;EN = 1;delaylcd(2); EN = 0;void Set_page(uchar page) / page 07page=0x07&page; /防止賦值出現(xiàn)錯誤導(dǎo)致命令錯誤page=0xB8|page;Write_lcd_com(pa

30、ge);void Set_line(uchar startline) /設(shè)置顯示的起始行 063 startline=0x3f&startline;startline=0xC0|startline; /起始 行地址為0xC0 Write_lcd_com(startline);void Set_column(uchar column)column = column & 0x3f; /0011 1111 框定范圍 超過64的自動減回063 column = column | 0x40; /01xx xxxx Write_lcd_com(column);void Set_onoff(

31、uchar onoff) /顯示開關(guān)函數(shù):0x3e是關(guān)顯示,0x3f是開顯示if(onoff=1)Write_lcd_com(0x3f);elseWrite_lcd_com(0x3e);void SelectScreen(uchar screen)switch(screen) case 0:CS1=0;CS2=0;break;/全屏 case 1:CS1=0;CS2=1;break;/左半屏 case 2:CS1=1;CS2=0;break;/右半屏 default: break; void ClearScreen(uchar screen) /清屏 0全屏 1左 2右 uchar i,j;S

32、electScreen(screen);for(i=0;i<8;i+) Set_page(i); Set_column(0); for(j=0;j<64;j+) Write_lcd_data(0); void Init_lcd(void)Busy();SelectScreen(0);Set_onoff(0);SelectScreen(0);Set_onoff(0);SelectScreen(0);ClearScreen(0);Set_page(0);void Display1616(uchar screen,uchar page,uchar column,uchar *p) uch

33、ar i;SelectScreen(screen);Set_page(page);Set_column(column);for(i=0;i<16;i+)Write_lcd_data(pi);Set_page(page+1);Set_column(column);for(i=0;i<16;i+)Write_lcd_data(pi+16);Set_onoff(1);void Display816(uchar screen,uchar page,uchar column,uchar *p) uchar i;SelectScreen(screen);Set_page(page);Set_column(column);for(i=0;i&l

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論