基于IO的LCD顯示頻率計_第1頁
基于IO的LCD顯示頻率計_第2頁
基于IO的LCD顯示頻率計_第3頁
基于IO的LCD顯示頻率計_第4頁
基于IO的LCD顯示頻率計_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、通達學(xué)院2013 /2014 學(xué)年 第 一 學(xué)期課程設(shè)計II 實驗報告模 塊 名 稱 Proteus軟件設(shè)計(51單片機) 專 業(yè) 通信工程 學(xué) 生 班 級 100014 學(xué) 生 學(xué) 號 10001435 學(xué) 生 姓 名 朱昱光 指 導(dǎo) 教 師 林建中 設(shè)計題目基于IO口的LCD顯示頻率計設(shè)計任務(wù)要求基本要求:1.用P1或P3口,產(chǎn)生一方波信號,頻率為1000Hz,用一組數(shù)碼管或LCD顯示頻率和周期以及脈寬等參數(shù)(也可用信號源或模擬信號源)。2.將輸出信號輸入到另一端口(INT0/INT1)作頻率計的信號輸入端,測量此方波信號的頻率、周期和脈寬,在另一組數(shù)碼管或LCD上將參數(shù)值顯示出來。(刷新

2、時間1秒)。動態(tài)顯示格式: 自定實驗設(shè)備及軟件(1)PC機 一臺(2)Keil c51單片機仿真軟件(3)Proteus軟件同組人員學(xué)號及姓名10001426 張浩10001435 朱昱光參考文獻郭天祥十天學(xué)會單片機譚浩強C語言程序設(shè)計新概念51單片機 C語言教程杜洋愛上單片機第一部分 實驗?zāi)康暮鸵蟊菊n程設(shè)計是在理論課程的基礎(chǔ)上,重點培養(yǎng)學(xué)生的動手能力,通過理論計算、實際編程、調(diào)試、測試、分析查找故障,解決在實際設(shè)計中的問題,使設(shè)計好的電路能正常工作,為下一部結(jié)合實際的硬件系統(tǒng)設(shè)計準(zhǔn)備條件。基本要求:1.用P1或P3口,產(chǎn)生一方波信號,頻率為1000Hz,用一組數(shù)碼管或LCD顯示頻率和周期以

3、及脈寬等參數(shù)(也可用信號源或模擬信號源)。2.將輸出信號輸入到另一端口(INT0/INT1)作頻率計的信號輸入端,測量此方波信號的頻率、周期和脈寬,在另一組數(shù)碼管或LCD上將參數(shù)值顯示出來。(刷新時間1秒)。 動態(tài)顯示格式:自定根據(jù)提供的參考工程,在proteus平臺自己重新畫出實驗所需要的電氣原理圖,并在此基礎(chǔ)上編寫相對應(yīng)的程序,實現(xiàn)其功能,學(xué)習(xí)proteus軟件的使用,其中包括原理圖器件的選取、原理圖的電氣連接、程序的編寫編譯以及運行,并能查出其錯誤等。第二部分 實驗工具及實驗器件1.Proteus以及Keil軟件的介紹Proteus是英國Labcenter公司開發(fā)的電路及單片機系統(tǒng)設(shè)計與

4、仿真軟件。Proteus可以實現(xiàn)數(shù)字電路、模擬電路及微控制器系統(tǒng)與外設(shè)的混合電路系統(tǒng)的電路仿真、軟件仿真、系統(tǒng)協(xié)同仿真和PCB設(shè)計等功能。Proteus是目前唯一能對各種處理器進行實時仿真、調(diào)試與測試的EDA工具,真正實現(xiàn)了在沒有目標(biāo)原型時就可對系統(tǒng)進行調(diào)試、測試和驗證。Proteus軟件大大提高了企業(yè)的產(chǎn)品開發(fā)效率,降低了開發(fā)風(fēng)險。由于Proteus軟件逼真、真實的協(xié)同仿真功能,它也特別適合于作為配合單片機課堂教學(xué)和實驗的學(xué)習(xí)工具。Proteus軟件提供了30多個元器件庫、7000余種元器件。元器件涉及電阻、電容、二極管、三極管、變壓器、繼電器、各種放大器、各種激勵器、各種微控制器、各種門電

5、路和各種終端等。Proteus軟件還提供有交直流電壓表、邏輯分析儀、示波器、定時/計數(shù)器和信號發(fā)生器等測試信號工具用于電路測試。Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使

6、不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令你事半功倍。應(yīng)用Keil進行軟件仿真開發(fā)的主要步驟為:編寫源程序并保存建立工程并添加源文件設(shè)置工程編譯/匯編、連接,產(chǎn)生目標(biāo)文件程序調(diào)試。Keil使用“工程”(Project)的概念,對工程(而不能對單一的源程序)進行編譯/匯編、連接等操作。工程的建立、設(shè)置、編譯/匯編及連接產(chǎn)生目標(biāo)文件的方法非常易于掌握。首先選擇菜單File-New,在源程序編輯器中輸入?yún)R編語言或C語言源程序(或選擇File-Open,直接打開已用其它編輯器編輯好的源程序文檔)并保存,注意保存時必須在文件名后加上擴展名.asm(.a51)或.c

7、;然后選擇菜單Project-New Project,建立新工程并保存(保存時無需加擴展名,也可加上擴展名.uv2);工程保存后會立即彈出一個設(shè)備選擇對話框,選擇CPU后點確定返回主界面。這時工程管理窗口的文件頁(Files)會出現(xiàn)“Target1”,將其前面+號展開,接著選擇Source Group1,右擊鼠標(biāo)彈出快捷菜單,選擇“Add File to Group Source Group1”,出現(xiàn)一個對話框,要求尋找并加入源文件(在加入一個源文件后,該對話框不會消失,而是等待繼續(xù)加入其它文件)。加入文件后點close返回主界面,展開“Source Group1”前面+號,就會看到所加入的文

8、件,雙擊文件名,即可打開該源程序文件。緊接著對工程進行設(shè)置,選擇工程管理窗口的Target1,再選擇Project-Option for TargetTarget1(或點右鍵彈出快捷菜單再選擇該選項),打開工程屬性設(shè)置對話框,共有8個選項卡,主要設(shè)置工作包括在Target選項卡中設(shè)置晶振頻率、在Debug選項卡中設(shè)置實驗仿真板等,如要寫片,還必須在Output選項卡中選中“Creat Hex Fi”;其它選項卡內(nèi)容一般可取默認(rèn)值。工程設(shè)置后按F7鍵(或點擊編譯工具欄上相應(yīng)圖標(biāo))進行編譯/匯編、連接以及產(chǎn)生目標(biāo)文件。 成功編譯/匯編、連接后,選擇菜單Debug-Start/Stop D

9、ebug Session(或按Ctrl+F5鍵)進入程序調(diào)試狀態(tài),Keil提供對程序的模擬調(diào)試功能,內(nèi)建一個功能強大的仿真CPU以模擬執(zhí)行程序。Keil能以單步執(zhí)行(按F11或選擇Debug-Step)、過程單步執(zhí)行(按F10或選擇Debug-Step Over)、全速執(zhí)行等多種運行方式進行程序調(diào)試。如果發(fā)現(xiàn)程序有錯,可采用在線匯編功能對程序進行在線修改(Debug-Inline Assambly),不必執(zhí)行先退出調(diào)試環(huán)境、修改源程序、對工程重新進行編譯/匯編和連接、然后再次進入調(diào)試狀態(tài)的步驟。對于一些必須滿足一定條件(如按鍵被按下等)才能被執(zhí)行的、難以用單步執(zhí)行方式進行調(diào)試的程序行,可采用斷

10、點設(shè)置的方法處理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints等)。在模擬調(diào)試程序后,還須通過編程器將.hex目標(biāo)文件燒寫入單片機中才能觀察目標(biāo)樣機真實的運行狀況。在PROTEUS繪制好原理圖后,調(diào)入已編譯好的目標(biāo)代碼文件:*.HEX,可以在PROTEUS的原理圖中看到模擬的實物運行狀態(tài)和過程。2.51單片機AT89C51 51單片機是對目前所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8031單片機,后來隨著Flash rom技術(shù)的發(fā)展,8031單片機取得了長足的進展,成為目前應(yīng)用最廣泛的8位單片機之一

11、,其代表型號是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測控系統(tǒng)之中。目前很多公司都有51系列的兼容機型推出,在目前乃至今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎(chǔ)入門的一個單片機,還是應(yīng)用最廣泛的一種。需要注意的是52系列的單片機一般不具備自編程能力。當(dāng)前常用的51系列單片機主要產(chǎn)品有:*Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;*ATMEL的:89C51、89C52、89C2051等;89C51單片機的內(nèi)部結(jié)構(gòu)為:單一+5V電源供電;CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;RAM:用以存放可以讀寫的

12、數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);ROM:用以存放程序、一些原始數(shù)據(jù)和表格;I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出;T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;五個中斷源的中斷控制系統(tǒng);一對全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單片機與微機之間的串行通信;片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最高振蕩頻率為12M。3.三態(tài)輸出的8D透明鎖存器74HC37374HC373 的輸出端 Q0Q7可直接與總線相連。 當(dāng)三態(tài)允許控制端 OE 為低電平時,Q0Q7為正常邏輯狀態(tài),可用來驅(qū)動負(fù)載或

13、總線。當(dāng)OE為高電平時,Q0Q7呈高阻態(tài),即不驅(qū)動總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。 當(dāng)鎖存允許端 LE 為高電平時,Q隨數(shù)據(jù)D而變。當(dāng) LE為低電平時,Q被鎖存在已建立的數(shù)據(jù)電平。4LCD液晶顯示器件LM016LLM016L是一個2*16的點陣式字符液晶顯示模塊,每個字符由5*7個點組成的;內(nèi)部帶有HD44780控制器;采用5V電源供電; 內(nèi)建有192個字符,8個用戶自建字符。第三部分 實驗原理圖及程序代碼1. 硬件部分電路設(shè)計 由于本次實驗設(shè)計的是一個單片機的基于8255的LCD的頻率計實驗,通過使用定時器T0產(chǎn)生1s鐘的定時,同時測量T1口輸入的方波的低電

14、平的次數(shù),就可以得出所輸入信號的頻率,然后將測得的頻率由鎖存器連接到8255,再通過8255擴展連接到LCD液晶顯示器。完整電路原理圖如下:2.軟件部分設(shè)計/*/ 程序功能/ 定時器T1 定時1S 定時器T0計數(shù)/ 測定數(shù)據(jù)處理并傳送 LCD顯示/ 065K HZ 頻率精確度達到 0.1%/*/#include<reg52.h>#include<1602.h>idata char shuzi="" ;char disbuf11="F 0000000HZ" /測的數(shù)據(jù)字符串idata char mesg="ZAL make

15、"char dist9="T00000us0" /周期字符串unsigned char T0count=0; unsigned int timecount,x; unsigned long timeus =0; void datadeal();void datadeal2();void delayd(unsigned char k)unsigned char i,j;for(i=0;i<k;i+)for(j=0;j<100;j+);void main(void) int1602(); TMOD=0x15; TH0=0; TL0=0; TH1=(6553

16、6-500)/256; TL1=(65536-500)%256; ET1=1; EA=1; TR0=1; TR1=1; while(1) if(timecount=1000) TR0=0; timecount=0; datadeal(); timeus=1000000/x; datadeal2(); Display(1,2,disbuf); /顯示 測的數(shù)據(jù) delayd(10); Display(2,0,dist); /顯示 測的數(shù)據(jù) delayd(10); Display(2,8,mesg); /顯示 個性化信息 delayd(10); timecount=0; TH0=0; TL0=0;

17、 TR0=1; /*函數(shù)名稱:datadeal()功 能:取出計的數(shù) 頻率 并存入字符串參 數(shù):無返回值 :無*/ void datadeal() x=TH0*256+TL0; /測的 每秒脈沖數(shù) x-=x/1000*5; /修正 disbuf2=shuzix/1000000; disbuf3=shuzix/100000%10; disbuf4=shuzix/10000%10; disbuf5=shuzix/1000%10; disbuf6=shuzix/100%10; disbuf7=shuzix/10%10; disbuf8=shuzix%10; /*函數(shù)名稱:datadeal2()功 能

18、:通過計算 得周期 最大65000us并存入字符串參 數(shù):無返回值 :無*/ void datadeal2() dist1=shuzitimeus/10000; dist2=shuzitimeus/1000%10; dist3=shuzitimeus/100%10; dist4=shuzitimeus/10%10; dist5=shuzi5; void t1(void) interrupt 3 using 0 TH1=(65536-2000)/256; TL1=(65536-2000)%256; P2=0x80; timecount+;#include <INTRINS.H> /庫

19、函數(shù)頭文件,代碼中引用了_nop_()函數(shù) #include <reg52.h>#include<1602.h> sbit RS=P20; sbit RW=P21;sbit E=P22; #define uchar unsigned char#define uint unsigned int/*函數(shù)名稱:Delay功 能:延時0.5ms左右參 數(shù):t-t個0.5ms返回值 :無*/void delay(unsigned char t) unsigned char j,i; for(i=0;i<t;i+) for(j=0;j<50;j+); /*函數(shù)名稱:de

20、lay1功 能:液晶用精確延時參 數(shù):無返回值 :無*/void delay1() _nop_(); _nop_(); _nop_();/*函數(shù)名稱:lcd_w_dat功 能:寫入一個字節(jié)要顯示的數(shù)據(jù)參 數(shù):dat-要顯示的數(shù)據(jù)返回值 :無*/void lcd_w_dat(unsigned char dat) unsigned char i; do / 查忙操作 i=lcd_r_start();/ 調(diào)用讀狀態(tài)字函數(shù) i=i&0x80; / 與操作屏蔽掉低7位 delay(2); while(i!=0); / LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=1;/

21、 RW=0,RS=1,寫數(shù)據(jù) delay1(); E=1;/ E端時序 delay1(); P0=dat;/ 將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1; delay(255);/*函數(shù)名稱:lcd_w_cmd功 能:寫入一個字節(jié)命令參 數(shù):com-要設(shè)置的命令返回值 :無*/void lcd_w_cmd(unsigned char com) unsigned char i; do / 查LCD忙操作 i=lcd_r_start(); / 調(diào)用讀狀態(tài)字函數(shù) i=i&0x80; / 與操作屏蔽掉低7位 delay(2); while(

22、i!=0); / LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=0; / RW=0,RS=0,寫LCD命令字 delay1(); E=1; /E端時序 delay1(); P0=com; /將com中的命令字寫入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1; delay(255);/*函數(shù)名稱:lcd_r_start()功 能:讀取LCD狀態(tài)參 數(shù):s-LCD狀態(tài)字返回值 :無*/unsigned char lcd_r_start() unsigned char s; RW=1;/RW=1,RS=0,讀LCD狀態(tài) delay1(); RS=

23、0; delay1(); E=1; /E端時序 delay1(); s=P0;/從LCD的數(shù)據(jù)口讀狀態(tài) delay1(); E=0; delay1(); RW=0; delay1(); return(s);/返回讀取的LCD狀態(tài)字/*函數(shù)名稱:int1602功 能:LCD初始化參 數(shù):無返回值 :無*/void int1602() lcd_w_cmd(0x3c);/ 設(shè)置工作方式 lcd_w_cmd(0x0c);/ 設(shè)置光標(biāo) lcd_w_cmd(0x01);/ 清屏 lcd_w_cmd(0x06);/ 設(shè)置輸入方式 lcd_w_cmd(0x80);/ 設(shè)置初始顯示位置/*函數(shù)名稱:Display功 能:讓液晶從某個位置起連續(xù)顯示一個字符串參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) ptr-指向字符串存放位置的指針返回值 :無*/void Display(uchar x ,uchar y,uchar *ptr) uchar *temp; uchar i,n = 0; temp = ptr; while(*ptr+ != '0') n+; /計算字符串有效字符的個數(shù) setseat (x,y) ; for (i=0;i<n;i

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論