第一篇:單片機課程設計頻率計數器
單片機課程設計
--頻率計數器
專業:自動化 指導老師:朱兆優 班級:1430201
學號:201430020118 姓名:張超梅
一、緒論
1.1設計任務和要求
二、電路設計方案
2.1電路工作原理 2.2系統性能
三、軟件設計方案
3.1功能模塊 3.2.編程算法思路 3.3程序流程圖
四、系統調試
4.1 硬件調試 4.2 軟件調試
五、心得體會
目錄
一、緒論
頻率計又稱為頻率計數器,是一種專門對被測信號頻率進行測量的電子測量儀器。其最基本的工作原理為:當被測信號在特定時間段T內的周期個數為N時,則被測信號的頻率f=N/T。頻率計主要由四個部分構成:時基(T)電路、輸入電路、計數顯示電路以及控制電路。在一個測量周期過程中,被測周期信號在輸入電路中經過放大、整形、微分操作之后形成特定周期的窄脈沖,送到主門的一個輸入端。主門的另外一個輸入端為時基電路產生電路產生的閘門脈沖。在閘門脈沖開啟主門的期間,特定周期的窄脈沖才能通過主門,從而進入計數器進行計數,計數器的顯示電路則用來顯示被測信號的頻率值,內部控制電路則用來完成各種測量功能之間的切換并實現測量設置。
1.1設計任務和要求
本次課程設計的內容是使用AT89C51單片機最小系統設計頻率計系統,系統以單片機為主控單元,主要用于對方波頻率的測量,使用 NE555 輸出脈沖,用單片機計數器實現技術,再把計數值轉換為頻率,用靜態或動態顯示頻率值,頻率計數器要實現0~1MHz信號頻率測量范圍,要分段頻率段測量,低頻段用測周法,高頻段用測頻法。
二、電路設計方案
2.1電路工作原理
由NE555振蕩電路產生脈沖,然后經過二分頻電路,然后與定時器/計數器T1相連,P2.0接74Ls273鎖存器的時鐘信號端,P2.1口接74Ls273鎖存器的時鐘信號端,P0口接74LS273段選碼和位選碼,輸出與七位共陽數碼管顯示,采用動態顯示。由于P0口輸出數據,T2截至,輸出級屬于開漏電路,要使高電平1信號正確輸出,應該外接上拉電阻560k.分頻電路
本次設計采用的是脈沖定時測頻法,由于考慮到單片機的定時計數器得計數 能力有限,無法對過高頻進行測量,所以我們對待測信號進行了分頻,這樣能提高測量頻率的范圍,還能相應的提高頻率測量的精度。所以我們需要把待測信號進行分頻。
顯示電路
我們測量的頻率最終要顯示出來八段LED 數碼管顯示器由8 個發光二極管組成。基中7 個長條形的發光管排列成“日”字形,另一個圓點形的發光管在數碼管顯示器的右下角作為顯示小數點用,它能顯示各種數字及部份英文字母。LED 數碼管顯示器有兩種形式:一種是8 個發光二極管的陽極都連在一起的,稱之為共陽極LED 數碼管顯示器;另一種是8 個發光二極管的陰極都連在一起的,稱之為共陰極LED 數碼管顯示器。如下圖所示。共陰和共陽結構的LED 數碼管顯示器各筆劃段名和安排位置是相同的。當二極管導通時,對應的筆劃段發亮,由發亮的筆劃段組合而顯示的各種字符。8個筆劃段 h g f e d c b a 對應于一個字節(8 位)的D7、D6、D5、。D4、D3、D2、D1、D0,于是用8 位二進制碼就能表示欲顯
示
字
符的字
形
代
碼。
在單片機應用系統中,數碼管顯示器顯示常用兩種辦法:靜態顯示和動態掃 描顯示。所謂靜態顯示,就是每一個數碼管顯示器都要占用單獨的具有鎖存功能 的I/O 接口用于筆劃段字形代碼。這樣單片機只要把要顯示的字形代碼發送到接口電路,就不用管它了,直到要顯示新的數據時,再發送新的字形碼,因此,使用這種辦法單片機中CPU 的開銷小,能供給單獨鎖存的I/O 接口電路很多。在單片機系統中動態掃描顯示接口是單片機中應用最為廣泛的一種顯示方式之一。其接口電路是把所有顯示器的8 個筆劃段a-h 同名端連在一起,而每一個顯示器的公共極COM 是各自獨立地受I/O 線控制。CPU 向字段輸出口送出字形碼時,所有顯示器接收到相同的字形碼,但究竟是那個顯示器亮,則取決于COM 端,而這一端是由I/O 控制的,所以我們就能自行決定何時顯示哪一位了。而所謂動態掃描就是指我們采用分時的辦法,輪流控制各個顯示器的COM 端,使各個顯示器輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮時間是極為短暫的(約1ms),但由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。
總電路圖
三、軟件設計方案
3.1功能模塊
測周法
? 定時器/計數器初始化,測出周期t ? 4字節除4字節 ? 二進制轉換為BCD碼 ? 提取BCD碼 ? 查表顯示
測頻法
? 定時器/計數器初始化,設置中斷
? 二進制轉換為BCD碼 ? 提取BCD碼 ? 查表顯示 3.2.編程算法思路
子程序主要包括:按鍵中斷子程序、定時中斷子程序、計數中斷子程序、周期中斷子程序、超量程判斷子程序、除法子程序、二進制轉BCD子程序、顯示程子序。除法子程序
該子程序用于周期轉換頻率,因為周期為兩到三字節,所以使用移位除法。
3.3程序流程圖
四、系統調試
4.1硬件調試
硬件調試,由大到小,從整體到局部,進行調試。本設計電路簡單,所以不一一調試,就最復雜的顯示電路進行調試。
先由仿真器連接顯示電路,循環發送四位(1-9)顯示編碼,如果四位都不能顯示,檢查信號傳輸電路,時鐘電路,電源。
如果四位都能顯示,但有的位顯示不正確,檢查LED與移位寄存器的連線順序是否正確。如果還顯示不正確,與正常的位調換LED數碼管。調換后,正常的位顯示不正常,則數碼管壞了,換數碼管。調換后,不正常的位顯示不正常,則移位寄存器壞了,換移位寄存器。4.2軟件調試 4.2.1軟件調試的步驟
(1)源文件的建立:使用菜單 “File-New”或者點擊工具欄的新建文件按鈕,即可在項目窗口的右側打開一個新的文本編輯窗口,在該窗口中輸入匯編語言源程序(4.2小節所示)。保存該文件,加上擴展名(.asm),這里將文件保存為頻率計數器程序.asm。
(2)建立工程文件:點擊“Project-New Project”菜單,出現一個對話框,要求給工程起一個名字,輸入頻率計數器程序,不需要擴展名,點擊保存按鈕,出現第二個對話框。這個對話框要求選擇目標CPU(即我們所使用的芯片型號80C51)點擊ATMEL前面的“+”號,展開該層,點擊其中的80C51,然后點擊確定按鈕。回到主界面,此時,在工程窗口的文件頁中,出現了“Targ et1”,前面有 “+”號,點擊“+”展開,可以看到下一層的“Source Group1”,這時的工程還是一個空工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊“Souce Group”使其反白顯示,然后,點擊鼠標右鍵,出現一個下拉菜單。選中其中的“Add file to Group”Souce Group1”,對話框,要求尋找源文件,注意該對話框下面的“文件類型“默認為C Souce file(*.c),也就是以C為擴展名的文件,而我們的文件是以asm 為擴展名的,所以在列表框中找不到頻率計數器程序.asm,要將文件類型該掉,點擊對話框中”文件類型‘后的下拉列表,找到并選中“Asm Souce File(*.asm,*.a51)”,這樣,在列表框中就可以找到頻率計數器程序.asm文文件了。雙頻率計數器程序.asm文件,將文件加入項目,注意,在文件加入項目后,該對話框并不消失,等待繼續加入其他文件,但初學時常會認為操作沒有成功而再次雙擊同一文件,這時會出現對話框,提示你所選的文件以在列表中,此時點擊確定,返回前一對話框,然后,點擊”Close”即可返回主界面,返回后,點擊“Souce Goup 1”前的加號,會發現頻率計數器程序.asm 文件以在其中。雙擊文件名,即打開源程序。
(3)工程的詳細設置:首先點擊左邊Project窗口的Target 1,然后使用菜單“Proget-Option for target ‘target 1’”即出現對工程設置的對話框,對這個對話框可謂非常復雜,共有8個頁面,要全部高清可不容易,好在絕大部分設置項取默認值就行了。設置完成以后安確認返回主界面,工程建立、設置完畢。(4)編譯、連接:在設置好工程后,既可以進行編譯、連接。選擇菜單Project-Build target,對當前工程進行連接,如果當前文件已修改軟件會先對該文件進行比,然后在連接以產生目標代碼。編譯過程中的信息將出現在輸出窗口中的Build頁中,如果源程序有語法錯誤,會有錯誤報告出現,雙擊該行,可以定到出錯的位置,對源程序反復修改后,最終會得到如圖5-1所示的結果,提示獲得了名為頻率計數器程序.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還產生了一些其他相關文件可被用于KEIL的仿真與調試4.2.2調試過程中遇到的問題及解決方法
在進入環境以后,遇到了很多問題,總結如下:(1)提示無asm文件 編譯時候提示: F:...XX.asm.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還產生了一些其他相關文件可被用于KEIL的仿真與調試。
File has been changed outside the editor, reload ? 解決方法:重新生成項目,產生頻率計數器程序.asm即可。(2)在進入Keil的調試環境以后,發現程序有錯。解決方法:將光標定位于需要修改的程序上,用菜單,DebugInline Assambly?即可出現對話框,Enter New 后面的編輯框內直接輸入需要修改的程序語句,輸入完之后鍵入回車將自動指向下一條語句,可以繼續修改,如果不在需要修改,可以點擊右上角的關閉按鈕關閉窗口。
(3)程序調試時,一些程序必須滿足一定的條件才能被執行到
解決方法:這些條件往往是異步發生或難以預先設定的,這類問題使用的單步實行方法是很難調試的,這時就要使用發現程序調試中的另一種非常重要是方法---斷點設置。斷點設置的方法有多種,常用的是在某一程序行設置斷點,設置好斷點后可以全速運行程序,一旦執行到該程序行即停止,可在此觀察有關變量值,以確定問題所在。在程序行設置/移除斷點的方法是將光標定位于需要設置斷點的程序行,使用菜單Debug/Insert/RemoveBreakPoint設置或移除斷點(也可以用鼠標在該行雙擊實現同樣的功能);Debug/Enable/Disable BreakPoint是開啟或暫停光標所在懂行的斷點功能;Dubug/Disale All BreakPoint暫停所有斷點;Debug/Kill All BreakPoint清除所有的斷點設置。這些功能也可以用工具條上的快捷鍵進行設置。(4)輸入程序時,有中文標點,用keil編譯時出現錯誤 解決方法:程序里有帶中文標點,用英文重輸入一遍(5)匯編出現數字、字母混淆 解決方法:字母“O” 和 數字 “0”。主要錯在這里。注意細節。
五、心得體會
通過這一個月來的忙碌和學習,本次課程設計已接近尾聲,由于經驗的匱乏,難免有許多考慮不周全的地方,在這里衷心感謝指導老師的督促指導,以及一起學習的同學們的支持,讓我按時完成了這次課程設計。在論文設計過程中,我遇到了許許多多的困難。在此我要感謝我的指導老師給我悉心的幫助和對我耐心而細致的指導,我的論文較為復雜煩瑣,但是老師仍然細心地糾正圖中的錯誤。除了敬佩老師的專業水平以外,他的治學嚴謹和科學研究的精神也是我永遠學習的榜樣,并將積極影響我今后的學習和工作,我才得以解決課程設計中遇到的種種問題。感謝大學三年傳授我們專業知識的所有老師,謝謝你們嘔心瀝血的教導。還有謝謝我周圍的同窗朋友,他們給了我無數的關心和鼓勵,也讓我的大學生活充滿了溫暖和歡樂。如果沒有他們的幫助,此次論文的完成將變得困難。他們在我設計中給了我許多寶貴的意見和建議。同時也要感謝自己遇到困難的時候沒有一蹶不振,取而代之的是找到了最好的方法來解決問題。
第二篇:單片機課程設計_簡易頻率計數器..
單 片 機 課 程 設 計
簡易頻率計數器
1.實驗目的
1.要求學生具有制作調試單片機最小系統及外設的能力,能夠掌握單片機內部資源的使用。
2.熟練掌握焊接技術的基礎上,能熟練使用單片機軟件開發環境Keil C51編程調試,并使用STC ISP調試工具采用串口下載方式聯調制作的單片機最小系統。
二、實驗要求
自制一個單片機最小系統,包括串口下載、復位電路,采用外部計數器T0或T1作為外部頻率輸入,外部頻率由信號源提供,計算出來的頻率顯示在四位一體的數碼管上。
三、實驗器材
89C54RD芯片(與89c51芯片管腳和指令共用,只是內部存儲單元有差異)一個,晶振一個,電容3個,電阻3個,12個10千歐姆電阻,4位一體共陰數碼顯示管一個,按鈕1個,導線若干。
四、實驗原理 1.芯片介紹
AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
1.主要特性: ·與MCS-51 兼容 ·4K字節可編程閃爍存儲器 壽命:1000寫/擦循環 數據保留時間:10年 ·全靜態工作:0Hz-24Hz ·三級程序存儲器鎖定 ·128*8位內部RAM ·32可編程I/O線 ·兩個16位定時器/計數器 ·5個中斷源 ·可編程串行通道 ·低功耗的閑置和掉電模式 ·片內振蕩器和時鐘電路 2.管腳說明:
VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下表所示: 口管腳 備選功能 P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0外部輸入)P3.5 T1(記時器1外部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.7 /RD(外部數據存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3.振蕩器特性:
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。
4.芯片擦除:
整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節被重復編程以前,該操作必須被執行。
此外,AT89C51設有穩態邏輯,可以在低到零頻率的條件下靜態邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數器,串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。
2、最小系統電路的組成
由電源、復位及振蕩電路、四位一體數碼管顯示電路、按鈕及LED電路。
復位及振蕩電路
復位電路由按鍵復位和上電復位兩部分組成。電阻給電容充電,電容的電壓緩慢上升直到vcc,到vcc時芯片復位腳近似低電平,于是芯片復位,接近vcc時芯片復位腳近高電平,于是芯片停止復位,復位完成。
AT89C51系列單片機為高電平復位,通常在復位引腳RST上連接一個電容到VCC,再連接一個電阻到GND,由此形成一個RC充放電回路保證單片機在上電時RST腳上有足夠時間的高電平進行復位,隨后回歸到低電平進入正常工作狀態,這個電阻和電容的典型值為10K和10uF。
按鍵復位就是在復位電容上并聯一個開關,當開關按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機復位。使用6MHz的晶體振蕩器作為振蕩源,由于單片機內部帶有振蕩電路,所以外部只要連接一個晶振和兩個電容即可,電容容量一般在15pF至50pF之間。如下圖所示
數碼管顯示電路
利用單片機的T0,T1計數定時器功能,來完成對輸入信號進行率計數,計數結果通過4位動態數碼管顯示出來,能對0到9999HZ的方波信號頻率進行準確計數。如下圖所示
3、軟件設計
根據設計項目所需功能,我們先進行初始化,在待機狀態下,采集頻率。然后檢測是否有按鈕按下,若按鈕按下,則數碼管顯示所采集的頻率,再按下鍵0時則不顯示。系統實現所有功能,其程序框圖如圖所示。
4、設計源程序 #include
unsigned char volatile T0Count;//定時器0的中斷次數 unsigned char volatile T1Count;unsigned char code table[] //定時器1的中斷次數
={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示段碼值為123456789 unsigned char code temp[] = {0xfe,0xfd,0xfb,0xf7};//數碼管選通 unsigned long sum;//1S內脈沖總個數 unsigned char Led[4];//Led顯示緩存
void delay(unsigned int num){ //軟件延時
while(--num);//定時器0初始化 } void init(void){ TMOD=0x51;//T1定時器0工作于方式1,定時器1計數 TH0=(65536-50000)/256;//定時50ms TL0=(65536-50000)%256;TH1=0x00;TL1=0x00;} void disp(void){ //數碼顯示
unsigned char i;for(i=0;i<4;i++){
P2=temp[i];//片選
P0=table[Led[i]];//取數據顯示
delay(100);//延時1毫秒
} } void main(void){ EA=1;//開總中斷
init();//初始化定時器
TR0=1;//定時器開始工作
TR1=1;ET1=1;//開T0中斷
ET0=1;while(1){
if(int_flag==1){
int_flag=0;
sum=TL1+TH1*256+T1Count*65536;//計算個數
//將數據格式化,轉化成可顯示的BCD碼
Led[3]=sum%10000/1000;//顯示千位
Led[2]=sum%1000/100;//顯示百位
Led[1]=sum%100/10;//顯示十位
Led[0]=sum%10;//顯示個位
T0Count=0x00;
T1Count=0;
TH1=0x00;
TL1=0x00;
TR1=1;
}
內脈沖1S
disp();} } void int_t0(void)interrupt 1{ TH0=(65535-50000)/256;TL0=(65536-50000)%256;T0Count++;if(T0Count==20){
TR1=0;
int_flag=1;
T0Count=0x00;} } void int_T1(void)interrupt 3{ T1Count++;
5、設計仿真圖 輸入正弦波頻率為1324HZ的仿真情況; 輸入方波頻率為4216HZ的仿真情況;
6、實物圖(未上電)
六、實驗結果分析
在實驗電路板驗收的時候,對于給定的輸入信號,數碼管顯示的頻率示數與實際信號源給定的頻率有大約20HZ的偏差,產生偏差的原因可能有:1.電路電容的選取不恰當;2.焊接電路板的時候,因為操作不恰當,某些焊點的焊接不到位;3.實際器件與仿真所用到的的元件有差別。
七、心得體會
通過這次課程設計,我熟悉了Keil C51編程與PROTUSE的使用,對單片機的使用有了更深刻的了解,在焊接與測試過程中要有大局觀,注意布局和布線。頻率計的設計讓我更好的了解如何應用單片機的定時器計數器模塊。其中最重要的是分析問題解決問題的能力,在我看來,寫程序并不難,重要的是把程序優化,無論是在節省硬件資源,還是提高數據的準確度來看,都需要下一些功夫把它做到最好。通過這次課程設計使我明白了自己原來知識還比較欠缺。學習是一個長期積累的過程,在以后的工作、生活中都應該不斷的學習,努力提高自己知識和綜合素質。
第三篇:單片機課程設計-00-99手動計數器設計
單片機綜合實驗
題目:00-99手動計數器
班級:10計科一班 姓名:
學號:
設計時間:2013.06.2
目錄
一、設計目的:..............................................................................................................................3
二、實驗設備和實驗平臺:...........................................................................................................3
三、實驗原理:..............................................................................................................................3
四、設計步驟:..............................................................................................................................4
1.電路設計................................................................................................................................4 2.軟件設計................................................................................................................................4 3.實驗調試................................................................................................................................5
五、心得體會..................................................................................................................................7
一、設計目的:
利用AT89S51單片機來制作一個手動計數器,在AT89S51單片機的P3.7管腳接一個輕觸開關,作為手動計數的按鈕,用單片機的P2.0-P2.7接一個共陰數碼管,作為00-99計數的個位數顯示,用單片機的P0.0-P0.7接一個共陰數碼管,作為00-99計數的十位數顯示
二、實驗設備和實驗平臺:
EL-MUT-III 型單片機實驗箱、8051CPU 模塊、Keil uVision2、Proteus 7 Professional
三、實驗原理:
1.把“單片機系統”區域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個a-h端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。
2.把“單片機系統”區域中的P2.0/A8-P2.7/A15端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個數碼管的a-h端口上;
把“單片機系統”區域中的P3.7/RD端口用導線連接到“獨立式鍵盤”區域中的SP1端口上; 1. 程
2.3. 序設計內容
3.單片機對按鍵的識別的過程處理
單片機對正確識別的按鍵進行計數,計數滿時,又從零開始計數;
單片機對計的數值要進行數碼顯示,計得的數是十進數,含有十位和個位,我們要把十位和個位拆開分別送出這樣的十位和個位數值到對應的數碼管上顯示。如何拆開十位和個位我們可以把所計得的數值對10求余,即可個位數字,對10整除,即可得到十位數字了。
通過查表方式,分別顯示出個位和十位數字。
四、設計步驟: 1.電路設計
2.軟件設計
Count EQU 30H
;EQU ——標號賦值偽指令 SP1
BIT P3.7
ORG 0 START: MOV Count,#00H NEXT: MOV A,Count
MOV B,#10
DIV AB
;A除以B,商(存于)A余(下)B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A WT:
JNB SP1,WT
;SP為0轉移 WAIT: JB SP1,WAIT
;SP為1轉移
LCALL DELY10MS
JB SP1,WAIT
INC Count
;Count加1 MOV A,Count
CJNE A,#100,NEXT
;累加器與立即數不等轉移 LJMP START MOV R6,#20 MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;0---9 END
DELY10MS: D1:
TABLE:
3.實驗調試
運行后,每按一下開關,后面的個位數字就加1,按到9以后再按一下向十位進1.6
五、心得體會
為期兩周的單片機課程設計,給我留下了很深刻的印象.這是我第一次從硬件方面接觸到單片機.在平時的上課學習中.對于書上所講的.感覺很抽象.在做課程設計時我們從最簡單的實物開始做起.在制作過程中,我們首先是實驗設計,設計電路圖,然后畫出電路流程圖,這個大概耗時一周的時間,在這期間,我們花費大量的時間在尋找方法,上網查資料,不斷的討論,每天都研究的很晚,在焊電路片,由于以前有做過.所以沒有什么問題.最后就是程序的下載,這個東西我們以前沒有接觸過,但是進過我們的研究還是終于成功了,我心情萬分激。
這次單片機制作對我收獲很大.激發了我對單片機的興趣.接下來我會慢慢的制作更多更復雜的板子.從中發現問題.解決問題.對我單片機的學習是很有幫助的.由于第一次制作單片機電路.還有許多不好的地方.懇請老師指教!
第四篇:單片機實驗三 定時計數器實驗
實驗三
定時/計數實驗
一、實驗目的
1、理解單片機的定時/計數原理,掌握定時/計數程序的編寫方法。
2、掌握定時/計數器在定時、計數、頻率測量等方面的應用。
3、學會使用PROTEUS中VSM虛擬示波器觀察波形。
二、實驗設備
計算機一臺;單片機實驗儀一臺;Keil C51和Proteus軟件。
三、實驗內容
利用定時計數器1,編程實現從P1.0、P1.1、P1.2三個I/O引腳分別輸出頻率為0.25Hz、50 Hz、1k Hz的方波信號。利用P1.0、P1.1、P1.2三個I/O引腳所接的三個LED燈或利用示波器進行觀察。已知fosc=12MHz。
四、實驗電路圖
圖1 8路LED燈控制原理圖
五、實驗接線
P1.0、P1.1、P1.2三個I/O引腳接J12的三個引腳(即三個LED燈)。
六、思考題
1、簡要寫出實現該實驗的方案(要有必要的計算)。
2、單片機定時/計數器的“加一”操作和單片機運行主程序是同時工作(并行工作)的,還是有先后順序的?單片機運行中斷程序和運行主程序是同時工作(并行工作)的,還是有先后順序的?
3、單片機定時/計數器的定時與計數的區別是什么,軟件上分別應如何設置?
4、在該實驗的基礎上,輸出的三路信號的占空比可以分別為1/2,1/3,1/4嗎?
七、實驗報告要求 實驗目的
1、實驗目的
2、實驗設備
3、實驗內容
4、實驗流程圖
5、實驗源程序
7、思考題解答
8、實驗總結及心得體會
第五篇:單片機課程設計
單片機課程設計
課題: 簡易電子琴設計
學
院:
電氣與信息工程學院 專
業:
電子信息工程 姓
名:
李琳琳 學
號:
093411106
指導老師:
田巍
河南城建學院
2014年
01 月
01 日