十字路口紅綠燈單片機課程設(shè)計.doc_第1頁
十字路口紅綠燈單片機課程設(shè)計.doc_第2頁
十字路口紅綠燈單片機課程設(shè)計.doc_第3頁
十字路口紅綠燈單片機課程設(shè)計.doc_第4頁
十字路口紅綠燈單片機課程設(shè)計.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

黃河科技學院課程設(shè)計任務(wù)書 工 學院 機械 系 機械設(shè)計制造及其自動化 專業(yè) 10 級 班學號 姓名 指導教師 題目: 彩燈控制器的設(shè)計 課程: 單片機課程設(shè)計 課程設(shè)計時間 2013年 10月28日 至2013年11 月 10 日 共 2 周一、設(shè)計要求:利用AT89C51單片機的4位數(shù)字加法計算器,能進行加減運算。 創(chuàng)新要求:功能鍵能清零、超出位數(shù)光報警提示、違規(guī)操作聲報警二、設(shè)計方案分析: 采用44鍵盤,鍵盤定義十個數(shù)字鍵,六個功能鍵,使用串行動態(tài)顯示顯示運算結(jié)果。主程序進行初始化,采用行列掃描進行查表得出鍵值,每次按鍵后調(diào)用顯示子程序。主要單元電路的設(shè)計 復位電路 復位電路采用上電復位與手動復位相結(jié)合的方案。上電復位時,上電瞬間RST端的電位與VCC相同,即為高電平,隨著充電電流的減小,RST端的電位逐漸下降。只要高電平保持時間足夠長,就可以使AT89C52有效地復位。手動復位時,按下復位按鈕,電容C1通過R2電阻迅速放電,使RST端迅速變?yōu)楦唠娖?,復位按鈕松開后,電容通過R和內(nèi)部下拉電阻放電,逐漸使RST端恢復為低電平。電路如圖所示 晶振電路 晶振電路是單片機的心臟,它用于產(chǎn)生單片機工作所需要的時鐘信號,晶振電路給數(shù)字鐘提供一個頻率穩(wěn)定準確的方波信號,可保證數(shù)字鐘的走時準確及穩(wěn)定,晶振電路如圖 鍵盤電路的設(shè)計 鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個以上)和專用驅(qū)動芯片的組合,當按下某個按鍵時,它能夠處理按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預。通用計算機使用的標準鍵盤就是編碼鍵盤。當系統(tǒng)功能比較復雜,按鍵數(shù)量很多時,采用編碼鍵盤可以簡化軟件設(shè)計。但大多數(shù)智能儀器和電子產(chǎn)品的按鍵數(shù)目都不太多(20個以內(nèi)),為了降低成本和簡化電路通常采用非編碼鍵盤。非編碼鍵盤的接口電路有設(shè)計者根據(jù)需要自行決定,按鍵信息通過接口軟件來獲取。本課題需要的是16個按鍵,故選擇用非編碼鍵盤。計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為44個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O 口的利用率。建立鍵碼值,建立鍵值碼表TABLE如下:0CH 08H 04H 00H0DH 09H 05H 01H0EH 0AH 06H 02H0FH 0BH 07H 03H對應的鍵盤按鍵為: 8 4 0 9 5 1= + 6 2功能 7 3 報警電路 當超出位數(shù)時,調(diào)用喇叭程序,信號通過三極管放大后驅(qū)動揚聲器,發(fā)出相應的聲音。如圖所示3、 硬件電路設(shè)計圖用P1.0P1.3作為行掃描輸出,P1.4P1.7作為列掃描輸入,P0.0P0.3作為鍵值碼輸出送出譯碼器7447,7447是美國仙童公司生產(chǎn)的BCD碼到7段數(shù)碼管的譯碼器驅(qū)動芯片。它負責將4位BCD碼十進制數(shù)轉(zhuǎn)換成對應的7段數(shù)碼管信號,送到數(shù)碼管的7位段選輸入端。譯出的顯示碼送入數(shù)碼管的段驅(qū),P0.4P0.6控制譯碼器74LS138,74LS138譯碼器負責數(shù)碼管顯示掃描時依次通過譯碼選中數(shù)碼管中,譯碼輸出控制數(shù)碼管的位驅(qū)。電路圖如下圖所示:4、 軟件部分設(shè)計程序工作過程如下:(1)首先賦予顯示緩沖初始值00,并把數(shù)據(jù)存儲單元清零。(2)主程序調(diào)用鍵盤掃描子程序,判斷鍵值,是數(shù)字第一次直接賦予34H單元,如是第二次輸入數(shù)字,則把第一次值乘十后與第二次值相加,結(jié)果存儲到33H單元,如是第三次輸入數(shù)字,則把前兩次值乘十后與第三次值相加,結(jié)果存儲到32H單元,在等待運算符號的按下,按下等于號就直接計算并顯示,如加減乘除就運算后把按鍵次數(shù)清零,表示可以輸入下一操作數(shù),與第一次相同,并等待等于鍵按下。清零鍵則不管在任何情況下都清零,相當于軟復位。(3)在掃描完鍵盤后,調(diào)用數(shù)據(jù)顯示轉(zhuǎn)換子程序把值轉(zhuǎn)換為七段碼。(4)調(diào)用數(shù)碼管動態(tài)顯示子程序,顯示數(shù)值,重新循環(huán)。系統(tǒng)總流程圖主程序主要是用來進行初始化的,調(diào)用其他子程序,清空各個標志位,清空緩存區(qū),讀取鍵碼,判斷功能,在LED上作出回應。(1)數(shù)字送顯示緩沖程序設(shè)計簡易計算器所顯示的數(shù)值最大位四位。要顯示數(shù)值,先判斷數(shù)值大小和位數(shù),如果是超過四位,將不顯示數(shù)字,并調(diào)用喇叭程序提示錯誤??芍匦螺斎霐?shù)字,再次計算。(2)運算程序的設(shè)計判斷按鍵存入內(nèi)存單元Y將第一次輸入的數(shù)字10+第二次輸入的數(shù)字Y N是否是數(shù)字鍵掃描鍵盤 有輸入則計算鍵值計算結(jié)果并送內(nèi)存單元調(diào)用顯示子程序顯示結(jié)果是否是清零YN等待輸入等號開始是否第一次輸入數(shù)字N首先初始化參數(shù),送LED三位顯示“0”,其它位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵,是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運算鍵,若是“=”則計算最后結(jié)果并送LED顯示,若是運算鍵則保存相對運算程序的首地址。流程圖五、 調(diào)試與仿真下面用KEIL uVision3與 proteus仿真軟件介紹十進制加法計算器的仿真與調(diào)試。Keil C51單片機軟件開發(fā)系統(tǒng)(一) 系統(tǒng)的整體結(jié)構(gòu)C51工具包的整體結(jié)構(gòu)中,其中uVision是C51 for Windows的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫入程序存貯器如EPROM中。(二) 采用KEIL 開發(fā)的89c51單片機應用程序步驟:1. 在uVision 集成開發(fā)環(huán)境中創(chuàng)建新項目(Project),擴展文件名為.UV2,并為該項目選定合適的單片機CPU器件(本設(shè)計采用ATMEL 公司下的AT89C51) 2. 用uVision 的文本編輯器編寫源文件,可以是匯編文件(.ASM),也可以使C語言文件(擴展名.C),并將該文件添加到項目中去。一個項目文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。 3. 通過uVision 3 的相關(guān)選擇項,配置編譯環(huán)境、連接定位器以及Debug調(diào)試器的功能。 4. 對項目中的源文件進行編譯連接,生成絕對目標代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構(gòu)整個項目。 5. 對沒有語法錯誤的程序進行仿真調(diào)試,調(diào)試成功后將HEX文件寫入到單片機應用系統(tǒng)的ROM中。 proteus的操作 (一)硬件電路圖的接法操作 1.放置選擇(刪除)元器件2.移動元器件3.縮放視圖4.連接導線5.仿真,調(diào)試 (二) 單片機系統(tǒng)PROTEUS設(shè)計與仿真過程Proteus強大的單片機系統(tǒng)設(shè)計與仿真功能,使它可成為單片機系統(tǒng)應用開發(fā)和改進手段之一。全部過程都是在計算機上通過Proteus來完成的。其過程一般也可分為三步:1.在ISIS平臺上進行單片機系統(tǒng)電路設(shè)計、選擇元器件、接插件、連接電路和電氣檢測等,簡稱Proteus電路設(shè)計。2.在Keil平臺上進行單片機系統(tǒng)程序設(shè)計、編輯、匯編編譯、代碼級調(diào)試,最后生成目標代碼文件(*.hex)。簡稱Proteus源程序設(shè)計和生成目標代碼文件。3.在ISIS平臺上將目標代碼文件加載到單片機系統(tǒng)中,并實現(xiàn)單片機系統(tǒng)的實時交互、協(xié)同仿真。它在相當程度上反映了實際單片機系統(tǒng)的運行情況。簡稱Proteus仿真。(三) Proteus中課程設(shè)計的仿真結(jié)果在Proteus中將硬件電路全部接好以后,將Keil中生成的.hex文件導入到單片機中,點擊開始仿真按鈕,電路開始仿真??梢杂^察到:數(shù)碼管顯示“000”;分別依次按下按鍵“5”、“+”、“6”和“=”,可以看到數(shù)碼管顯示“11”;也可以分別調(diào)試其它功能鍵,結(jié)果發(fā)現(xiàn)調(diào)試結(jié)果與預期的理論值相吻合,即本次課設(shè)已成功。(4) 程序清單:JG EQU50H ;結(jié)果存放JG1 EQU51H ;中間結(jié)果存放GONG EQU52H ;功能鍵存放ORG 0000HSTART:MOV R4,#06H MOV GONG,#0 MOV R0,#31HCLEAR: MOV R0,#00H INC R0 DJNZ R4,CLEAR ;清除31H34H地址單元的內(nèi)容MLOOP:CALL DISP ;調(diào)顯示子程序WAIT:CALL TESTKEY ;判斷有無按鍵JZ WAIT CALL GETKEY ;讀鍵INC R3 ;按鍵個數(shù)CJNE A,#0,NEXT1 ;判斷是否數(shù)字鍵LJMP E1 ;轉(zhuǎn)數(shù)字鍵處理NEXT1:CJNE A,#1,NEXT2LJMP E1NEXT2:CJNE A,#2,NEXT3LJMP E1NEXT3:CJNE A,#3,NEXT4LJMP E1NEXT4:CJNE A,#4,NEXT5LJMP E1NEXT5:CJNE A,#5,NEXT6LJMP E1NEXT6:CJNE A,#6,NEXT7LJMP E1NEXT7:CJNE A,#7,NEXT8LJMP E1NEXT8:CJNE A,#8,NEXT9LJMP E1NEXT9:CJNE A,#9,NEXT10LJMP E1NEXT10:CJNE A,#0AH,NEXT11 ;判斷是否功能鍵LJMP E2 ;轉(zhuǎn)功能鍵處理NEXT11:CJNE A,#0BH,NEXT12LJMP E2NEXT12:CJNE A,#0CH, NEXT13LJMP E2NEXT13:CJNE A,#0DH,NEXT14LJMP E2NEXT14:CJNE A,#0EH,NEXT16LJMP E2NEXT15:LJMP E3 ;判斷是否清除鍵E1:CJNE R3,#1,N1 ;判斷第幾次按鍵LJMP E11 ;為第一個數(shù)字N1:CJNE R3,#2,N2LJMP E12 ;為第二個數(shù)字N2:CJNE R3,#3,N3 LJMP E13 ;為第三個數(shù)字N3:CJNE R3,#4,N4 LJMP E13 ;為第四個數(shù)字N4:LCALL ERROR ;調(diào)用錯誤警示喇叭程序 LJMP E3 ;第五個數(shù)字轉(zhuǎn)溢出 E11:MOV R4,A ;輸入值暫存R4MOV 34H,A ;輸入值送顯示緩存MOV 33H,#00HMOV 32H,#00HLJMP MLOOP ;等待再次輸入E12: MOV R7,A ;個位數(shù)暫存R7MOV B,#10MOV A,R4MUL AB ;十位數(shù)ADDA,R7MOV R4,A ;輸入值存R4MOV 32H,#00H ;輸入值送顯示緩存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;輸入溢出ADD A,R7JB CY,E3 ;輸入溢出MOV R4,AMOV 32H,33H;輸入值送顯示緩存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3:MOV R3,#0 ;按鍵次數(shù)清零MOV R4,#0 ;輸入值清零MOV JG,#0 ;計算結(jié)果清零MOV GONG,#0 ;功能鍵設(shè)為零 MOV 32H,#00H;顯示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2:MOV 34H,#00HMOV 33H,#00HMOV 32H,#00HMOV R0,GONG ;與上次功能鍵交換MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判斷功能鍵LJMP JIA ;N21: CJNE A,#11,N22LJMP JIAN ;N22: CJNE A,#12,N23LJMP CHENG ;*N23:CJNE A,#13,N24LJMP CHU ;/N24:CJNE A,#0,N25LJMP FIRST ;首次按功能鍵N25:LJMP DEN ;=N4:LJMP E3FIRST:MOV JG,R4 ;輸入值送結(jié)果MOV R3,#0 ;按鍵次數(shù)清零LJMP DISP1 ;結(jié)果處理JIA:MOV A,JG;上次結(jié)果送累加器ADD A,R4;上次結(jié)果加輸入值JB CY,N4;溢出MOV JG,A;存本次結(jié)果MOV R3,#0;按鍵次數(shù)清零LJMP DISP1JIAN:MOV A,JGSUBB A,R4;上次結(jié)果減輸入值JB CY,N4;負數(shù)溢出MOV JG,AMOV R3,#0LJMP DISP1CHENG:MOV A,JGMOV B,AMOV A,R4MUL AB;上次結(jié)果乘輸入值JB OV,N4;溢出MOV JG,ALJMP DISP1CHU:MOV A,R4MOV B,AMOV A,JGDIV AB;上次結(jié)果除輸入值MOV JG,AMOV R3,#0LJMP DISP1DEN:MOV R3,#0LJMP DISP1DISP1:MOVB,#10MOVA,JG;結(jié)果送累加器DIVAB;結(jié)果除10MOVJG1,A;暫存商MOVA,B;取個位數(shù)MOV34H,A;個位數(shù)送顯示緩存MOVA,JG1JZDISP11;結(jié)果是否為一位數(shù)MOVB,#10MOVA,JG1DIVABMOVJG1,AMOVA,BMOV33H,A;十位送顯示緩存MOVA,JG1JZDISP11;結(jié)果是否為二位數(shù) MOV B,#10 MOVA,JG1DIVABMOVJG1,AMOVA,BMOV32H,A;十位送顯示緩存MOVA,JG1MOV31H,A;百位數(shù)送顯示緩存DISP11:LJMPMLOOPDISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTAB MOV A,R0 MOVC A,A+DPTR MOV P0,A CJNE R0,#34H,DIR2 SETB P2.0 CALL D1MS CLR P2.0 DEC R0 SJMP DIR1ERROR: X1: LCALL BZ ;調(diào)用喇叭響應程序 CLR 26H.0 ;調(diào)用喇叭響應程序結(jié)束 LCALL DELAY CLR 26H.0 BZ: MOV C,26H.1 CPL P2.4 MOV R7,#0FH ;喇叭響應時間 T2: MOV R6,#0FH T3: DJNZ R6,T3 DJNZ R7,T2 SETB P2.3 RETTESTKEY:ACALL DISPMOVP1,#0FH;讀入鍵狀態(tài)MOVA,P1CPLAANLA,#0FH;高四位不用RETTABLE:DB0CH,08H,04H,00H;鍵碼定義DB0DH,09H,05H,01HDB0EH,0AH,06H,02HDB0FH,0BH,07H,03HGETKEY:MOVR6,#10;讀鍵子程序ACALLDELAYMOVP1,#0FHMOVA,P1CJNEA,0FH,K12LJMPMLOOPK12: MOVB,AMOVP1,#0EFHMOVA,P1CJNEA,#0EFH,K13MOVP1,#0DFHMOVA,P1CJNEA,#0DFH,K13MOVP1,#0BFHMOVA,P1CJNEA,#0BFH,K13MOVP1,#07FHMOVA,P1CJNEA,#07FH,K13LJMPMLOOPK13: ANL A,#0F0HORLA,BMOVB,AMOVR1,#16MOVR2,#0MOVDPTR,#TABLEK14:MOVA,R2MOVCA,A+DPTRCJNEA,B,K16MOVP1,#0FHK15:MOVA,P1CJNEA,#0FH,K15MOVR6,#10ACALLDELAYMOVA,R2RETK16:INCR2DJNZR1,K14AJMPMLOOP ;10ms延時子程序DELAY:MOVR7,#10TS1: MOV R6,#0FFHTS2:NOPNOP DJNZR6,TS2DJNZR7,TS1RETEND六、心得體會剛開始的時候還真的不知道從哪里設(shè)計好,一點頭緒都沒有,就開始在上網(wǎng)查資料,還去圖書館查資料,解之后自己嘗試編寫程序,在此過程中,其中鍵盤掃描和動態(tài)掃描顯示掃描程序困擾了我很久,經(jīng)過三四天的辛苦工作,終于初步把所需要的程序編好了,于是就用Keil uversion3進行仿真,在仿真期間也發(fā)現(xiàn)了許多錯誤,基本上都是平日容易犯的錯誤,比如忘記了子程序標號、死循環(huán)程序、標點符號的漏寫等。經(jīng)過反復的編譯差錯,仿真編譯通過后,于是開始在Proteus中連硬件電路,全部接完電路之后將Keil生成的.Hex文件導入進行仿真,發(fā)現(xiàn)軟件與硬件不能夠?qū)獏f(xié)調(diào)工作,于是分別對軟件和硬件進行檢查,經(jīng)過反復的仿真調(diào)試,并且在同學的幫助和自己對每個子程序進行仿真觀察下,終于在課設(shè)快結(jié)束時成功的調(diào)試出結(jié)果了。這就是我這一周課設(shè)的經(jīng)過,看似簡單,過程卻曲折艱辛。 通過這次課程設(shè)計,我進一步加深了對電子自動控制的了解。并進一步熟練了對K

溫馨提示

  • 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

提交評論