微機原理課程設計論文_第1頁
微機原理課程設計論文_第2頁
微機原理課程設計論文_第3頁
微機原理課程設計論文_第4頁
微機原理課程設計論文_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機原理及匯編語言課程設計報告目 錄第一章 微機應用系統(tǒng)課程設計的目的及意義31.1 課程設計的要求及目的31.2 課程設計的內(nèi)容31.3 課程在教學計劃中的地位和作用3第二章 總體設計方案52.1 設計思想5第三章 硬件設計63.1 硬件設計概要63.2 芯片及其功能說明6 單片機及其功能說明63.2.2 MAX7219及其功能說明93.3 硬件電路設計系統(tǒng)原理圖及其說明11第四章 軟件設計134.1 流程圖134.2 軟件系統(tǒng)的使用說明144.2.1 MAX7219驅(qū)動15 時鐘進位運行規(guī)則16 時間調(diào)整部分16 鍵盤去抖174.3源程序及注釋17第五章 心得與體會33參考文獻35第一章

2、微機應用系統(tǒng)課程設計的目的及意義1.1 課程設計的要求及目的以單片機為控制核心的智能電子鐘以時間準、功能強、外形美而越來越受到人們的青睞。本實驗通過設計一個智能電子鐘,旨在使學生能夠做到以下幾點。l了解智能電子鐘的功能特點與工作原理。 2掌握以單片機為核心實現(xiàn)電子鐘功能的思路和方法。3進一步掌握多位數(shù)碼管顯示的原理和接口方法。1.2 課程設計的內(nèi)容(1)編程語言為C語言;(2)基于單片機的硬件電路設計與調(diào)試;(3)從鍵盤上輸入當前時間,格式為“XX(小時):XX(分):XX(秒),以此為起點,每秒刷新一次,1秒鐘延遲方式采用軟件方式并用子程序編寫或者定時器實現(xiàn),主程序用于顯示時間結(jié)果和調(diào)用子程

3、序,由于軟件延遲產(chǎn)生的誤差每小時調(diào)整一次,保證每小時誤差不超過0.1秒。1.3 課程在教學計劃中的地位和作用微機應用系統(tǒng)設計與綜合實驗課程是測控技術(shù)專業(yè)本科生必修的一門技術(shù)基礎課程。通過該課程的學習使學生對微機系統(tǒng)有一個全面的了解、掌握常規(guī)芯片的使用方法、掌握簡單微型計算機應用系統(tǒng)軟硬的設計方法。為了使我們微機應用課程設計目標更明確,要求更具體,學生收獲更大,我們特編寫課程設計任務書,學生可根據(jù)本人的愛好任選其中一個課題,要求獨立完成課題,寫出課程設計說明書,設計出電路原理圖,說明工作原理,畫出電路板圖,編寫程序及程序流程圖。希望同學認真閱讀本任務書,認真查閱資料與上機調(diào)試,圓滿完成課程設計。

4、通過課程設計進一步鍛煉同學們在微型計算機應用方面的實際工作能力。計算機科學在應用上得到飛速發(fā)展,因此,學習這方面的知識必須緊密聯(lián)系實際:掌握這方面的知識更要強調(diào)解決實際問題的能力。同學們要著重學會面對一個實際問題,如何去自己收集資料,如何自己去學習新的知識,如何自己去制定解決問題的方案并通過實踐不斷地去分析和解決前進道路上的一切問題,最終到達勝利的彼岸。第二章 總體設計方案2.1 設計思想要完成本實驗任務要求的功能,可以將系統(tǒng)分為以下幾個部分來設計:定時器/計數(shù)器電路、時間及功能設置電路、時間顯示電路等。其中,定時器/計數(shù)器電路是整個電子鐘設計的基礎。一般都是用定時/計數(shù)器來產(chǎn)生定時中斷信號(

5、例如定時時間間隔為1/100s),然后通過軟件計數(shù)器來相繼獲得實時時鐘的秒、分、時等時間值。實現(xiàn)智能化電子鐘的軟件主要由主程序和中斷服務程序兩模塊組成。 在主程序中,除了完成對系統(tǒng)的初始化和中斷向量的設置外,需要對各種軟件時間計數(shù)器進行查詢、比較和判斷,并根據(jù)判斷結(jié)果發(fā)出各種控制信號,以完成時鐘的顯示操作。 在定時中斷服務程序中,需要設計1/100s計數(shù)器,秒個位、秒十位計數(shù)器,分個位、分十位計數(shù)器,時個位、時十位計數(shù)器以及由鍵盤設置的各定時時間計數(shù)器和各作息時間計數(shù)器等等,并對各計數(shù)器酌情作加1計數(shù)。然后,由主程序來完成對各種計數(shù)器內(nèi)容的查詢。 注意事項:向定時器通道寫計數(shù)初值時,無論以二進

6、制還是十進制形式寫入,如果其值超過255,需分兩次分別寫入計數(shù)器的高、低字節(jié),否則只需寫一次。究竟寫一次還是兩次,要在寫初值之前通過寫控制字來設置。第三章 硬件設計3.1 硬件設計概要 這次做的是單片機時鐘程序設計,顧名思義,首先應該用到的是單片機。我們用單片機來驅(qū)動程序,完成程序的運行。由于我們以前沒有學過單片機這方面的知識,我們運用起來比較陌生,只能是一邊學一邊用,所以做的設計比較簡單,只有最基本的時鐘功能和校準功能。當然既然是時鐘,就少不了數(shù)碼管,這還要用到一片7219芯片來驅(qū)動數(shù)碼管,使它顯示相應的時間。 這次我們的課程設計,主要目的在于熟悉單片機的原理和應用。由于時鐘設計,所以相對的

7、硬件設計較少且連線比較簡單,這里不再詳細介紹。3.2 所用到的芯片及其各自功能說明單片機及其功能說明這次課程設計的主要目的就是熟悉單片機,下面我們先就單片機的一些功能加以介紹。首先我們來連接一下單片機的引腳圖,如果,具體功能在下面都有介紹。 單片機的40個引腳大致可分為4類:電源、時鐘、控制和I/O引腳。 電源:  VCC - 芯片電源,接+5V;          VSS - 接地端; 時鐘:XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 控制線:控制線共有4根,  A

8、LE/PROG:地址鎖存允許/片內(nèi)EPROM編程脈沖    ALE功能:用來鎖存P0口送出的低8位地址    PROG功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。   PSEN:外ROM讀選通信號。  RST/VPD:復位/備用電源。    RST(Reset)功能:復位信號輸入端。    VPD功能:在Vcc掉電情況下,接備用電源。  EA/Vpp:內(nèi)外ROM選擇/片內(nèi)EPROM編程電源。 

9、60;  EA功能:內(nèi)外ROM選擇端。    Vpp功能:片內(nèi)有EPROM的芯片,在EPROM編程期間,施加編程電源Vpp。 I/O線 80C51共有4個8位并行I/O端口:P0、P1、P2、P3口,共32個引腳。P3口還具有第二功能,用于特殊信號輸入輸出和控制信號(屬控制總線)。  51單片機引腳圖及引腳功能  拿到一塊芯片,想要使用它,首先必須要知道怎樣連線,我們用的一塊稱之為89C51的芯片,下面我們就看一下如何給它連線。1、 電源:這當然是必不可少的了。單片機使用的是5V電源,其中正極接40管腳,負極(地)

10、接20管腳。 2、 振蒎電路:單片機是一種時序電路,必須供給脈沖信號才能正常工作,在單片機內(nèi)部已集成了振蕩器,使用晶體振蕩器,接18、19腳。只要買來晶體震蕩器,電容,連上就能了,按圖1接上即可。 3、 復位管腳:按圖1中畫法連好,至于復位是何含義及為何需要復要復位,在單片機功能中介紹。 4、 EA管腳:EA管腳接到正電源端。 至此,一個單片機就接好,通上電,單片機就開始工作了。  我們的第一個任務是要用單片機點亮一只發(fā)光二極管LED,顯然,這個LED必須要和單片機的某個管腳相連,不然單片機就沒法控制它了,那么和哪個管腳相連呢?單片機上除了剛才用掉的5個管腳,還有35個,我們將這個L

11、ED和1腳相連。(見圖1,其中R1是限流電阻)  按照這個圖的接法,當1腳是高電平時,LED不亮,只有1腳是低電平時,LED才發(fā)亮。因此要1腳我們要能夠控制,也就是說,我們要能夠讓1管腳按要求變?yōu)楦呋虻碗娖健<慈晃覀円刂?腳,就得給它起個名字,總不能就叫它一腳吧?叫它什么名字呢?設計51芯片的INTEL公司已經(jīng)起好了,就叫它P1.0,這是規(guī)定,不能由我們來更改。 MAX7219及其功能說明設計題目做的是數(shù)字時鐘,首先應該有數(shù)碼管來顯示相應的時間,這要用到一片7219芯片來驅(qū)動所用到的數(shù)碼管。下面我們就7219的功能做一些簡單的介紹。MAX7219是MAXIM公司生產(chǎn)的串行輸入/輸出

12、共陰極數(shù)碼管顯示驅(qū)動芯片,一片MAX7219可驅(qū)動8個7段(包括小數(shù)點共8段)數(shù)字LED、LED條線圖形顯示器、或64個分立的LED發(fā)光二級管。該芯片具有10MHz傳輸率的三線串行接口可與任何微處理器相連,只需一個外接電阻即可設置所有LED的段電流。它的操作很簡單,MCU只需通過模擬SPI三線接口就可以將相關(guān)的指令寫入MAX7219的內(nèi)部指令和數(shù)據(jù)寄存器,同時它還允許用戶選擇多種譯碼方式和譯碼位。此外它還支持多片7219串聯(lián)方式,這樣MCU就可以通過3根線(即串行數(shù)據(jù)線、串行時鐘線和芯片選通線)控制更多的數(shù)碼管顯示。MAX7219的外部引腳分配如圖1所示及內(nèi)部結(jié)構(gòu)如圖2所示。MAX7219的外

13、部引腳分配各引腳的功能為:DIN:串行數(shù)據(jù)輸入端DOUT:串行數(shù)據(jù)輸出端,用于級連擴展LOAD:裝載數(shù)據(jù)輸入CLK:串行時鐘輸入DIG0DIG7:8位LED位選線,從共陰極LED中吸入電流SEG ASEG G DP7段驅(qū)動和小數(shù)點驅(qū)動ISET:通過一個10k電阻和Vcc相連,設置段電流MAX7219有下列幾組寄存器:(如圖3)MAX7219內(nèi)部的寄存器如下圖,主要有:譯碼控制寄存器、亮度控制寄存器、掃描界限寄存器、關(guān)斷模式寄存器、測試控制寄存器。編程時只有正確操作這些寄存器,MAX7219才可工作。MAX7219內(nèi)部的相關(guān)寄存器3.3硬件電路設計系統(tǒng)原理圖及其說明由于第一次使用單片機,所做的課

14、程設計相對比較簡單,只用到以上兩片芯片,其具體硬件電路設計系統(tǒng)原理圖如下圖所示:電腦編程DBAB控制按鍵單片機系統(tǒng)顯示電路數(shù)碼管基于硬件的設計相對比較簡單,因為我們做的都是最簡單的功能,沒有什么多余的附加功能,所以不管是從編程還是軟件設計方面都相對比較簡單。只需要在電腦用C語言完成相應的功能,把程序下載到單片機,用單片機來實現(xiàn)相應的功能。用單片機的程序來驅(qū)動7219,使數(shù)碼管顯示相應的時間。硬件連線的時候要注意單片機應與試驗箱共地,否則數(shù)碼管不會顯示時間。第四章 軟件設計4.1 流程圖及其說明軟件編程我們可以分為幾個模塊來編程,這樣可以是整個程序顯得更清晰、容易理解。我們程序出現(xiàn)錯誤的時候也方

15、便我們調(diào)試。具體整個程序的流程圖如下所示:主程序各種芯片初始化有鍵按下循環(huán)調(diào)整時間關(guān)中段?向下調(diào)整向上調(diào)整顯示調(diào)整后的時間顯示、初始化時間是否4.2軟件系統(tǒng)的使用說明我們可以把整個軟件系統(tǒng)分成幾個部分:7219驅(qū)動;時鐘進位部分;調(diào)整時間部分;延時函數(shù)及去抖部分。下面我們對各個部分分別加以說明。 MAX7219驅(qū)動對于時鐘電路的設計我們首先做的是數(shù)碼管驅(qū)動芯片7219。通過7219的驅(qū)動,是數(shù)碼管能顯示通過軟件設置的時間。電路原理圖如下圖,MAX7219與單片機的連接只需要3條線:LOAD(CS)片選引腳、CLK串行時鐘引腳、DIN串行數(shù)據(jù)引腳。其中C1 為電源濾波電容,R1用來設置段電流。電

16、路原理圖通過上面的原理和相應的程序使數(shù)碼管完成顯示功能,具體程序?qū)⒃谙旅娴恼鹿?jié)分析。時鐘運行進位規(guī)則這一部分是我們設計的主要部分,主要完成時鐘的進位和正常的時間顯示問題。我們定義了一個長度為六的數(shù)組,分別用來表示時鐘的時、分、秒的個位和十位。這當中主要考慮的就是時間的進位問題以及十、分、秒十位和各位的進制問題。其中時、分、秒的個位都是十進制。而十位是六進制。當分、秒的十位為六而個位為零的時候要同時清零,已達到時、分整體六十進制。這對于軟件編程來說還是比較簡單的,只需要用if語句就可以完成。這主要需要注意的就是時分秒的同時清零問題,讓它完成時鐘的具體功能。具體的程序后面源程序清單中會有介紹。時間

17、調(diào)整部分這部分主要做的是時間的初始化問題以及時間的調(diào)整問題。由于用的是51單片機,沒有辦法連接電腦的鍵盤,所以時間鍵盤的初始化只能用按鈕來代替。由于他和時間的調(diào)整問題屬于一個功能,所以放在了一起進行編程,這樣可以簡化程序,變得更加容易理解同時便于調(diào)試。在這一個功能我們設置了四個功能鍵。一個用來管理中斷,用來關(guān)和開中斷,方便我們對時間進行調(diào)整。一個用來循環(huán)調(diào)整的哪一位,當處于調(diào)整的位是,數(shù)碼管所對應的時間位的下面會出現(xiàn)一個亮點進行提示。另外兩個就是負責對時間進行調(diào)整,一個是加位調(diào)整,一個是減位調(diào)整。具體的實現(xiàn)問題用了兩個switch語句,來確認有鍵按下了時候就進行加一和減一的調(diào)整。具體的程序后面

18、源程序清單中會有介紹。鍵盤去抖這個部分相對比較簡單,延時函數(shù)主要是確定時間的精度問題。而調(diào)整時間是按鍵的去抖問題主要就是利用延時函數(shù)。這里不在詳細介紹,后面的源程序中會有詳細的講解。4.3源程序及注釋#include <reg52.h>#define DECODE_MODE 0x09 /譯碼控制寄存器#define INTENSITY 0x0A /亮度控制寄存器#define SCAN_LIMIT 0x0B /掃描界限寄存器#define SHUT_DOWN 0x0C /關(guān)斷模式寄存器#define DISPLAY_TEST 0x0F /測試控制寄存器#define uchar u

19、nsigned char#define uint unsigned intsbit LOAD=P10; /MAX7219片選 12腳sbit DIN=P11; /MAX7219串行數(shù)據(jù)1腳sbit CLK=P12; /MAX7219串行時鐘13腳sbit key1=P30; sbit key2=P31;sbit key3=P32;sbit key4=P33; /*sbit KEY1=P13; /暫?;蜻\行sbit KEY2=P14;/位選擇sbit KEY3=P15;/增加sbit KEY4=P16;/減少*/uchar sj7=0;uint time=0,flash=0;uchar k=0,

20、i=0;/*函數(shù)聲明*/void Write7219(unsigned char address,unsigned char dat);void Initial(void);void Init(void);/*地址、數(shù)據(jù)發(fā)送子程序*/void Write7219(unsigned char address,unsigned char dat)uchar i;LOAD=0; /拉低片選線,選中器件 for (i=0;i<8;i+) /發(fā)送地址 CLK=0; /清零時鐘總線 DIN=(bit)(address&0x80); /每次取高字節(jié) address<<=1; /左移

21、一位 CLK=1; /時鐘上升沿,發(fā)送地址 for (i=0;i<8;i+) /發(fā)送數(shù)據(jù) CLK=0; DIN=(bit)(dat&0x80); dat<<=1; CLK=1; /時鐘上升沿,發(fā)送數(shù)據(jù) LOAD=1; /發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù) /*MAX7219初始化,設置MAX7219內(nèi)部的控制寄存器*/void Initial(void) uint i=0;Write7219(SHUT_DOWN,0x01); /開啟正常工作模式(0xX1)Write7219(DISPLAY_TEST,0x00); /選擇工作模式(0xX0)Write7219(DECODE_MO

22、DE,0xff); /選用全譯碼模式Write7219(SCAN_LIMIT,0x05); /8只LED全用Write7219(INTENSITY,0x08); /設置初始亮度for(i=1;i<7;i+)Write7219(i,sji);/數(shù)碼管顯示 /*單片機初始化*/void Init(void)TMOD=0x01;TH0=0x4B;TL0=0xFF; EA=1;ET0=1;TR0=1;/* 延時函數(shù) (精度2uS) */*void delay(uchar us) while(-us); */ void delayms(uchar aa) uchar i,j; for(i=aa;i

23、>0;i-) for(j=110;j>0;j-); /* tiaoshi */void keyscan() uchar i; if(key4=0) delayms(100); if(key4=0) /* while(!key4); TR0=0; /關(guān)定時器0 Write7219(1,0); Write7219(2,0); Write7219(3,0); Write7219(4,0); Write7219(5,0); Write7219(6,0); */ for(i=1;i<7;i+)Write7219(i,sji);/數(shù)碼管顯示 i=0; TR0=1; if(key1=0)

24、delayms(100); if(key1=0) while(!key1); TR0=0; /關(guān)定時器0 i+; if(i=7) i=1; /* TH0=0x4B; /初始化定時器0 TL0=0xFF; time=0; TR0=1;*/ if(i!=0) for(flash=0;flash<3;flash+) Write7219(i,-1); delayms(20000);Write7219(i,sji);delayms(20000); if(key2=0) /增加鍵 delayms(100); if(key2=0) while(!key2);/ 確認釋放 switch(i)case 1

25、:/秒個位加一 sj1+; if(sj1=10) sj1=0; break; case 2:/秒十位加一 sj2+; if(sj2=6) sj2=0; break;case 3:/分個位加一 sj3+; if(sj3=10) sj3=0; break;case 4:/分十位加一 sj4+; if(sj4=6) sj4=0; break;case 5:/十個位加一 sj5+; if(sj5=10) sj5=0; break;case 6:/時十位加一 sj6+; if(sj6=3) sj6=0; break; if(key3=0) delayms(100); if(key3=0) while(!

26、key3); switch(i)case 1:/秒個位減一 sj1-; if(sj1=-1) sj1=9; break; case 2:/秒十位減一 sj2-; if(sj2=-1) sj2=5; break;case 3:/分個位減一 sj3-; if(sj3=-1) sj3=9; break;case 4:/分十位減一 sj4-; if(sj4=-1) sj4=5; break;case 5:/時個位減一 sj5-; if(sj5=-1) sj5=9; break;case 6:/是十位減一 sj6-; if(sj6=-1) sj6=2; break; void main(void) uc

27、har i,k=0; Initial();Init(); /MAX7219初始化 while(1) keyscan();/時間顯示和進位 if(sj1=10) sj1=0; sj2+; if(sj2=6) sj2=0; sj3+; if(sj3=10) sj3=0; sj4+; if(sj4=6) sj4=0; sj5+; if(sj5=10) sj5=0; sj6+; if(sj6=2&&sj5=4) sj6=0; sj5=0; for(i=1;i<7;i+)Write7219(i,sji);/數(shù)碼管顯示 void time0() interrupt 1 TH0=0x4

28、B; TL0=0xFF; time+; if(time=20) time=0; sj1+; 第五章 心得與體會做了兩周的單片機課程設想,我有了很多的領(lǐng)會和感想。由于我們這學期學習的是微機原理,沒有學習單片機。所以這次這次課程設計對我們來說還是有一定的難度的。特別是在我們調(diào)試時,中間出現(xiàn)了一個問題我們怎么找都找不到。由于我們在宿舍編好程序,到實驗室只需要粘貼上去就行了,當我們編譯運行的時候總是出現(xiàn)有不可編譯的字符的錯誤提示。我們不管怎么找都沒有辦法解決這個問題。這個困擾了我們很長時間,最后實在想不出解決的辦法就請教直到我們試驗的學長。原來使我們復制粘貼的時候把一個注釋的漢字一起粘貼到里面,而在程序里他卻被隱藏了。就這樣一個的小小的錯誤卻花費了我們那么久的時間,這也說明了編程的需要的細心和耐心。不能絲毫的粗心大意和懈怠。還有一個就是我們再往單片機里下程序的問題總是出現(xiàn)無法加載的信息,不管怎么樣,程序總是下不到單片機里面去,對于這一點我們沒有很好的辦法解決,有時候只能通過更換單片機來解決這個問題。也許這對于我們以后對單片機的學習有了一個提示,要通過以后的學習

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論