《基于單片機的簡易數字示波器》由會員分享,可在線閱讀,更多相關《基于單片機的簡易數字示波器(13頁珍藏版)》請在裝配圖網上搜索。
1、
本科生課程設計
題目: 基于單片機的簡易數字示波器
題目來源:□省部級以上 □市廳級 □橫向 □自選
題目性質:□理論研究 □應用與理論研究 □實際應用研究
學 院: 信息工程學院 系: 自動化
專業(yè)班級:
學生姓名: 學號:
起訖日期:
2、
指導教師: 職稱:
指導教師所在單位:
學院審核(簽名):
審核日期:
二0 年制
目 錄
1、設計原理概述.................................................
1.1設計背景......
3、...............................................
1.2設計原理框圖..................................................
2 硬件的設計.....................................................................
2.1.最小系統的設計.........................................
2.1.1最小系統的電路設計................................
4、 2.1.2單片機STC89c52介紹........................................
2.2 采樣設計
2.2.1 采樣電路設計.......................................
2.2.2 ADC0809介紹....................................
2.3顯示設計
2.3.1 顯示電路設計。。....................................
2.3.2 12864液晶介紹.................
5、.........................
3. 軟件設計..................................
3.1程序流程圖...............................
3.2 采樣程序設計與分析................
3.3顯示程序設計與分析...................
4. 仿真............................
4.1 Proteus仿真軟件介紹..........................
4.2 矩形波仿真....................
6、.................
4.2三角波仿真....................................
4.3正弦波仿真.............................
5. 設計總結................................
6. 參考文獻...........................................
7. 附錄......................................
1設計原理概述
1.1、設計背景
示波器被廣泛應用于各個領域。隨著微
7、電子技術和計算機技術的飛速發(fā)展,示波器也從模擬示波器向數字示波器發(fā)展。同模擬示波器相比,數字示波器具有很多優(yōu)點,并開始逐步取代模擬示波器,成為市場上的主流。示波器是現代電子測量中最常用的儀器,它是一種可以用來觀察、測量、記錄各種瞬時電壓,并以波形方式顯示其與時間關系的電子儀器。可是現在的數字示波器比較貴,普遍在1000元以上,這對于許多電子愛好者來說是一個比較大的負擔,尤其是學生?;趩纹瑱C的簡易數字示波器可以很好的解決這個問題,簡易數字示波器不但成本低廉,而且能夠滿足許多電子愛好者的測量需求,可以得到很廣泛的應用。
1.2設計原理框圖
8、 原理圖設計
2硬件設計
2.1 最小系統設計
2.1.1 最小系統電路設計
2.1.2單片機AT89S51介紹
AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,AT89S51在眾多嵌入式控制應用系統中得到廣泛應用。
ATS8951的管腳圖及主要性能參數:
AT89S51提供以下標準功能:4K字節(jié)閃速存儲器,128字
9、節(jié)內部RAM,32個I/O口線,看門狗(WDT),兩個數據指針,兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時,AT89S51可降至0HZ的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數器,串行通信口及中斷系統繼續(xù)工作。掉電方式保存RAM中到內容,但振蕩器停止工作并禁止其它所有工作部件直到下一個硬件復位。
與MCS-51產品指令系統完全兼容,4K字節(jié)在系統編程(ISP)Flash 閃速存儲器,1000次擦寫周期,4.0-5.5V的工作電壓范圍,全靜態(tài)工作模式:0HZ-33MHZ,三級程序加密
10、鎖,128*8字節(jié)內部RAM、32個可編程I/O口線、2個16位定時/計數器、6個中斷源,全雙工串行UART通道,低功耗空閑和掉電模式,中斷可從空閑模式喚醒系統,看門狗(WDT)及雙數據指針,掉電標示和快速編程特性,靈活的在系統編程(ISP-字節(jié)或頁寫模式)。
2.2采樣設計
2.2.1采樣電路設計
2.2.2 ADC0809介紹
ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。
1.ADC0809引腳結構
ADC0809各腳功能如下:
D7-D0:8位數字量輸出
11、引腳。
IN0-IN7:8位模擬量輸入引腳。
VCC:+5V工作電壓。
GND:地。
REF(+):參考電壓正端。
REF(-):參考電壓負端。
START:A/D轉換啟動信號輸入端。
ALE:地址鎖存允許信號輸入端。
(以上兩種信號用于啟動A/D轉換).
EOC:轉換結束信號輸出引腳,開始轉換時為低電平,當轉換結束時為高電平。
OE:輸出允許控制端,用以打開三態(tài)數據輸出鎖存器。
CLK:時鐘信號輸入端(一般為500KHz)。
2. ADC0809應用說明
(1). ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。
(2). 初始化時,使S
12、T和OE信號全為低電平。
(3). 送要轉換的哪一通道的地址到A,B,C端口上。
(4). 在ST端給出一個至少有100ns寬的正脈沖信號。
(5). 是否轉換完畢,我們根據EOC信號來判斷。
(6). 當EOC變?yōu)楦唠娖綍r,這時給OE為高電平,轉換的數據就輸出給單片機了。
2.2.3 電路設計說明
A、 B、C接地默認IN0為輸入端
VREF+接5V參考電源
CLOCK信號為600KHZ
2.3顯示設計
2.3.1顯示電路設計
2.3.2、液晶屏LCD12864介紹
LCD12864 分為兩種,帶字庫和不帶字庫的此次使用的是不帶字庫的LCD12
13、864液晶
Proteus 中AMPIRE128*64,如下圖所示,該液晶驅動器為KS0108
引腳功能:
與帶字庫液晶不同,此塊液晶中含有兩個液晶驅動器,一塊驅動器控制64*64 個點,左
右顯示,這就是為什么AMPIRE128*64 引腳有CS1 和CS2 的原因。學習液晶主要看的它的
指令系統,再次先說明一下“頁”的概念,此液晶有8 頁,一頁有8 行。68/8=8;如下圖所
示。
3、 軟件設計
3.1程序流程圖
3.2 采樣程序設計與分析
uchar ad_data[96];
sbit
14、 START=P3^4;
sbit OE=P3^6;
sbit EOC=P3^5;
uchar adc()
{ uchar AD;
START=1;
START=0;
while(EOC==0)
{ OE=1; }
AD=P1;
OE=0;
return(AD); }
void ad_cai()
{uchar b;
for(b=0;b<=95;b++)
ad_data[b]=3*adc();
}
Uchar ad_data[96] 申請96個8位的空間變量用于存儲96個采樣數
15、據。
Ucahr adc()為根據ADC0809的時序編寫的采樣函數。
Void ad_cai() 為采樣96次的函數。
3.3顯示函數設計與分析
uchar page(uchar d_ata)
{uchar page;
if(d_ata<=51) page=0x05;
else if(d_ata<=102) page=0x04;
else if(d_ata<=153) page=0x03;
else if(d_ata<=204) page=0x02;
else if(d_ata<=255) page=0x01;
return(page);
}
16、
uchar D_data(uchar page,d_ata)
{uchar D_data;
switch (page)
{
case(1):D_data=d_ata-204;D_data=D_data/6;break;
case(2):D_data=d_ata-153;D_data=D_data/6;break;
case(3):D_data=d_ata-102;D_data=D_data/6;break;
case(4):D_data=d_ata-51;D_data=D_data/6;break;
case(5):D_data=d_ata/6;break;
defaul
17、t:break;
}
return(D_data);
}
uchar dian(uchar D_data)
{uchar d_data;
switch(D_data)
{case(0):d_data=0x00;break;
case(1):d_data=0x80;break;
case(2):d_data=0x40;break;
case(3):d_data=0x20;break;
case(4):d_data=0x10;break;
case(5):d_data=0x08;break;
case(6):d_data=0x04;break;
case(7):d
18、_data=0x02;break;
case(8):d_data=0x01;break;
default:break;
}
return(d_data);
}
void tudisplay(uchar *p)
{uchar i,num,D_num,d_data,c=1;
SelectScreen(1);
Set_column(16);
for(i=0;i<=95;i++)
{num=page(p[i]);
D_num=D_data(num,p[i]);
d_data=dian(D_num);
if(i>=48&&c)
{SelectScreen(2);
19、Set_column(0);
c=0;
}
Set_page(num);
write_LCD_data(d_data);
}
P1=num;
}
波形都是由像素點組成的,波形的基礎其實就是畫點。只要我們能點亮液晶的任意一個點,就能顯示任意波形,從上面的圖我們知道,它是分為兩個半屏的,首先,我們要確定這個點是在左半屏還是右半屏,然后確定它是在那一行(page),再確定它是在哪一個字節(jié)的哪一個位(也就是確定它在那一列。這些都確定后我們就定位到某一個具體的位上了,只就將這個位置1,就可以點亮這個點。
確定頁8位轉換,255個數,Page=255/5=51
uch
20、ar page(uchar d_ata)
{uchar page;
if(d_ata<=51) page=0x05;
else if(d_ata<=102) page=0x04;
else if(d_ata<=153) page=0x03;
else if(d_ata<=204) page=0x02;
else if(d_ata<=255) page=0x01;
return(page);
}
以此確定頁,然后根據頁和轉換的數據確定是點亮那一位
uchar D_data(uchar page,d_ata)
{uchar D_data;
switch (pag
21、e)
{
case(1):D_data=d_ata-204;D_data=D_data/6;break;
case(2):D_data=d_ata-153;D_data=D_data/6;break;
case(3):D_data=d_ata-102;D_data=D_data/6;break;
case(4):D_data=d_ata-51;D_data=D_data/6;break;
case(5):D_data=d_ata/6;break;
default:break;
}
return(D_data);
}
其中6.375=255/40,這里近似除6,然后根據第幾位給出顯示數據由uchar dian(uchar D_data)函數完成。由于LCD12864列自動加一,所以只需確定第幾頁并確定顯示那個點然后依次顯示就能完成顯示波形的需要。
4、 仿真
4.1 矩形波仿真結果如下圖:
由于算法的缺陷矩形波并不能像示波器一樣顯示完整的波形。
4.2 三角波仿真:
4.3 正弦波仿真
5、 設計總結:
6、 參考文獻
7、附錄: