報告使用范圍很廣。按照上級部署或工作計劃,每完成一項任務,一般都要向上級寫報告,反映工作中的基本情況、工作中取得的經驗教訓、存在的問題以及今后工作設想等,以取得上級領導部門的指導。報告,在已發布的黨、人大、政府、司法、軍隊機關的公文處理規范中, 以下是為大家整理的關于單片機實習報告6篇 , 供大家參考選擇。
單片機實習報告6篇
單片機實習報告篇1
單片機實習個人小結
通過這一個學期的單片機學習,我收獲了很多關于單片機的知識,并且這些知識和日常的生活息息相關。了解了一些簡單程序的錄入,LED顯示器、鍵盤、和顯示器的應用和原理。
LED顯示器:LED顯示器是由發光二管組成顯示字段的器件。通常的8段LED顯示器是由8個發光二極管組成,LED顯示器分共陽極和共陰極兩種。有段選碼和和位選碼。當LED顯示器每段的平均電流位5MA時,就有較滿意的亮度,一般選擇斷碼5-10MA電流;位線的電流應選擇40-80MA。LED顯示器的顯示方式有動態和靜態兩種。7289A芯片是具有SPI串行接口功能的顯示鍵盤控制芯片,它可同時取得8位共陰極數碼管和64個鍵的鍵盤矩陣。7289A的控制指令分為兩類:8位寬度的單字節指令和16位寬度雙字節指令;還有閃爍指令和消隱指令。7289A采用串行方式SPI總線與微處理器通信;7289A與AT89C52接口電路,在實際電路中無論接不接鍵盤,電路中連接到其各段上的8個 100千歐的下拉電阻均不可以省去,如果不接鍵盤而只接顯示器可以省去8個10千歐電阻,若僅接鍵盤而不接顯示器,可省去串入DP及SA-SG連線的8個220歐電阻,7289A還需要外接晶體振蕩電路。液晶顯示器簡稱LCD,其顯示原理是用經過處后的液晶具有能改變光線傳輸方向的特性,達到顯示字符和圖形的目的。最簡單的筆段式液晶顯示器類似于LCD顯示器,可以顯示簡單的字符和數字,而目前大量使用的是點陣式LCD顯示器,既可以顯示字符和數字也可以顯示漢字和圖形。如果把LCD顯示屏、背光可變電源、接口控制邏輯、驅動集成芯片等部件構成一個整體,是的與CPU接口十分方便。
鍵盤:鍵盤是最常見的計算機輸入設備,它廣泛應用于微型計算機和各種終端設備上。計算機操作者通過鍵盤向計算機輸入各種指令、數據,指揮計算機的工作。按照鍵盤的工作原理和按鍵方式的不同,可以劃分為四種:機械式鍵盤采用類似金屬接觸式開關,工作原理是使觸點導通或斷開,具有工藝簡單、噪音大、易維護的特點。 塑料薄膜式鍵盤鍵盤內部共分四層,實現了無機械磨損。其特點是低價格、低噪音和低成本,已占領市場絕大部分份額。 導電橡膠式鍵盤觸點的結構是通過導電橡膠相連。鍵盤內部有一層凸起帶電的導電橡膠,每個按鍵都對應一個凸起,按下時把下面的觸點接通。這種類型鍵盤是市場由機械鍵盤向薄膜鍵盤的過渡產品。 無接點靜電電容式鍵盤使用類似電容式開關的原理,通過按鍵時改變電極間的距離引起電容容量改變從而驅動編碼器。特點是無磨損且密封性較好。
按照按鍵方式的不同鍵盤可分為接觸式和無觸點式兩類。接觸式鍵盤就是我們通常所說的機械式鍵盤,它又分為普通觸點式和干簧式。普通觸點式的兩個觸點直接接觸,從而使電路閉合,產生信號;而干簧式鍵盤則是在觸點間加裝磁鐵,當鍵按下時,依靠磁力使觸點接觸,電路閉合。與普通觸點式鍵盤相比,干簧式鍵盤具有響應速度快、使用壽命長、觸點不易氧化等優點。無觸點式鍵盤又分為電容式、霍爾式和觸摸式三種。其中電容式是我們最常用到的鍵盤類型,它的觸點之間并非直接接觸,而是當按鍵按下時,在觸點之間形成兩個串聯的平板電容,從而使脈沖信號通過,其效果與接觸式是等同的。電容式鍵盤擊鍵時無噪聲,響應速度快,但是價格很高一些。
顯示器:按照顯示器的顯示管分類CRT、LCD。按顯示色彩分類單色顯示器、彩色顯示器。按大小分類通常有14寸、15寸、17寸和19寸,或者更大。顯示管的屏幕上涂有一層熒光粉,電子槍發射出的電子擊打在屏幕上,使被擊打位置的熒光粉發光,從而產生了圖像,每一個發光點又由“紅”“綠”“藍”三個小的發光點組成,這個發光點也就是一個象素。由于電子束是分為三條的,它們分別射向屏幕上的這三種不同的發光小點,從而在屏幕上出現絢麗多彩的畫面。顯示器顯示畫面是由顯示卡來控制的。若仔細觀察顯示器上的文本或圖像是由點組成的,屏幕上點越多越密,則分辨率越高。
屏幕上相鄰兩個同色點的距離稱為點距,常見點距規格有、、等。顯示器點距越小,在高分辨率下越容易取得清晰的顯示效果。電子束采用光柵掃描方式,從屏幕左上角一點開始,向右逐點進行掃描,形成一條水平線;到達最右端后,又回到下一條水平線的左端,重復上面的過程;當電子束完成右下角一點的掃描后,形成一幀。此后,電子束又回到左上方起點,開始下一幀的掃描。這種方法也就是常說的逐行掃描顯示。而隔行掃描指電子束在掃描時每隔一行掃一線,完成一屏后再返回來掃描剩下的線,這與電視機的原理一樣。隔行掃描的顯示器比逐行掃描閃爍得更厲害,也會讓使用者的眼睛更疲勞。完成一幀所花時間的倒數叫垂直掃描頻率,也叫刷新頻率,比如60Hz、75Hz等。
通過這幾天的單片機的實訓,我在理論的基礎上更深刻的掌握了單片機的深層內容及實際生活中的應用,實訓鍛煉了自己動手能力和思維能力,還有在軟件方面的編程能力,讓我受益匪淺,同時也暴露出一些平時學習上的問題,讓我深刻反思。這些問題的發現將為我以后的學習和工作找明道路,查漏補缺為進一步學習作好準備。通過實訓,讓我懂得了如何編寫一些簡單的程序,學會了如何制作單片機應用程序,并且可以在今后的日常生活中靈活運用。
單片機實習報告篇2
長安 大 學
微控器技術實驗報告
年 級: 大 三
學 號: *****
姓 名: ***
專業班級: 自動化0706
指導老師: ****
20010 7 22
第1章 實驗目的及要求1、 學習Keil C51集成開發工具的操作及調試程序的方法,包括:仿真調試與脫機運行間的切換方法;
2、 熟悉TD-51單片機系統板及實驗系統的結構及使用;
3、 進行MCS51單片機指令系統軟件編程設計與硬件接口功能設計;
4、 學習并掌握Keil C51與Proteus仿真軟件聯機進行單片機接口電路的設計與編程調試;
5、 完成指定MCS51單片機綜合設計題。
第2章 實驗內容本實驗分為軟件與硬件兩大部分,軟件部分只需要盡心軟件編程調試即可,硬件部分既可以利用實驗室提供的設備器材進行聯機調試,也可以應用虛擬軟件若Proteus進行模擬仿真。要求做實驗前需進行充分的準備,軟件部分先寫好程序、硬件部分編號線路圖,或者用虛擬軟件運行成功后在到實驗室利用單片機等設備進行在線調試運行。
第3章 軟、硬件環境軟件環境:KEIL uv3,PROTEUS7.4
硬件環境:PC機,TD-51系統板
第4章 軟件編程設計實驗4.1 實驗內容實驗一 清零程序與拆字程序設計
根據實驗指導書之“第二章 單片機原理實驗”(P17~P23頁)內容,熟悉實驗環境及方法,清零程序:把 7000H –7FFFH 的內容清零。
實驗二 拼字程序與數據傳送程序設計
1、 折字程序:把 7000H 的內容拆開,高位送 7001H 低位,低位送 7002H 低位。7001H,7002H高位清零。
2、 拼字程序:把 7000H,7001H 的低位相拼后送人 7002H,一般本程序用于把顯示緩沖區的 數據取出拼裝成個字節。
3、 數據傳輸子程序:把(R2,R3)源 RAM 區首址內的(R6,R7)個字節數據,傳送到(R4,R5) 目的 RAM 區。
實驗三 排序程序與散轉程序設計
1、 編寫并調試一個排序子程序,其功能為用冒泡法將內部 RAM 中幾個單元字節無符號的正整數,按從小到大的次序重新排列。
2、 編寫散轉程序,根據 8032 片內 20H 中的內容(00 或 01 或 02 或 03)進行散轉。
4.2 實驗程序流程圖及算法1、 清零程序清單:
ORG 0000H
START: MOV R0,#00H
MOV R1,#10H ;循環次數
MOV DPTR,#7000H
D0: MOV A,#00H
MOVX @DPTR,A ;清零
INC DPTR ;地址加一
INC R0
CJNE R0,#00H,D0
DJNZ R1,D0
END
圖4-1清零程序流程圖
為了驗證程序的結果,可以將清零先改成置一,這樣就可以看這個程序是否正確。
2. 折字程序:
拆字流程圖如圖二所示:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV DPTR,#7000H
MOV A,#33H ;7000H中送33H
MOVX @DPTR,A
MOVX A,@DPTR
SWAP A ANL A,#0FH ;屏蔽高四位
MOV DPTR,#7001H
MOVX @DPTR,A ;送7000H高位至7001H
MOV A,#01H
MOV DPTR,#7000H 圖4-2拆字程序流程圖
MOVX A,@DPTR
ANL A,#0FH
MOV DPTR,#7002H ;送7000H低位至7002H
MOVX @DPTR,A
END
3. 拼字程序:
拆字程序流程圖見右圖4-3。
程序清單:
ORG 0000H
LJMP MAIN
ORG 0100H
MOV DPTR,#7000H
MOV A,#05H
MOVX @DPTR,A
MOVX A,@DPTR
ANL A,#0FH
SWAP A
MOV R0,A
MOV DPTR,#7001H
MOV A,#01H
MOVX @DPTR,A
MOVX A,@DPTR
ANL A,#0FH 圖4-3 拼字程序流程圖
ORL A,R0
MOV DPTR,#7002H
MOVX @DPTR,A
END
4.數據傳輸子程序
程序流程圖見圖4-4。
圖4-4數據傳輸指令 圖4-5 散轉指令流程圖
傳輸指令清單:
;(R2,R3)->(R4,R5)
;(R6,R7)個字節
;(R0,R1)作為計數值,與6、7相等時,傳送完畢
ORG 0000H
AJMP MAIN
MAIN:
MOV R2,#1 ;設置各 初始值
MOV R3,#2
MOV R4,#1
MOV R5,#2AH
MOV R6,#0
MOV R7,#6
MOV R0,#00H
MOV R1,#0 ;R0R1 計數初值
CJNE R6,#0,S
CJNE R7,#0,S
LJMP E
S: MOV DPH,R2 ;源地址數據給A
MOV DPL,R3
MOVX A,@DPTR
INC DPTR
MOV R2,DPH
MOV R3,DPL
MOV DPH,R4 ;A給目的地址
MOV DPL,R5
MOVX @DPTR,A
INC DPTR
MOV R4,DPH
MOV R5,DPL
MOV DPH,R0 ;計數值R0R1+1
MOV DPL,R1
INC DPTR
MOV R0,DPH
MOV R1,DPL
MOV A,R1 ;R1異或R7,若A=0,R1=R7
XRL A,R7
JNZ S
MOV A,R0
XRL A,R6;若R1=r7且R0=R6,傳送完畢
JNZ S
E:
END
5. 散裝程序流程圖見圖4-5。
程序清單
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV A,20H
RL A
ADD A,20H
MOV DPTR,#TABLE
JMP @A+DPTR
TABLE:
LJMP PM0 ;散轉入口
LJMP PM1
LJMP PM2
LJMP PM3
PM0: MOV R0,#00H ; 子程序0
MOV R3,#10H
MOV R1,#30H
L1: MOV A,R0
MOV @R1,A
INC R0
INC R1
DJNZ R3,L1
LJMP EXIT
PM1:MOV DPTR,#7000H ; 子程序1
MOV A,#33H
MOVX @DPTR,A
MOVX A,@DPTR
INC DPTR
MOV R0,A
ANL A,#0FH
MOVX @DPTR,A
MOV A,R0
SWAP A
ANL A,#0FH
INC DPTR
MOVX @DPTR,A
LJMP EXIT
PM2: MOV 11H,#0FH ; 子程序2
AJMP EXIT
PM3: MOV 12H,#0FEH ; 子程序3
AJMP EXIT
EXIT:NOP
END
6. 冒泡程序
流程圖件圖4-6
程序清單:
;冒泡法排序;(R0)為數據開始地址指針(R1)為數據塊字節數;實現從小到大排序
ORG 0000H
LJMP MAIN
MAIN:MOV R0,#50H
MOV R1,#5H
LCALL MAPE
END
MAPE: DEC R1
MOV R4,R0
CLR PSW.5 ;清冒泡標志
MAP10:MOV R3,R1
MOV R0,R4 ;數據塊起始地址指針
MAOP11:MOV R2,@R0 ;取前數
INC R0
MOV A,@R0 ;取后數
CLR C
SUBB A,R2
JC MAP12 ;前數小于后數,不變
SETB PSW.5 ;置冒泡標志
MOV A,@R0
INC R0
MOV @R0,A
INC R0
MOV @R0,R2
MAOP12:DJNZ R3,MAOP11
JBC PSW.5,MAOP10
MAPE:RET
圖4-6 冒泡法排序
4.2 實驗調試步驟1. 輸入程序,檢查無誤后,編譯、鏈接程序,首先給系統復位,然后點擊 命令進入調試狀態。
2、點擊命令復位,點擊命令運行整個程序,觀察存儲器窗口的結果。、
3、另外在程序出錯時可點擊命令單步運行程序,觀察每一步運行情況,找出錯誤之處。
4.3 實驗結果及分析清零、拆字、拼字實驗均滿足要求,其中清零實驗為了驗證結果正確性,可以將清零改成置一。運用匯編編寫程序后,可以參考實驗指導書進行c語言編程,強化理解c語言。
散裝程序,用途及廣,可以實現多個目標的跳轉,具有散裝功能。
冒泡排序一般有兩種方法,一個是規定排序次數,進行內外兩次循環,也可在外循環設置標志位,只有當內循環需要轉換數據時,才進行外循環,否則程序結束。明顯,帶有標志位的冒泡法排序相對來說時間復雜度要小,本實驗即采用第二種冒泡法排序。
典型的排序程序還有快速法,查找法等,這里沒有進行編寫。
第5章 硬件程序設計實驗5.1靜態存儲器擴展實驗1、 實驗要求及內容:
編寫實驗程序,在單片機內部一段連續RAM 空間30H~3FH 中寫入初值00H~0FH,然后將 這16個數傳送到RAM的0000H~000FH 中,最后再將外部RAM 的0000H~000FH 空間的內容傳送 到片內RAM的40H~4FH 單元中。為了更好的看到實驗效果,添加一顯示燈泡,用以表征數據是否正確傳輸。如果有有傳送錯誤,則令指示燈閃爍
2、 實驗程序設計及硬件實現
①:畫程序流程圖,如5-1
圖 5-1 SRAM程序流程圖
②:根據流程圖編寫匯編語言程序。
程序如下:
ORG 0000H
AJMP MAIN
MAIN: MOV P3.5,#1 ;P3.5外接指示燈指示運行狀態(長亮則運行正常,閃爍則出錯)
MOV R0,#30H ;將00H-0FH寫入RAM內30H-3FH
MOV A,#00H
MOV R1,#10H
L1: MOV @R0,A
INC R0
INC DPTR
INC R0
DJNZ R1,L2
MOV R1,#10H ;寫入內部RAM 中
MOV DPTR,#0000H
MOV R0,#40H
L3: MOVX A,@DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R1,L3
ER: MOV P3.5,#0 ;P3.5閃爍子程序
INC A
DJNZ R1,L1
MOV R1,#10H ;寫入外部RAM中
MOV DPTR,#0000H
MOV R0,#30H
L2: MOV A,@R0
MOVX @DPTR,A
MOVX A,@DPTR
CJNE A,@R0,L4
L4: LCALL ER ;傳送出錯,調用閃爍子程序
LCALL DELAY
MOV P3.5,#1
LCALL DELAY
JMP ER
RET
;延時子程序
DELAY: MOV R6,#50H D2: MOV R7,#0FFH
D1: DJNZ R7,D1
DJNZ R6,D2
RET
END
③:判斷程序正誤。輸入程序,檢查無誤后,編譯、鏈接程序,先在Keil C中模擬運行,直至正確為止。
④:按照圖5-1進行接線,聯機調試運行程序。
圖5-1 擴展存儲器實驗線路圖
⑤:脫機運行程序,學習并掌握脫機聯機模式之間的切換方法。
5.2數字量輸入輸出實驗5.2.1 實時輸入輸出
1、 實驗內容
P1口是8位準雙向口,每一位均可獨立定義為輸入輸出。編寫實驗程序,將P1口的低4位定義為輸出,高4位定義為輸入,數字量從P1口的高4位輸入,從P1口的低4位輸出控制發光二極管的亮滅。
2、 實驗程序設計及硬件實現
P1口是準雙向口,在其作為輸入口使用時,首先要寫先寫入高電平,然后再讀P1口數據才是準確的。所以,程序的開始就應該說明P1口的高4為為輸入,也就是將高4位寫“1”,指令為:MOV P1,#0F0H
程序清單:
ORG 0000H
AJMP MAIN
MAIN:
MOV P1,#0F0H ;定義高4位為輸入
MOV A,P1
ANL A,#0F0H
SWAP A
MOV P1,A
AJMP E
E: SJMP $
END
圖 5-2基本輸入輸出程序流程圖
此程序的關鍵點在于:P1口是準雙向口,在其作為輸入口使用時,首先要寫“1”,然后再讀P1口數據才是準確的。所以,程序的開始就應該說明P1口的高4為為輸入,也就是將高4位寫“1”,指令為:MOV P1,#0F0H
硬件接線及運行后狀態:
圖5-3 基本輸入輸出電路圖及Proteus仿真結果
5.2.2方波發生器
1、 實驗內容:單片機集成的定時器可以產生定時中斷,利用定時器0和定時器1,編寫實驗程序在P1.0及P1.1 引腳上輸出方波信號,通過示波器觀察實驗現象并測量波形周期。
2、實驗程序設計及硬件實現
程序清單:
MOV TMOD,#10H ;定時器1工作方式1
MOV TH1,#0FFH ;設置計數初值
MOV TL1,#83H
SETB EA ;開中斷
SETB ET1 ;定時器1允許中斷
SETB TR1 ;定時開始
SJMP $ ;等待中斷
中斷服務程序:
MOV TH1,#0FFH ;重新設置計數初值
MOV TL1,#83H
CPL P1.0 ;輸出取反
RETI ;中斷返回
按照實驗指導書上硬件接線圖進行接線,聯機進行調試分析。
5.2.3鍵盤掃描與數碼管顯示設計
1、實驗內容:使用匯編語言編程,實現如下功能:在4*4小鍵盤上按鍵輸入,并將其內容顯示在LCD上。
2、實驗程序設計及硬件實現
①原理闡述
矩陣鍵盤的運行原理:鍵盤的列線接電阻后接+5V的電源,另一端接單片機的P3.0~P3.3口,行線接在單片機的P3.4~P3.7口上。鍵盤采用掃描的方式,程序開始運行時,檢測的方法是單片機的P3.4~P3.7口輸出全“0”,讀取P3.4~P3.7口的狀態,若P3.4~P3.7口有高電平,則有鍵按下,否則沒有鍵按下。若有鍵按下,通過延時去抖。去除鍵抖動后,當檢測到有鍵按下后,延時一段時間在做下一步的檢測判斷。若有鍵按下,通過程序判斷是哪個按鍵按下并通過程序判斷此鍵所代表的具體數值(在程序中將每個按鍵賦予一個固定的值,從0到F),然后查表后的鍵值送到數碼管顯示。
LCD液晶顯式原理:液晶顯示的原理是利用液晶的物理特性, 通過電壓對其顯示區域進行控制,有電就有顯示,這樣即可以顯示出圖。程序開始時,對液晶進行了初始化設置,約定了顯示格式。由于液晶顯示模塊是一個慢顯示器件,所以在執行每條指令之前一定要確認模塊的忙標志位,即讀忙信號和光標地址BF為低電平,表示不忙,否則此指令失效。要顯示字符時,程序先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,液晶就可以正常顯示。
②方案討論
獨立式鍵盤由一組相互獨立的按鍵組成。這些按鍵直接與單片機的I/O口相連,即每個按鍵盤獨占一個I/O口,接口簡單。這里采用查詢方法,利用判斷指令實現鍵盤功能。
矩陣鍵盤輸入:矩陣鍵盤是4*4的16位鍵盤,鍵盤的行線和列線分別接單片機的P3.0~P3.3和P3,4~P3.7口上,鍵盤采用鍵盤掃描的工作方式。
LCD顯示輸出:將LCD的輸入端D0到D7接在單片機的P1端口,數據通過P2口送入LCD,LCD內部有數據譯碼器,能將數據轉換為電壓變化,并顯示。RS端接P2.1,RW接P2.0,E接P2.2,VSS與滑動變阻器一端接地,VDD與滑動變阻器另一端接+5V,VEE接劃動端,通過滑動變阻器改變LCD的顯示亮度,使之能正常顯示。
硬件接線參考圖5-5,圖為Proteus運行結果。
圖5-4 4*4鍵盤掃描輸入及顯示功能Proteus仿真結果圖
③部分程序流程框圖。
圖5-5 LCD顯示子程序
圖5-6 4*4矩陣鍵盤流程圖
④程序清單:程序中設置編有頭文件LCD1602.h、input.h、hardware.h,函數文件有:LCD1602.c、input.c、SHIYAN.c。SHIYAN.c為最終所需文件。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/*-- hardwar.h文件 硬件抽取層---*/
#ifndef __HARDWAR_H__
#define __HARDWAR_H__
#include
/*-- LCD數據、控制口定義-----*/
#define LCD_DATA P1 //LCD的數據口
sbit LCD_BUSY=LCD_DATA^7; //LCD忙信號位
sbit LCD_RW=P2^0; //LCD讀寫控制
sbit LCD_RS=P2^1; //LCD寄存器選擇
sbit LCD_EN=P2^2; //LCD使能信號*/
/*----I2C-EEROM接口定義------------*/
Sbit SDA=P2^4; //I2C總線數據
Sbit SCL=P2^3; //I2C總線時鐘
/*------ DS1302接口定義-----*/
sbit reset=P2^7;
sbit sclk=P2^6;
sbit io=P2^5;
extern void _nop_ (void);
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/***********鍵盤輸入頭文件程序********/
//*.h file
#ifndef __SHURU_H__
#define __SHURU_H__
bit pkey(); //判斷有沒有鍵按下
unsigned char kbscan(void); //鍵盤掃描
void input(void); //號碼輸入
void delay(void); //消抖動
extern unsigned char key;
#endif
/*------------------------------------------------- LCD1602.H文件 LCD1602的一些命令定義--------------------------------------------------*/
#ifndef __LCD_H__
#define __LCD_H__
#define LCD_GO_HOME 0x02 //AC=0,光標、畫面回HOME位
//輸入方式設置
#define LCD_AC_AUTO_INCREMENT 0x06 //數據讀、寫操作后,AC自動增一
#define LCD_AC_AUTO_DECREASE 0x04 //數據讀、寫操作后,AC自動減一
#define LCD_MOVE_ENABLE 0x05 //數據讀、寫操作,畫面平移
#define LCD_MOVE_DISENABLE 0x04 //數據讀、寫操作,畫面不動
//設置顯示、光標及閃爍開、關
#define LCD_DISPLAY_ON 0x0C //顯示開
#define LCD_DISPLAY_OFF 0x08 //顯示關
#define LCD_CURSOR_ON 0x0A //光標顯示
#define LCD_CURSOR_OFF 0x08 //光標不顯示
#define LCD_CURSOR_BLINK_ON 0x09 //光標閃爍
#define LCD_CURSOR_BLINK_OFF 0x08 //光標不閃爍
//光標、畫面移動,不影響DDRAM
#define LCD_LEFT_MOVE 0x18 //LCD顯示左移一位
#define LCD_RIGHT_MOVE 0x1C //LCD顯示右移一位
#define LCD_CURSOR_LEFT_MOVE 0x10 //光標左移一位
#define LCD_CURSOR_RIGHT_MOVE 0x14 //光標右移一位
//工作方式設置
#define LCD_DISPLAY_DOUBLE_LINE 0x38 //兩行顯示
#define LCD_DISPLAY_SINGLE_LINE 0x30 //單行顯示
void LCD_cls(void);
void LCD_write_data(unsigned char);
void LCD_initial(void);
void LCD_set_position(unsigned char);
void LCD_prints(unsigned char *);
void LCD_printc(unsigned char);
#endif
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/*-------主文件設置-----------------*/
#include"reg51.h"
#include"LCD1602.h"
#include"hardware.h"
char code tab[4][4]={ {"1","4","7","#"},{"2","5","8","0"},
{"3","6","9","*"},{"A","B","C","D"}}; //0到F的16個鍵植
void delay(unsigned char a)
{
unsigned char i;
while(a--)
for(i=100;i>0;i--)
;
}
char kbscan() //鍵盤掃描
{
unsigned char hang,lie,key;
if(P3!=0x0f)
delay(5);
if(P3!=0x0f)
{
switch(P3&0x0f)
{
case 0x0e:lie=0;break;
case 0x0d:lie=1;break;
case 0x0b:lie=2;break;
case 7:lie=3;break;
}
P3=0xf0;
P3=0xf0;
switch(P3&0xf0)
{
case 0xe0:hang=0;break;
case 0xd0:hang=1;break;
case 0xb0:hang=2;break;
case 0x70:hang=3;break;
}
P3=0x0f;
while(P3!=0x0f);
key=tab[hang][lie];
}
else
key=0;
return (key);
}
void main()
{
unsigned char temp;
LCD_initial();
LCD_prints("Output");//初始化顯示
P3=0x0f;
P0=0xff;
while(1)
{
temp=kbscan();
if(temp!=0)
{
P0=temp;
LCD_set_position(0x40);
LCD_printc(temp);
}
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/*-------------------------------------------------LCD1602.C文件 LCD1602的函數--------------------------------------------------*/
#include "hardware.h"
#include "lcd1602.h"
void LCD_check_busy(void)//檢測LCD狀態
{
while(1)
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCD_DATA=0xff;
LCD_EN=1;
if(!LCD_BUSY)break;
}
LCD_EN=0;
}
void LCD_cls(void) //LCD清屏
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=1;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_instruction(unsigned char LCD_instruction) //寫指令到LCD
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
LCD_EN=0;
}
void LCD_write_data(unsigned char LCD_data) //輸出一字節數據到LCD
{
LCD_check_busy();
LCD_RS=1;
LCD_RW=0;
LCD_DATA=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
void LCD_set_position(unsigned char x) //LCD光標定位到x處
{
LCD_write_instruction(0x80+x);
}
/*
void LCD_go_home(void) //LCD光標歸位
{
LCD_write_instruction(LCD_GO_HOME);
}
void LCD_printc(unsigned char lcd_data) //輸出一個字符到LCD
{
LCD_write_data(lcd_data);
}
void LCD_prints(unsigned char *lcd_string) //輸出一個字符串到LCD
{
unsigned char i=0;
while(lcd_string[i]!=0x00)
{
LCD_write_data(lcd_string[i]);
i++;
}
}
Void LCD_initial(void) //初始化LCD
{
LCD_write_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF);
LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);
LCD_cls();
}
/*-------------------------------------------------Input.C文件函數實現鍵盤掃描的輸入量檢測----------------------------------*/
#include
unsigned char code tab[4][4]={{"1","4","7","#"},
{"2","5","8","0"},
{"3","6","9","*"},
{"A","B","C","D"}}; //0到F的16個鍵植
void delay(unsigned char a)
{
unsigned char i;
while(a--)
for(i=100;i>0;i--)
;
}
char kbscan() //鍵盤掃描
{
unsigned char hang,lie;
if(P3!=0x0f)
delay(5);
if(P3!=0x0f)
{
switch(P3&0xf0)
{
case 0x10:hang=0;break;
case 0x20:hang=1;break;
case 0x40:hang=2;break;
case 0x80:hang=3;break;
}
P3=0xf0;
P3=0xf0;
switch(P3&0x0f)
{
case 1:lie=0;break;
case 2:lie=1;break;
case 4:lie=2;break;
case 8:lie=3;break;
}
P3=0x0f;
while(P3!=0x0f);
return (tab[hang][lie]);
}
return 0;
}
⑤結果分析:圖中為按下鍵盤8時的顯示,其上面的Output為初始化時變設置的輸出,可以將其改為其他字符或者去掉不要。本次實驗用LCD代替數碼管進行顯示,提高了實驗難度的同時,也使自己在做題過程中得到了許多。
5.3定時器/計數器實驗5.3.1定時器控制LED燈
1、實驗內容
由單片機內部定時器1,按方式1工作,即作為16位定時器使用每0.05秒鐘T1溢出中斷一次。P1口的P1.0-P1.7分別接八個發光二極管。編寫程序模擬時序控制裝置。開機后第一秒鐘L1,L3亮,第二秒鐘L2,L4亮,第三秒鐘L5,L7亮,第四秒鐘L6,L8亮,第五秒鐘L1,L3,L5,L7亮,第六秒鐘L2,L4,L6,L8亮,第七秒鐘八個LED燈全亮,第八秒鐘全滅,以后又從頭開始,L1,L3亮,然后L2,L4亮……一直循環下去。
2、實驗程序設計及硬件實現
①方案設計:本實驗較為簡單,利用單片機的計數與定時功能共同實現彩燈循環。流水燈的八個發光二極管負極通過電阻接在單片機的P1口上,正極接+5V電壓,當給 P1輸入低電平時發光二極管發光,流發光,當程序運行時,給P1口需要發光的口送入低電平,使發光二極管能輪流閃爍發光。此設計使用靜態,從而程序簡單,顯示穩定,線路不易出錯,但缺點是但用單片機的I/O多。
②實驗流程圖:
③程序清單:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#80H
SETB TR0 ;啟動定時器
SETB ET0 ;允許T0中斷
SETB EA ;允許CPU中斷
SJMP $ ;等待中斷
SERVE:
MOV TH0,#3CH ;重新置數
MOV TL0,#80H
DJNZ B,L ;1秒
MOV B,#20
CJNE R0,#0,L1
MOV P1,#00000101B ;R0=0, 燈1燈3亮
INC R0
LJMP L
L1: CJNE R0,#1,L2
MOV P1,#00001010B ;R0=1,燈2、4亮
INC R0
LJMP L
L2: CJNE R0,#2,L3
MOV P1,#50H ;R0=2,燈5燈7亮
INC R0
LJMP L
L3: CJNE R0,#3,L4
MOV P1,#0A0H ;R0=3,燈6燈8亮
INC R0 LJMP L
L4: CJNE R0,#4,L5
MOV P1,#55H ;R0=4,燈1燈3亮
INC R0
LJMP L
L5: CJNE R0,#5,L6
MOV P1,#0AAH ;R0=5,燈2,4,6,8亮
INC R0
LJMP L;時間到,判斷哪個燈亮
L6: CJNE R0,#6,L7
MOV P1,#0FFH ;R0=6,燈全亮
INC R0
LJMP L
L7: MOV P1,#00H ;R0=7,燈全滅
MOV R0,#0 ;R0清零,一下循環計數
LJMP L
L:CLR TF0 ;中斷溢出標志清零
RETI ;中斷返回
END
④硬件連線
圖 5-8 LED彩燈循環顯示Proteus電路圖
⑤結果分析:彩燈控制,通過對延時程序時間大小進行修改可以改變燈流轉的快慢。
5.4 A/D、D/A轉換實驗5.4.1 小鍵盤指定波形輸出
1、 實驗內容
小鍵盤給定(并顯示工作狀態),選擇信號源輸出波形類型(D/A轉換方式),經過A/D采樣后,將采樣數據用LED燈,顯示當前模擬信號值大小及變化狀態。
2、實驗程序設計及硬件實現
①原理闡述:單片機與DAC0832接口有直通方式、單緩沖方式和雙緩沖三種方式。直通工作方式不能直接與系統的數據總線連接,需要另加鎖存器,而單緩沖方式對于只有一路模擬量輸出或者雖有多路模擬量但并不要求輸出同步的情況,可以采用單緩沖方式。本實驗正屬于此類情況,選擇單緩沖方式。
②方案設計與論證
選用DAC0832作為DA轉換芯片單緩沖工作方式,功放選擇U3:A, DAC0832的數據端D0~D0與單片機的P0口相連。這里不采用4*4鍵盤,而是用四個選擇鍵按鈕代替小鍵盤,用于選擇三角波、方波、正弦波三種波形選擇,將其通過P2口作為輸入。9C51單片機用來執行某一波形發生程序,向D/A轉換器的輸入端發送數據,將其轉化成模擬量,并通過運算放大器調節波形的幅值,而在輸出端得到所需的波形。P2.0所接按鍵為產生“三角波”鍵;P1.1所接按鍵為產生“鋸齒波”鍵;P2.2所接按鍵為產生“方波”按鍵,P2.3所接按鍵為產生“正弦波”按鍵。并用P0口外接LED燈,實時顯示模擬量電壓的大小。硬件如圖5-9。
圖 5-9 D/A轉換之波形發生實驗Proteus仿真電路圖
③實驗流程圖
圖 4-10 D/A轉換之波形發生器流程圖
④實驗程序:
/*****************正弦波代碼************/
TABLE:
DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H
DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB 0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E3H
DB 0DAH,0D1H,0C7H,0BCH,0B1H,0A5H,99H,8CH
DB 80H,73H,67H,5BH,4FH,43H,39H,2EH
DB 25H,1DH,15H,0FH, 09H,05H,02H,00H
DB 00H,00H,02H,05H,09H, 0EH,15H,1CH
DB 25H,2EH,38H,43H,4EH, 5AH,66H,73H
/**************主程序********************/
DAC0832 EQU 00H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV P2,#0FFH
JNB P2.0,TGUL ; P2.1=0三角波輸出
JNB P2.1,JUCHI ; P2.1=0矩形波輸出
JNB P2.2,SQUARE ; P2.2=0方波輸出
JNB P2.3, SIN ;P2.3=0正弦波輸
TGUL: MOV R0,#0ffH ;產生三角波
MOV A,#00H
MOV DPTR,#DAC0832
CC: MOVX @DPTR,A
NOP
NOP
NOP
INC A
CJNE A,#0FFH,CC
DD: MOVX @DPTR,A
MOV P1,A ;模擬量輸出
NOP
NOP
NOP
DEC A
CJNE A,#00H,DD
DJNZ R0,CC
LJMP MAIN ;返回主程序
/*****方波程序************/
SQUARE: MOV DPTR,#DAC0832
LP2: MOV A,#0FFH
MOVX @DPTR,A
MOV P1,A ;模擬量輸出
ACALL DELAY
MOV A,#00H
MOVX @DPTR,A
MOV P1.A
ACALL DELAY
AJMP LP2
LJMP MAIN
/*********************鋸齒波*************/
JUCHI: MOV R1,#0
JL1:MOV A,R1
MOV DPTR,#DAC0832
MOVX @DPTR,A ;輸出
MOV P1,A
MOV A,R1
ADD A,#4 ;步長為四
MOV R1,A
NOP
JNZ JL1
LJMP MAIN
/***************正弦波*********************/
SIN: MOV R1,#63H
MOV DPTA,#TABLE
MOV A,R1
MOVC A,@A+DPTR ;查正弦碼
MOV DPTR,#DAC0832
MOVX @DPTR,A ;輸出
MOV P1,A
NOP
DJNZ R1,SIN
LJMP MAIN
/********延時程序*********/
DELAY: MOV R0,#10H
MOV R1,#05FH
L1: DJNZ R1,L1
NOP
MOV R1,#0FFH
DJNZ R0,L1
RET
END
⑤實驗結果及分析:
本實驗結果如圖5-11(這里僅給出三角波與鋸齒波部分)
圖中右邊的燈泡實時顯示模擬量的大小。仿真示波器的熟練跳整及使用是完成能否完成這個實驗的重點。示波器的掃描時間,幅值的大小均需要耐心調整,直至出現波形為止。當你打開示波器顯示波形的窗口時很有可能并不是最佳顯示狀態,甚至連所測信號的波形都看不到,這就牽涉到示波器的調整問題,其調整方法和使用真實的示波器幾乎完全一樣。弄清楚示波器上各個按鈕的作用后細調即可。
實驗中,延時程序時間長短的設置也是本實驗的一個重點,如果時間過短,波形變化太快,示波器采集顯示時可能看不到,太慢,變化也較慢,應適當調整。
本次正弦波,采用的正弦波碼較為簡單,所生成的正弦波精度不夠,如果需要更高級別的精度,可以將正弦波碼。
圖 5-11 D/A轉換之波形發生實驗Proteus結果(三角波部分)
圖 5-12 D/A轉換之波形發生實驗Proteus結果(鋸齒波部分)
5.5串行通訊實驗5.5.1.單片機與PC通信
1. 實驗內容
利用單片機實驗系統,實現與PC機通訊。功能要求:將從實驗系統鍵盤上鍵入的數字,字母顯示到PC機顯示器上,將PC機鍵盤輸入,的字符(0-F)顯示到單片機實驗系統的數碼管上。
2. 實驗原理
ST公司提供的SSTEasyIAP11F軟件,為SST單片機的用戶提供了通過IAP技術把用戶應用程序下載到單片機的程序存儲器或者從單片機的程序存儲器讀出用戶應用程序的方法。當單片機內部的系統程序為啟動加載程序時,用戶可以通過SSTEasyIAP11F??軟件,將得到的目標代碼(*.HEX)下載到單片機內部的FLASH中,系統復位后,單片機便會全速執行用戶程序。目標代碼下載的具體步驟如下: a、運行軟件SSTEasyIAP11F, b、點擊‘Detect?Chip/RS?232’ c、點擊“Detect??Target??MCU??for??Firmware1.1F??and??RS232??Config.”選項出現芯片選擇和存儲器模式窗口。芯片類型選擇“SST89E554RC”,存儲器模式選擇“Internal?Memory”,選擇完后點擊“OK”按鈕。然后可以看到RS232?配置與目標檢測窗口。d、直接點擊“Detect??MCU”按鈕,會彈出?相關信息,點擊“確定”按鈕后按系統的復位鍵來復位MCU??以檢測波特率和芯片。e、檢測成功后,可以看到檢測后的信息。在IAP?Function功能框中選擇Download,以下載目標代碼。隨后會彈出密碼校驗對話框,直接點擊“OK”??即可。f、彈出下載對話框,點擊按鈕“…”來選擇要下載的文件,下載完成后,可以脫機運行程序了。 在SST??單片機內部固化了Soft?ICE后,便可以實現51系統板與Keil?C51集成開發環境的聯機調試。要求SoftICE554.hex文件與SSTEasyIAP11F?軟件在同一目錄下。具體步驟如下:a、?同下載目標代碼到單片機的步驟1~5,使用SSTEasyIAP11F軟件必須先檢測MCU。b、點擊菜單欄的“Soft?ICE”,彈出下拉菜單“Download?Soft?ICE”,然后點擊選項。c、同樣會彈出密碼校驗對話框,直接按“OK”,信息提示這將會刪除IAP引導程序。d、選擇“是”,開始下載Soft?ICE,下載完成會提示完成信息。e、完成Soft?ICE?下載,便可以開始與Keil?C51聯機調試了。當需要將目標代碼*.Hex文件下載到單片機脫機運行而系統程序還是Soft?ICE時,就需要通過Convert_to_BSLx554.txt文件將系統程序從SoftIC切換回IAP引導加載程序。具體操作步驟如下:a、啟動Keil?C51進入聯機調試狀態。b、得到Convert_to_BSLx554.txt文件的路徑,在輸出窗口的Command頁的命令行內輸?入“Include??C:\Keil\Convert_to_BSLx554.txt”命令后回車。c、耐心等待(這需要較長的時間),當出現如圖4-12所示信息時表示已成功的從SoftICE??返回IAP??引導程序了。
d、可以運行SSTEasyIAP11F?軟件,檢測MCU,以確保IAP引導程序寫入成功。然后便可以下載目標代碼了。a、創建Keil?C51應用程序。運行Keil?C51軟件,進入Keil?C51集成開發環境;b、選擇工具欄的project喧囂,選擇NewProject命令,建立一個新的μVision2工程。選擇工程目錄并輸入文件名后,單擊保存。3、工程建立完畢后,μVision2會馬上彈出器件選擇窗口。器件選擇的目的是告訴μVision2使用的80C51芯片的型號是哪一個公司的哪一個型號,不同型號的51芯片內部資源是不同的。此時選擇SST公司的SST89E554RC。另外,可以選擇Project下拉菜單中的“Select?Device?for?Target?‘Target?1’”命令來彈出器件選擇對話框。4、到此,建立好一個空白工程,現在需要人工為工程添加程序文件,如果還沒有程序文件則必須建立它。選擇工具欄的File選項,在彈出的下拉菜單中選擇New目錄,或點擊
第6章 試驗心得本次試驗分為軟件部分與硬件部分,軟件部分實驗時加強了以前微機所學的匯編語言,更掌握了C語言在單片機中的應用。硬件部分更是將理論應用于實際,我更好的懂的了部分單片機的內部系統結構、外圍芯片的運行原理及應用方法。要想設計一個系統首先需要要有一個清晰的思路和一個完整的的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,必須進行反復修改調試。
單片機的匯編語言是和單片機緊密相關的語言,且和其硬件密切相關的。要想知道自己的匯編程序是否正確,是否能真正的在機器上運行起來,不僅僅只是進行模擬調試,還得運行到單片機中實時監測。所用通過這次單片機實習,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去培養我們的創新精神,從而不斷地戰勝自己,超越自己。創新可以是在原有的基礎上進行改進,使之功能不斷完善,成為真己的東西。
單片機實習報告篇3
單片機實習目的示例
實習是大學生活的第二課堂,是知識常新和發展的源泉,是檢驗真理的試金石,也是大學生鍛煉成長的有效途徑。以下是單片機實習目的示例,歡迎閱讀!
單片機實習目的示例一
一、實習目的與任務
1.熟悉并掌握單片機芯片的應用方法;
2.掌握單片機應用系統一般的設計過程;
二、實習內容
1.通過電位器給定外部電壓信號;
2.通過TLC2543檢測并顯示在8位數碼管的右四位;
3.利用TLC5615分析檢測的得到的電壓是否準確,檢測電壓顯示在數碼管的左四位;
4.利用串口位系統設置上下限,并有超限報警;
5.利用Proteus復現該系統。
單片機實習目的示例二
一、生產實習的目的和意義:
生產實習是培養本科學生理論聯系實際,提高實際動手操作能力的重要教學環節。本專業的生產實習旨在使學生廣泛了解實際電子產品生產的全過程,熟悉電子產品的主要技術管理模式,并在實習的操作過程中學習、掌握電子產品的焊接、安裝、調試的實際操作技能。鞏固和加深理解所學的理論,開闊眼界,提高能力,為培養高素質大學本科人才打下必要的基礎。通過學習,是理論與實際相結合,可以使學生加深對所學知識的理解,并為后續專業課的學習提供必要的感性知識,同時使學生直接了解本業的生產過程和生產內容,為將來走上工作崗位提供必要的實際生產知識。
二、實習的基本內容:
1、集中授課,進行相關知識的學習。
2、學習、掌握電子產品的獨立性設計與安裝、調試的能力;進一步掌握電子測量儀器的正確使用方法,電元器件的測量與篩選技術。
3、初步了解電子整機產品的工藝過程。
4、為能使學生得到充分的鍛煉,較大的提高學生的實際動手能力,本次生產實習安排每一位學生獨立完成全部系統的設計與安裝工作。
5、本實習環節,學生要獨立使用電焊鐵及各種電子測試設備電路安裝與調試,要學生嚴格遵守電器設備的使用安全,遵守實驗室的各項規章制度。
單片機實習目的示例三
課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新日異,單片機已經成為當今計算機應用中空前活躍的領域, 在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發技術是十分重要的。
回顧起此次單片機課程設計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說三極管PNP管腳不懂怎么放置,不懂分得二極管的正負極,對單片機匯編語言掌握得不好通過這次課程設計之后,一定把以前所學過的知識重新溫故。這次課程設計終于順利完成了,在設計中遇到了很多編程問題,最后在梁強老師的辛勤指導下,終于游逆而解。同時,在梁強老師的身上我學得到很多實用的知識,在次我表示感謝!
單片機實習報告篇4
專業綜合實習總結
2010-2011(2)
專業班級: 電子信息工程
學生學號:
學生姓名:
指導教師:
實習時間:
機 電 工 程 學 院
一、實習目的和意義
1、實習目的:
(1)利用單片機小系統實習板,掌握電路原理圖;
(2)通過對系統板的測試,了解系統板的工作原理及性能,掌握元器件及系統故障的排除方法;
(3)通過單片機系統的調試、程序編制及運行,掌握單片機系統的工作原理、開發方法和操作方法。
2、實習意義:
通過本實習不但可以掌握單片機軟、硬件的綜合調試方法,而且可以熟練掌握電路原理圖,激發對單片機智能性的探索精神,提高學生的綜合素質,培養學生應用單片機實現對工業控制系統的設計、開發與調試的能力。在制作學習過程中,不但可以掌握軟、硬件的綜合調試方法,而且可以使學生對單片機智能性產生強烈的欲望。達到最大限度地掌握微機應用技術,軟件及接口設計和數據采集與處理的技能,培養電綜合實踐素質的目的。
二、實習內容
1.熟悉“單片機課程實習”電路板,領會、掌握該電路板的設計原理及硬件布局。
2.掌握單片機技術應用平臺keil軟件的學習。
3.借助平臺軟件,學習開發板的使用,按照要求編制、調試出正確的匯編語言程序。
4.學習適合本開發平臺軟件STC-ISP的在線單片機燒錄。
5.針對實習電路板的功能,編制、調試、編譯匯編語言程序,下載燒錄并在實驗板上運行,或利用軟件ISIS 7 Professional進行軟件仿真。
實現的功能:
1.led顯示模塊:單向循環流水led顯示、雙向循環流水led顯示、花樣流水燈的顯示,使用查表方法編制任意點亮歷程的實現,使用軟件延時;
2.數碼管顯示模塊:一位靜態數碼管顯示0到9和0到F、二位靜態數碼管顯示0到99、三位靜態數碼管顯示0到999、四位靜態數碼管顯示0到9999;陰極和陽極四位動態數碼管顯示;74LS驅動4位靜態數碼管顯示;利用74HC595四位靜態數碼管顯示;使用串行靜態顯示和動態掃描顯示兩種方式;
3.鍵盤模塊:利用4×4矩陣鍵盤按鍵對應置數顯示“0~F”;使用鍵盤的行列掃描方式;
三、硬件介紹
(一)LED顯示模塊:
圖1 流水燈顯示
圖2 鍵盤控制循環燈
(二)數碼管顯示模塊:
圖3 1位靜態數碼管顯示
圖4 4位靜態數碼管顯示
圖5 4位動態數碼管顯示
圖6 獨立鍵盤加減清零數碼管顯示
圖7 4位74LS驅動靜態數碼管顯示
圖8 4位74HC595靜態顯示
圖9 0到F矩陣鍵盤
四、軟件程序流程圖
1、流水燈循環左移右移程序框圖:
2、0到F一位靜態顯示程序框圖:
3、0到9一位靜態顯示程序框圖:
4、動態數碼顯示程序框圖:
5、4×4矩陣矩陣鍵盤數碼顯示程序框圖:
主程序圖:
判別是否有鍵按下程序:
五、 實習的心得體會
回顧起此次課程設計,感覺受益匪淺,從拿到題目到完成整個編程,從理論到實踐,學到很多很多的課堂理論中沒學到過的東西,不僅對鍵盤的識別技術這一章節的知識點有了深刻的認識,而且對這學期開設的單片機這門課程有了更全面的了解,尤其是在學習使用proteus軟件片編程和仿真時收獲良多。通過這次單片機課程設計,還使我懂得了實踐的重要性。同時在程序調試的過程中提高自己的發現問題、解決問題、實際動手和獨立思考的能力。
本次單片機實習我們一共完成了三個模塊的程序設計,包括:led顯示模塊、數碼管顯示模塊和鍵盤模塊。分別實現了流水燈的循環點亮控制、數碼管的靜態和動態計數顯示,還有矩陣鍵盤按鍵控制數碼管顯示的程序設計。然后我們分別用protues系統仿真軟件對各個模塊進行了模擬仿真,用keil軟件編制了匯編語言程序,驗證了我們所設計的程序。
當然,這其中也有很多問題,第一、不夠細心比如由于粗心大意焊錯了線,由于對課本理論的不熟悉導致編程出現錯誤。第二,是在學習態度上,這次課設是對我的學習態度的一次檢驗。對于這次單片機綜合課程實習,我的第一大心得體會就是作為一名工程技術人員,要求具備的首要素質絕對應該是嚴謹。我們這次實習所遇到的多半問題多數都是由于我們不夠嚴謹。第三,在做人上,我認識到,無論做什么事情,只要你足夠堅強,有足夠的毅力與決心,有足夠的挑戰困難的勇氣,就沒有什么辦不到的。 通過這次單片機實習,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去培養我們的創新精神,從而不斷地戰勝自己,超越自己。創新可以是在原有的基礎上進行改進,使之功能不斷完善,成為真己的東西。
這次課程設計能順利的完成,除了我們的努力外,當然也離不開指導老師申老師的辛勤指導,致使我在設計的過程中學到了很多實用性的知識。同時,對給過我幫助的所有同學和各位指導老師表示忠心的感謝!
附錄:程序清單
P1口閃亮:ORG 0000H
LOOP:MOV P1,#01H
ACALL DELAY
MOV P1,#00H
ACALL DELAY
SJMP LOOP
DELAY:MOV R7,#250
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
END
流水燈循環左移右移:
方法一:ORG 0000H
MOV A,#01H
LOOP: MOV P1,A
MOV R5,#10
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
RL A
JB ACC.7, LOOP2
SJMP LOOP
LOOP2:MOV P1,A
MOV R5,#10
LOOP3:ACALL DELAY
DJNZ R5,LOOP3
RR A
JB ACC.0,LOOP
SJMP LOOP2
DELAY:MOV R7,#250
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
END
方法二:ORG 0000H
MOV A,#80H
LOOP:RL A
MOV P1,A
ACALL DELAY
CJNE A,#80H,LOOP
LOOP1:RR A
MOV P1,A
ACALL DELAY
CJNE A,#01H,LOOP1
SJMP LOOP
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法三:ORG 0000H
MOV A,#80H
MOV R0,#08H
LOOP:RL A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP
MOV R0,#07H
LOOP1:RR A
MOV P1,A
ACALL DELAY
DJNZ R0,LOOP1
MOV R0,#07H
SJMP LOOP
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法四:ORG 0000H
MOV A,#00H
SETB CY
LOOP:RLC A
JC LOOP1
MOV P1,A
ACALL DELAY
SJMP LOOP
LOOP1:RRC A
JC LOOP
MOV P1,A
ACALL DELAY
SJMP LOOP1
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
從中間向兩邊,再從兩邊向中間循環點亮: ORG 0000H
STAR:MOV R0,#00H
MOV R1,#07
MOV A,R0
MOV DPTR,#TAB
LOOP: MOVC A,@A+DPTR
MOV P1,A
MOV R5,#10
LOOP1:ACALL DEL
DJNZ R5,LOOP1
INC R0
MOV A,R0
DJNZ R1,LOOP
SJMP STAR
DEL:MOV R7,#200
DEL1:MOV R6,#250
DJNZ R6,$
DJNZ R7,DEL1
RET
TAB:DB 18H,24H,42H,81H,42H,24H,18H
END
鍵盤控制流水燈循環點亮:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ET
ORG 0030H
MAIN:MOV SP,#60H
SETB EA
SETB IT0
SETB EX0
CLR C
MOV A,#0FFH
MOV P2,A
LCALL DEL
LOOP:JNB 21H.1,L ;檢測標志
RRC A ;右移動
MOV P2,A
AJMP DEE
L: RLC A ;左移動
MOV P2,A
DEE: LCALL DEL
AJMP LOOP
ET: CLR EA
PUSH ACC
PUSH PSW
LCALL DELAY
MOV A,#0FFH
MOV P1,A
NOP
NOP
MOV A,P1 ;讀鍵值
ANL A,#0F0H
CJNE A,#0F0H,NEXT1
AJMP NEXT
NEXT1:JB ACC.5,NEXT2
CLR 21H.1 ;按鍵后產生標志
AJMP NEXT
NEXT2:JB ACC.6,NEXT
SETB 21H.1 ;按鍵后產生標志
NEXT: SETB EA
POP PSW
POP ACC
HHH: RETI
DEL:MOV R6,#250
DEL11:MOV R5,#250
DJNZ R5,$
DJNZ R6,DEL11
RET
DELAY:MOV R6,#10
DEL1: MOV R5,#200
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
END
花樣流水燈:
ORG 0000H
START:MOV R0,#00H
MOV P1,#00H
LOOP:MOV A,R0
ADD A,#0CH
MOVC A,@A+PC
CJNE A,#01H,XSH
SJMP START
XSH:MOV P1,A
ACALL DELAY
INC R0
SJMP LOOP
DB0FFH,00H,0FFH,00H,0FFH,00H,0FFH,00H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0FH
DB0F0H,0FH,0F0H,0AAH,55H,0AAH,55H,0AAH,55H,0AAH,55H,0AAH,55H,81H,42H
DB24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H,42H,24H,18H,24H,42H,81H
DB42H,24H,18H,24H,42H,81H,03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH
DB06H,03H,06H,0CH,18H,30H,60H,0C0H,60H,30H,18H,0CH,06H,03H,01H
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
1位靜態數碼顯示:
ORG 0000H
MOV R0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P0,A
ACALL DELAY
SJMP DISPLY
DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
2位靜態數碼顯示:
ORG 0000H
MOV R0,#0FFH
MOV R1,#00H
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
INC R1
CJNE R1,#0AH,DISPLY2
MOV R0,#0FFH
MOV R1,#00H
MOV P0,#0FFH
AJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#10H
MOVC A,@A+PC
MOV P0,A
MOV R0,#0FFH
AJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P2,A
ACALL DELAY
AJMP DISPLY
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY:MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
3位靜態數碼顯示:
ORG 0000H
START: MOV R0,#0FFH
MOV R1,#00H
MOV R2,#00H
MOV P3,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
INC R1
CJNE R1,#0AH,DISPLY2
MOV R1,#00H
MOV P2,#0C0H
INC R2
CJNE R2,#0AH,DISPLY3
SJMP START
DISPLY3:MOV A,R2
ADD A,#16H
MOVC A,@A+PC
MOV P0,A
SJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#0EH
MOVC A,@A+PC
MOV P2,A
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P3,A
ACALL DELAY
SJMP DISPLY
DTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY: MOV R7,#0FFH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
4位靜態數碼顯示:
ORG 0000H
START: MOV R0,#0FFH
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV P1,#0FFH
MOV P3,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
DISPLY: INC R0
CJNE R0,#0AH,DISPLY1
MOV R0,#0FFH
INC R1
CJNE R1,#0AH,DISPLY2
MOV R1,#00H
MOV P3,#0C0H
INC R2
CJNE R2,#0AH,DISPLY3
MOV R2,#00H
MOV P2,#0C0H
INC R3
CJNE R3,#0AH,DISPLY4
SJMP START
DISPLY4:MOV A,R3
ADD A,#1EH
MOVC A,@A+PC
MOV P0,A
SJMP DISPLY
DISPLY3:MOV A,R2
ADD A,#16H
MOVC A,@A+PC
MOV P2,A
SJMP DISPLY
DISPLY2:MOV A,R1
ADD A,#0EH
MOVC A,@A+PC
MOV P3,A
SJMP DISPLY
DISPLY1:MOV A,R0
ADD A,#06H
MOVC A,@A+PC
MOV P1,A
ACALL DELAY
SJMP DISPLY
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
DELAY: MOV R7,#0AH
DELAY1:MOV R6,#0FFH
DELAY2:MOV R5,#03H
DELAY3:DJNZ R5,DELAY3
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
74HC595四位穩定顯示:
1)最大數為9999的計數器
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CRT0
ORG 0020H
MAIN:MOV R1,#33H
MOV R2,#04H
CLEAR:MOV @R1,#33H
DEC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#1
MOV DPTR,#DTAB
LOOP: MOV R1,#33H
MOV R2,#04H
MOV R3,#08H
MOV R4,#01H
LOOP1:MOV A,R3
MOV P2,A
RR A
MOV R3,A
MOV A,@R1
CJNE R4,#00H,MODE
XSH: LCALL DIS
LCALL DEL
DEC R1
DJNZ R2,LOOP1
AJMP LOOP
MODE: CJNE A,#00H,FH
MOV R4,#01H
MOV A,#0AH
SJMP XSH
FH: MOV R4,#00H
SJMP XSH
CRT0: DJNZ R7,RRR
MOV R7,#1
INC 30H
MOV R0,30H
CJNE R0,#0AH,RRR
MOV 30H,#00H
INC 31H
MOV R0,31H
CJNE R0,#0AH,RRR
MOV 31H,#00H
INC 32H
MOV R0,32H
CJNE R0,#0AH,RRR
MOV 32H,#00H
INC 33H
MOV R0,33H
CJNE R0,#0AH,RRR
MOV 33H,#00H
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DIS: MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
2)最高位為零時,最高位不顯示
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CRT0
ORG 0020H
MAIN: MOV R1,#33H
MOV R2,#04H
CLEAR: MOV @R1,#00H
DEC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#1
MOV DPTR,#DTAB
LOOP: MOV R1,#33H
MOV R2,#04H
MOV R3,#08H
LOOP1: MOV A,R3
MOV P2,A
RR A
MOV R3,A
MOV A,@R1
LCALL DIS
LCALL DEL
DEC R1
DJNZ R2,LOOP1
AJMP LOOP
CRT0: DJNZ R7, RRR
MOV R7,#1
MOV R0,#30H
MOV R4,04H
CON: INC @R0
CJNE @R0,#0AH,RRR
MOV @R0,#00H
INC R0
DJNZ R4,CON
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DIS: MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
3)最大數為256的計數器
DAT DATA 30H
BW DATA 31H
SHW DATA 32H
GW DATA 33H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP COUNT
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R7,#2
MOV DAT,#00H
LOOP: LCALL CHANGE
MOV P2,#01H
MOV A,GW
LCALL DIS
LCALL DEL
MOV P2,#02H
MOV A,SHW
LCALL DIS
LCALL DEL
MOV P2,#04H
MOV A,BW
LCALL DIS
LCALL DEL
MOV P2,#08H
MOV A ,#0AH
LCALL DIS
LCALL DEL
AJMP LOOP
COUNT: DJNZ R7,RRR
MOV R7,#2
INC DAT
RRR: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
CHANGE: MOV A,DAT
MOV B,#100
DIV AB
MOV BW,A
MOV A,#10
XCH A,B
DIV AB
MOV SHW,A
MOV GW,B
RET
DIS: MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
DEL: MOV R6,#20
DEL1: MOV R5,#150
DEL2: DJNZ R5,$
DJNZ R6,DEL1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
END
74LS4位靜態數碼顯示:
方法一:ORG 0000H
MOV R3,#04H
MOV R0,#20H
START:LCALL DISPLAY
LCALL COUNT
LCALL DELAY
SJMP START
COUNT:INC @R0
CJNE @R0,#0AH,DON
MOV @R0,#00H
SHW: INC R0
INC @R0
CJNE @R0,#0AH,DE1
MOV @R0,#00HBW: INC R0
INC @R0
CJNE @R0,#0AH,DE2
MOV @R0,#00H
QW: INC R0
INC @R0
CJNE @R0,#0AH,DE3
MOV @R0,#00H
DE3: DEC R0
DE2: DEC R0
DE1: DEC R0
DON: RET
DISPLAY:MOV SCON,#00H
LOOP:MOV A,@R0
ADD A,#0FH
MOVC A,@A+PC
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R3,LOOP
MOV R3,#04H
MOV R0,#20H
DON1:RET
DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
DELAY:MOV R7,#50
DELAY1:MOV R6,#100
DELAY2:MOV R5,#20
DJNZ R5,$
DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
END
方法二:ORG 0000H
AJMP MAIN
ORG 000BH
AJMP COUNT
ORG 0020H
MAIN: MOV R1,#30H
MOV R2,#04H
CLEAR:MOV @R1,#00H
INC R1
DJNZ R2,CLEAR
MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#0B0H
SETB EA
SETB ET0
SETB TR0
MOV R3,#3
MOV DPTR,#DTAB
MOV SCON,#00H
DISPLY:MOV R1,#30H
MOV R2,#04H
LOOP:MOV A,@R1
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
INC R1
DJNZ R2,LOOP
ACALL DEL
SJMP LOOP
COUNT:DJNZ R3,RRR
MOV R3,#3
MOV R0,#30H
MOV R4,#04H
CON:INC @R0
CJNE @R0,#0AH,RRR
MOV @R0,#00H
INC R0
DJNZ R4,CON
RRR:MOV TH0,#3CH
MOV TL0,#0B0H
RETI
DEL:MOV R6,#250
DEL1:MOV R5,#250
DEL2:DJNZ R5,$
DJNZ R6,DEL1
RET
DTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
END
動態數碼顯示:ORG 0000H
ACALL START
START1: MOV @R0,#00H
INC R0
DJNZ R2,START1
ACALL START2
COUNT: CJNE @R0,#0AH,ACALLDIS
MOV @R0,#00H
INC R0
INC @R0
CJNE R0,#34H,COUNT
ACALL START
AJMP START1
ACALLDIS:ACALL DISPLAY
INC @R0
AJMP COUNT
DISPLAY: ACALL START
MOV R4,#01H
DISPLAY1:MOV A,@R0
MOV DPTR,#DTAB
MOVC A,@A+DPTR
MOV P0,A
INC R0
MOV A,R3
MOV P2,A
RL A
MOV R3,A
ACALL DELAY
DJNZ R2,DISPLAY1
ACALL START
DJNZ R4,DISPLAY1
RET
DTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H,00H,0F3H,76H,80H,40H
START:MOV R3,#0FEH
START2:MOV R0,#34H
MOV R2,#04H
RET
DELAY:MOV R7,#088H
DEL1:MOV R6,#88H
DEL2:MOV R5,#01H
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
獨立鍵盤加減清零數碼顯示:
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar numt0,num;
void display(numdis)
{uchar shi,ge;
shi=numdis/10;
ge=numdis%10;
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
delayms(5);
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
delayms(5);}
void delayms(uint x)
{uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);}
void init()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;}
void keyscan()
{if(key1==0)
{delayms(10);
if(key1==0)
{num++;
if(num==60)
num=0;
while(!key1);}}
if(key2==0)
{delayms(10);
if(key2==0)
{ if(num==0)
num=60;
num--;
while(!key2); }}
if(key3==0)
{delayms(10);
if(key3==0)
{num=0;
while(!key2);}}
if(key4==0)
{delayms(10);
if(key4==0)
{ while(!key4);
TR0=~TR0;}}}
void main()
{init();
while(1)
{keyscan();
display(num);}}
void T0_time() interrupt 1
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
numt0++;
if(numt0==20)
{numt0=0;
num++;
if(num==60)
num=0;}}
矩陣鍵盤0到F顯示:
KEY_DATA DATA 30H
ORG 0000H
MOV KEY_DATA,#10H
AJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H
LOOP:LCALL SCAN
MOV A,KEY_DATA
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LCALL DEL
AJMP LOOP
SCAN:MOV A,#0FH
MOV P1,A
MOV A,P1
CJNE A,#0FH,KEYSCAN
RET
KEYSCAN:LCALL DEL
MOV R2,#7FH
MOV R3,#4
MOV R0,#00H
KEYSM1:MOV A,R2
MOV P1,A
RR A
MOV R2,A
MOV A,P1
ANL A,#0FH
CJNE A,#0FH,JSADD
INC R0
DJNZ R3,KEYSM1
RET
JSADD: JB ACC.0,JSADD1
MOV A,#0
AJMP JSADD4
JSADD1:JB ACC.1,JSADD2
MOV A,#4
AJMP JSADD4
JSADD2:JB ACC.2,JSADD3
MOV A,#8
AJMP JSADD4
JSADD3:JB ACC.3,JSADD4
MOV A,#12
JSADD4:ADD A,R0
MOV KEY_DATA,A
DEL: MOV R6,#50
DEL1: MOV R5,#200
DJNZ R5,$
DJNZ R6,DEL1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH
END
單片機實習報告篇5
單片機實習報告范文3篇本文目錄單片機實習報告范文單片機生產實習報告單片機課程設計實習報告這次實習我們使用控制電路的單片機是at89s51型號的。通過它實現對八盞雙色燈發光二極管的控制p0和p2口控制四盞燈。在at89s51的9引腳接復位電路,對電路實現復位控制。在電路中接入74s164譯碼器和共陰極數碼管,通過at89s51的p3口數據的輸入對共陰極數碼管的控制。同時也可實現雙色發光的二極管與共陰極數碼管的共同作用。在at89s51的p3.2口接上中斷控制電路,p3.5口接入蜂鳴器,使電路實現中斷作用,也使電路便于檢測。盡量朝"單片"方向設計硬件系統。系統器件越多,器件之間相互干擾也越強,功耗也增大,也不可避免地降低了系統的穩定性。系統中的相關器件要盡可能做到性能匹配。如選用cmos芯片單片機構成低功耗系統時,系統中所有芯片都應盡可能選擇低功耗產品。硬件電路設計:
1確保硬件結構和應用軟件方案相結合。硬件結構與軟件方案會相互影響,軟件能實現的功能盡可能由軟件實現,以簡化硬件結構。必須注意,由軟件實現的硬件功能,一般響應時間比硬件實現長,且占用cpu時間;
2可靠性及抗干擾設計是硬件設計必不可少的一部分,它包括芯片、器件選擇、去耦濾波、印刷電路板的合理布線、各元器相互隔離等;
3盡量朝"mcs-51單片"方向設計硬件系統。系統器件越多,器件
之間相互干擾也越強,所消耗功耗也增大,也不可避免地降低了系統的穩定性;
4系統中的相關器件要盡可能做到性能匹配。如選用cmos芯片單片機構成低功耗系統時,系統中所有芯片都應盡可能選擇低功耗產品。
1.1單片機型號及特性
單片機型號是at89s51。特性是:⑴8031cpu與mcs-51⑵兼容4k節可編程flash存儲器(壽命:1000寫/擦循環⑶全靜態工作:0hz-24khz⑷三級程序存儲器保密鎖定⑸128*8位內部ram⑹32條可編程i/o線⑺兩個16位定時器/計數器⑻6個中斷源⑼可編程串行通道⑽低功耗的閑置和掉電模式⑾片內振蕩器和時鐘電路1.2晶振電路
單片機晶振的兩個電容的作用這兩個電容叫晶振的負載電容,分別接在晶振的兩個腳上和對地的電容,一般在幾十皮發。它會影響到晶振的諧振頻率和輸出幅度,晶振的負載電容=[(cd*cg/(cd+cg]+cic+△c式中cd,cg為分別接在晶振的兩個腳上和對地的電容,cic(集成電路內部電容)+△c(pcb上電容)經驗值為3至5pf。各種邏輯芯片的晶振引腳可以等效為電容三點式振蕩器。晶振引腳的內部通常是一個反相器,或者是奇數個反相器串聯。在晶振輸出引腳xo和晶振輸入引腳xi之間用一個電阻連接,對于cmos芯片通常是數m到數十m歐之間.很多芯片的引腳內部已經包含了這個電阻,引腳外部就不用接了。這個電阻是為了使反相器在振蕩初
始時處與線性狀態,反相器就如同一個有很大增益的放大器,以便于起振.石英晶體也連接在晶振引腳的輸入和輸出之間,等效為一個并聯諧振回路,振蕩頻率應該是石英晶體的并聯諧振頻率.晶體旁邊的兩個電容接地,實際上就是電容三點式電路的分壓電容,接地點就是分壓點.以接地點即分壓點為參考點,振蕩引腳的輸入和輸出是反相的,但從并聯諧振回路即石英晶體兩端來看,形成一個正反饋以保證電路持續振蕩.在芯片設計時,這兩個電容就已經形成了,一般是兩個的容量相等,容量大小依工藝和版圖而不同,但終歸是比較小,不一定適合很寬的頻率范圍.外接時大約是數pf到數十pf,依頻率和石英晶體的特性而定.需要注意的是:這兩個電容串聯的值是并聯在諧振回路上的,會影響振蕩頻率.當兩個電容量相等時,反饋系數是0.5,一般是可以滿足振蕩條件的,但如果不易起振或振蕩不穩定可以減小輸入端對地電容量,而增加輸出端的值以提高反饋量。電路如圖所示1.3復位電路
單片機在開機時或在工作中因干擾而使程序失控,或工作中程序處于某種死循環狀態等情況下都需要復位。復位作用是使cpu以及其他功能部件,如串行口,中斷都恢復到一個確定初始狀態,并從這個狀態開始工作。
復位電路有兩種:上電、按鈕復位,考慮到各部件影響,采用按鈕復位,當電阻給電容充電,電容的電壓為高電平,當按下按鈕時芯片復位腳近似低電平,于是芯片復位。="subtitle">單片機生產實習報
單片機實習報告篇6
單片機實習報告
單片機實習報告(一)
這次實習我們使用控制電路的單片機是AT89S51型號的。通過它實現對八盞雙色燈發光二極管的控制P0和《單片機實習報告總結》正文開始》這次實習我們使用控制電路的單片機是AT89S51型號的。通過它實現對八盞雙色燈發光二極管的控制P0和P2口控制四盞燈。在AT89S51的9引腳接復位電路,對電路實現復位控制。在電路中接入74S164譯碼器和共陰極數碼管,通過AT89S51的P3口數據的輸入對共陰極數碼管的控制。同時也可實現雙色發光的二極管與共陰極數碼管的共同作用。在AT89S51的P3.2口接上中斷控制電路,P3.5口接入蜂鳴器,使電路實現中斷作用,也使電路便于檢測。盡量朝“單片”方向設計硬件系統。系統器件越多,器件之間相互干擾也越強,功耗也增大,也不可避免地降低了系統的穩定性。系統中的相關器件要盡可能做到性能匹配。如選用CMOS芯片單片機構成低功耗系統時,系統中所有芯片都應盡可能選擇低功耗產品。硬件電路設計:
1)確保硬件結構和應用軟件方案相結合。硬件結構與軟件方案會相互影響,軟件能實現的功能盡可能由軟件實現,以簡化硬件結構。必須注意,由軟件實現的硬件功能,一般響應時間比硬件實現長,且占用CPU時間;
2)可靠性及抗干擾設計是硬件設計必不可少的一部分,它包括芯片、器件選擇、去耦濾波、印刷電路板的合理布線、各元器相互隔離等;
3)盡量朝“MCS-51單片”方向設計硬件系統。系統器件越多,器件之間相互干擾也越強,所消耗功耗也增大,也不可避免地降低了系統的穩定性;
4)系統中的相關器件要盡可能做到性能匹配。如選用CMOS芯片單片機構成低功耗系統時,系統中所有芯片都應盡可能選擇低功耗產品。1.1單片機型號及特性
---文章來源網絡
單片機型號是AT89S51。特性是:⑴8031CPU與MCS-51⑵兼容4K字節可編程FLASH存儲器(壽命:1000寫/擦循環)⑶全靜態工作:0Hz-24KHz⑷三級程序存儲器保密鎖定⑸128*8位內部RAM⑹32條可編程I/O線⑺兩個16位定時器/計數器⑻6個中斷源⑼可編程串行通道⑽低功耗的閑置和掉電模式⑾片內振蕩器和時鐘電路1.2晶振電路
單片機晶振的兩個電容的作用這兩個電容叫晶振的負載電容,分別接在晶振的兩個腳上和對地的電容,一般在幾十皮發。它會影響到晶振的諧振頻率和輸出幅度,晶振的負載電容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C式中Cd,Cg為分別接在晶振的兩個腳上和對地的電容,Cic(集成電路內部電容)+△C(PCB上電容)經驗值為3至5pf。各種邏輯芯片的晶振引腳可以等效為電容三點式振蕩器。晶振引腳的內部通常是一個反相器,或者是奇數個反相器串聯。在晶振輸出引腳XO和晶振輸入引腳XI之間用一個電阻連接,對于CMOS芯片通常是數M到數十M歐之間。很多芯片的引腳內部已經包含了這個電阻,引腳外部就不用接了。這個電阻是為了使反相器在振蕩初始時處與線性狀態,反相器就如同一個有很大增益的放大器,以便于起振。石英晶體也連接在晶振引腳的輸入和輸出之間,等效為一個并聯諧振回路,振蕩頻率應該是石英晶體的并聯諧振頻率。晶體旁邊的兩個電容接地,實際上就是電容三點式電路的分壓電容,接地點就是分壓點。以接地點即分壓點為參考點,振蕩引腳的輸入和輸出是反相的,但從并聯諧振回路即石英晶體兩端來看,形成一個正反饋以保證電路持續振蕩。在芯片設計時,這兩個電容就已經形成了,一般是兩個的容量相等,容量大小依工藝和版圖而不同,但終歸是比較小,不一定適合很寬的頻率范圍。外接時大約是數PF到數十PF,依頻率和石英晶體的特性而定。需要注意的是:這兩個電容串聯的值是并聯在諧振回路上的,會影響振蕩頻率。當兩個電容量相等時,反饋系數是0.5,一般是可以滿足振蕩條件的,但如果不易起振或振蕩不穩定可以減小輸入端對地電容量,而增加輸出端的值以提高反饋量。電路如圖所示1.3復位電路
---文章來源網絡
單片機在開機時或在工作中因干擾而使程序失控,或工作中程序處于某種死循環狀態等情況下都需要復位。復位作用是使CPU以及其他功能部件,如串行口,中斷都恢復到一個確定初始狀態,并從這個狀態開始工作。
復位電路有兩種:上電、按鈕復位,考慮到各部件影響,采用按鈕復位,當電阻給電容充電,電容的電壓為高電平,當按下按鈕時芯片復位腳近似低電平,于是芯片復位。單片機實習報告(二)一、生產實習的目的和意義:
生產實習是培養本科學生理論聯系實際,提高實際動手操作能力的重要教學環節。本專業的生產實習旨在使學生廣泛了解實際電子產品生產的全過程,熟悉電子產品的主要技術管理模式,并在實習的操作過程中學習、掌握電子產品的焊接、安裝、調試的實際操作技能。鞏固和加深理解所學的理論,開闊眼界,提高能力,為培養高素質大學本科人才打下必要的基礎。通過學習,是理論與實際相結合,可以使學生加深對所學知識的理解,并為后續專業課的學習提供必要的感性知識,同時使學生直接了解本業的生產過程和生產內容,為將來走上工作崗位提供必要的實際生產知識。二、實習的基本內容:
集中授課,進行相關知識的學習。
學習、掌握電子產品的獨立性設計與安裝、調試的能力;進一步掌握電子測量儀器的正確使用方法,電元器件的測量與篩選技術。初步了解電子整機產品的工藝過程。
為能使學生得到充分的鍛煉,較大的提高學生的實際動手能力,本次生產實習安排每一位學生獨立完成全部系統的設計與安裝工作。
本實習環節,學生要獨立使用電焊鐵及各種電子測試設備電路安裝與調試,要學生嚴格遵守電器設備的使用安全,遵守實驗室的各項規章制度。三、基本要求:
---文章來源網絡




