① 單片機試題解答
一,選擇題
1.當CPU響應外部中斷0後,PC的值是( A )
A.0003H B.2000H C.000BH D.3000H
2.當MCS-51復位時,下面說法准確的是(A)
A.PC=0000H B.SP=00H C.SBUF=00H D.(30H)=00H
3.要用傳送指令訪問MCS-51片外RAM,它的指令操作碼助記符是( B)
A.MOV B.MOVX C.MOVC D.以上都行
4.ORG 2000H
LACLL 3000H
ORG 3000H
RET
上邊程序執行完RET指令後,PC=(C )
A.2000H B.3000HC .2003H D.3003H
5.要使MCS-51能響應定時器T1中斷,串列介面中斷,它的中斷允許寄存器IE的內容應是( A)
A.98H B.84H C.42H D.22H
6.JNZ REL指令的定址方式是(C)
A.立即定址 B.寄存器定址 C.相對定址 D.位定址
7.要把P0口高4位變0,低4位不變,應使用指令( D)
A.ORL P0,#0FH B.ORL P0,#0F0H C. ANL P0,#0F0H D.ANL P0,#0FH
8若某存儲器晶元地址線為12根,那麼它的存儲容量為( C)
A. 1KB B. 2KB C.4KB D.8KB
9.PC中存放的是( A )
A.下一條指令的地址 B. 當前正在執行的指令
C.當前正在執行指令的地址 D.下一條要執行的指令
10. 若MCS-51中斷源都編程為同級,當他們同時申請中斷時CPU首先響應(A )
A. INT0 B. INT1 C.T1 D.T0
11.編寫程序產生的代碼一般存儲在(B)。
A、RAM B、ROM C、EEROM D、SDRAM
12.51系列單片機採用12M晶振的機器周期為(A)。
A、1US B、2US C、4US D、12US
13. 在CPU內部,反映程序運行狀態或反映運算結果的特徵寄存器是(B )。A、PC B、PSW C、ACC D、SP
14. 要用傳送指令訪問片外RAM,它的指令操作助記符是(B )。
A、MOV B、MOVX C、MOVC D、PUSH
15. 開機復位後,CPU使用的是第0組工作寄存器,地址范圍是(B )。
A、00H-10H B、00H-07H C、10H-1FH D、08H-0FH
16. 80C51系列單片機有中斷源 (D )。
A、2個 B、3個 C、4個 D、5個
17. 某存儲器晶元的地址線為11根,那麼它的存儲容量為 ( B)。
A、1KB B、2KB C、3KB D、4KB
18. 提高單片機的晶振頻率fosc,則機器周期Tcy( C)。
A、不變 B、變長 C 、變短 D、不定
19. 關於80C51的堆棧操作,正確的說法是(A )
A、先入棧,再修改指針 B、先修改指針,再出棧
C、先修改指針,再入棧 D、以上都不對
20. 擴展4X4的矩陣鍵盤需要佔用多少個I/O口(B)
A、4 B、8 C、16 D、12
② MCS51單片機的偽指令有哪些
匯編起始偽指令:ORG;結束偽指令:END;位元組數據定義偽指令:DB;字數據定義偽指令:DW;空間定義偽指令:DS;賦值偽指令:EQU;位地址符號定義偽指令:BIT ;片內RAM直接位元組地址定義偽指令:DATA;片外RAM直接位元組地址定義偽指令:XDATA;一共9個
③ 51單片機指令有哪些啊
MCS-51單片機的指令集
1、數據傳送類指令
助記符 功能說明 位元組數 振盪周期
MOV A,Rn 寄存器內容送入累加器 1 12
MOV A,direct 直接地址單元中的數據送入累加器 2 12
MOV A,@Ri 間接RAM中的數據送入累加器 1 12
MOV A,#data8 8位立即數送入累加器 2 12
MOV Rn,A 累加器內容送入寄存器 1 12
MOV Rn,direct 直接地址單元中的數據送入寄存器 2 24
MOV Rn,#data8 8位立即數送入寄存器 2 12
MOV direct,A 累加器內容送入直接地址單元 2 12
MOV direct,Rn 寄存器內容送入直接地址單元 2 24
MOV direct,direct 直接地址單元中的數據送入直接地址單元 3 24
MOV direct,@Ri 間接RAM中的數據送入直接地址單元 2 24
MOV direct,#data8 8位立即數送入直接地址單元 3 24
MOV @Ri,A 累加器內容送入間接RAM單元 1 12
MOV @Ri,direct 直接地址單元中的數據送入間接RAM單元 2 24
MOV @Ri,#data8 8位立即數送入間接RAM單元 2 12
MOV DPTR,#data16 16位立即數地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器 1 24
MOVC A,@A+PC 以PC為基地址變址定址單元中的數據送入累加器 1 24
MOVX A,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVX A,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX @Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX @DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSH direct 直接地址單元中的數據壓入堆棧 2 24
POP DIRECT 堆棧中的數據彈出到直接地址單元 2 24
XCH A,Rn 寄存器與累加器交換 1 12
XCH A,direct 直接地址單元與累加器交換 2 12
XCH A,@Ri 間接RAM與累加器交換 1 12
XCHD A,@Ri 間接RAM與累加器進行低半位元組交換 1 12
2、算術操作類指令
助記符 功能說明 位元組數 振盪周期
ADD A,Rn 寄存器內容加到累加器 1 12
ADD A,direct 直接地址單元加到累加器 2 12
ADD A,@Ri 間接RAM內容加到累加器 1 12
ADD A,#data8 8位立即數加到累加器 2 12
ADDC A,Rn 寄存器內容帶進位加到累加器 1 12
ADDC A,dirct 直接地址單元帶進位加到累加器 2 12
ADDC A,@Ri 間接RAM內容帶進位加到累加器 1 12
ADDC A,#data8 8位立即數帶進位加到累加器 2 12
SUBB A,Rn 累加器帶借位減寄存器內容 1 12
SUBB A,dirct 累加器帶借位減直接地址單元 2 12
SUBB A,@Ri 累加器帶借位減間接RAM內容 1 12
SUBB A,#data8 累加器帶借位減8位立即數 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址單元內容加1 2 12
INC @Ri 間接RAM內容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器減1 1 12
DEC Rn 寄存器減1 1 12
DEC direct 直接地址單元內容減1 2 12
DEC @Ri 間接RAM內容減1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器進行十進制轉換 1 12
3、邏輯操作類指令
助記符 功能說明 位元組數 振盪周期
ANL A,Rn 累加器與寄存器相「與」 1 12
ANL A,direct 累加器與直接地址單元相「與」 2 12
ANL A,@Ri 累加器與間接RAM內容相「與」 1 12
ANL A,#data8 累加器與8位立即數相「與」 2 12
ANL direct,A 直接地址單元與累加器相「與」 2 12
ANL direct,#data8 直接地址單元與8位立即數相「與」 3 24
ORL A,Rn 累加器與寄存器相「或」 1 12
ORL A,direct 累加器與直接地址單元相「或」 2 12
ORL A,@Ri 累加器與間接RAM內容相「或」 1 12
ORL A,#data8 累加器與8位立即數相「或」 2 12
ORL direct,A 直接地址單元與累加器相「或」 2 12
ORL direct,#data8 直接地址單元與8位立即數相「或」 3 24
XRL A,Rn 累加器與寄存器相「異或」 1 12
XRL A,direct 累加器與直接地址單元相「異或」 2 12
XRL A,@Ri 累加器與間接RAM內容相「異或」 1 12
XRL A,#data8 累加器與8位立即數相「異或」 2 12
XRL direct,A 直接地址單元與累加器相「異或」 2 12
XRL direct,#data8 直接地址單元與8位立即數相「異或」 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循環左移 1 12
RLC A 累加器帶進位循環左移 1 12
RR A 累加器循環右移 1 12
RRC A 累加器帶進位循環右移 1 12
SWAP A 累加器半位元組交換 1 12
4、控制轉移類指令
助記符 功能說明 位元組數 振盪周期
ACALL addr11 絕對短調用子程序 2 24
LACLL addr16 長調用子程序 3 24
RET 子程序返回 1 24
RETI 中斷返回 1 24
AJMP addr11 絕對短轉移 2 24
LJMP addr16 長轉移 3 24
SJMP rel 相對轉移 2 24
JMP @A+DPTR 相對於DPTR的間接轉移 1 24
JZ rel 累加器為零轉移 2 24
JNZ rel 累加器非零轉移 2 24
CJNE A,direct,rel 累加器與直接地址單元比較,不等則轉移 3 24
CJNE A,#data8,rel 累加器與8位立即數比較,不等則轉移 3 24
CJNE Rn,#data8,rel 寄存器與8位立即數比較,不等則轉移 3 24
(相等則執行本指令的下一條)
CJNE @Ri,#data8,rel 間接RAM單元,不等則轉移 3 24
(但有時還想得知兩數比較之後哪個大,哪個小,
本條指令也具有這樣的功能,如果兩數不相等,
則CPU還會反映出哪個數大,哪個數小,
這是用CY(進位標志位)來實現的。
如果左邊的數(A,Rn,@Ri)大或者等於右邊的數(direct,#date8),則CY=0;否則CY=1)
DJNZ Rn,rel 寄存器減1,非零轉移 3 24
DJNZ direct,rel 直接地址單元減1,非零轉移 3 24
NOP 空操作 1 12
控制轉移指令共有17條,可分為「無條件轉移指令」 「有條件轉移指令」 「子程序調用指令」 及 「返回指令」。
5、布爾變數操作類指令
助記符 功能說明 位元組數 振盪周期
CLR C 清進位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置進位位 1 12
SETB bit 置直接地址位 2 12
CPL C 進位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 進位位和直接地址位相「與」 2 24
ANL C,/bit 進位位和直接地址位的反碼相「與」 2 24
ORL C,bit 進位位和直接地址位相「或」 2 24
ORL C,/bit 進位位和直接地址位的反碼相「或」 2 24
MOV C,bit 直接地址位送入進位位 2 12
MOV bit,C 進位位送入直接地址位 2 24
JC rel 進位位為1則轉移(CY=O不轉移,=1轉移) 2 24
JNC rel 進位位為0則轉移(和上面相反) 2 24
JB bit,rel 直接地址位為1則轉移 3 24
JNB bit,rel 直接地址位為0則轉移 3 24
JBC bit,rel 直接地址位為1則轉移,該位清零 3 24
偽指令
助記符 功能說明
ORG 設置程序起始地址
END 標志源代碼結束
EQU 定義常數
SET 定義整型數
DATA 給位元組類型符號定值
BYTE 給位元組類型符號定值
WROD 給字類型符號定值
BIT 給位地址取名
ALTNAME 用自定義名取代保留字
DB 給一塊連續的存儲區裝載位元組型數據
DW 給一塊連續的存儲區裝載字型數據
DS 預留一個連續的存儲區或裝入指定位元組。
INCLUDE 將一個源文件插入程序中
TITLE 列表文件中加入標題行
NOLIST 匯編時不產生列表文件
NOCODE 條件匯編時,條件為假的不產生清單
④ MCS-51系列單片機,長調用LCALL和短調用ACALL什麼情況下使用
可定址的范圍不一樣,ACALL是雙位元組指令,調用指令的地址PC加2後與所調用的子程序的起始地址應在同一個2KB范圍內,而LCALL是三位元組指令,可在64KB范圍內調用,換句話說,就是子程序離得太遠就要用LACLL,離得近用ACALL就可以。LJMP和SJMP同上,LJMP三位元組指令,可轉移到64KB程序存儲器任意單元,SJMP是雙位元組指令,只可以在存儲器256個單元范圍內轉移。
⑤ 兩個8*8點陣的引腳如何級聯
不好意思!
你走錯房間了!
這里是數學!
建議去別的地方問問看看!
美邦祝你學業有成!
基於MCS-51的16x16點陣LED電子顯示屏的設計
1.背景介紹
1.1 LED及LED顯示屏
LED 就是Light Emitting Diode(發光二極體)的縮寫。在某些半導體材料的PN結中,注入的少數載流子與多數載流子復合時會把多餘的能量以光的形式釋放出來,從而把電能直接轉換為光能。PN結加反向電壓,少數載流子難以注入,故不發光。這種利用注入式電致發光原理製作的二極體叫發光二極體,通稱LED。發光二極體是由p 型和n 型半導體組成的二極體。在LED 的p - n 結附近,n 型材料中多數載流子是電子,p 型材料中多數載流子是空穴。p -n 結上未加電壓時構成一定的勢壘,當加正向偏壓時,在外電場作用下,p 區的空穴和n 區的電子就向對方擴散運動,構成少數載流子的注入,從而在p - n結附近產生導帶電子和價帶空穴的復合,同時釋放出相對應的能量hν(h 為普朗克常數,ν為光子頻率)而發光。該能量相當於半導體材料的帶隙能量Eg(Ev) ,其與發光波長λ(nm) 的關系為λ= 1239. 6PEg。
LED顯示屏是一種通過控制半導體發光二極體的顯示方式,用來顯示文字、圖形、圖像、動畫、行情、視頻、錄像信號等各種信息的顯示屏幕。
LED顯示屏分為圖文顯示屏和視頻顯示屏,均由LED矩陣塊組成。圖文顯示屏可與計算機同步顯示漢字、英文文本和圖形;視頻顯示屏採用微型計算機進行控制,圖文、圖像並茂,以實時、同步、清晰的信息傳播方式播放各種信息,還可顯示二維、三維動畫、錄像、電視、VCD節目以及現場實況。LED顯示屏顯示畫面色彩鮮艷,立體感強,靜如油畫,動如電影,廣泛應用於車站、碼頭、機場、商場、醫院、賓館、銀行、證券市場、建築市場、拍賣行、工業企業管理和其它公共場所。
它的優點:亮度高、工作電壓低、功耗小、微型化、易與集成電路匹配、驅動簡單、壽命長、耐沖擊、性能穩定。
1.2 MCS-51系列單片機簡介
1.2.1 MCS-51系列單片機及其特點
①可靠性高:
因為晶元是按工業測控環境要求設計的,故抗干擾的能力優於PC機。系統軟體(如:程序指令,常數,表格)固化在ROM中,不易受病毒破壞。許多信號的通道均在一個晶元內,故運作時系統穩定可靠。
②便於擴展:
片內具有計算機正常運行所必需的部件,片外有很多供擴展用的(匯流排,並行和串列的輸入/輸出)管腳,很容易組成一定規模的計算機應用系統。
③控制功能強:
具有豐富的控制指令:如:條件分支轉移指令,I/O口的邏輯操作指令,位處理指令。
④實用性好:
體積小,功耗低,價格便宜,易於產品化。
1.2.2 單片機的發展歷史簡介
①第1階段(1971年—1978年),以MCS-48系列為代表,稱4位單片機。在片內:CPU有4位或8位;ROM有1KB或2KB;RAM有64B或128B;只有並行介面,無串列介面;只有1個8位的定時/計時器;中斷源只有2個。在片外:定址范圍只有4KB;晶元引腳有40個。
②第2階段(1978年—1983年),以MCS-51系列為代表,稱8位單片機。在片內:CPU有8位;ROM有4KB或8KB;RAM有128B或256B;有串/並行介面;有2個或3個16位的定時/計時器;中斷源有5至7個。在片外:定址范圍有64KB;晶元引腳有40個。
③第3階段(1983年以後),以MCS-96系列為代表,稱16位單片機。在片內:CPU有16位;ROM有8KB;RAM有232B;有串/並行介面;有4個16位的定時/計時器;中斷源有8個;增加了D/A和A/D轉換電路。在片外:定址范圍有64KB;晶元引腳有48個或68個。
以上MCS-51系列以其優良的性價比,在我國得到了廣泛的應用。
3.功能要求
設計一個室內用16x16的點陣LED圖文顯示屏,要求在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應穩定、清晰無串擾。圖形或文字顯示有靜止、移入移出等顯示方式。
4.方案實現
從理論上說,不論顯示圖形還是文字,只要控制與組成這些圖形或文字的各個點所在的位置相對應的LED器件發光,就可以得到我們想要的顯示結果,這種同時控制各個發光點亮滅的方法稱為靜態驅動顯示方式。16x16的點陣共有256個發光二極體,顯然單片機沒有這么多的埠,如果我採用鎖存器來擴展埠,按8位的鎖存器來計算,16x16的點陣需要256/8=32個鎖存器。這個數字很龐大,因為我們僅僅是16x16的點陣,在實際應用中的顯示屏往往要大得多,這樣在鎖存器上花的成本將是一個很龐大的數字。因此在實際應用中的顯示屏幾乎都不採用這種設計,而採用另外一種稱為動態掃描的顯示方法。
動態掃描的意思簡單地說就是逐行輪流點亮,這樣掃描驅動電路就可以實現多行(比如16行)的同名列共用一套驅動器。具體就16x16的點陣來說,把所有同1行的發光管的陽極連在一起,把所有同1列的發光管的陰極連在一起(共陽極的接法),先送出對應第一行發光管亮滅的數據並鎖存,然後選通第1行使其燃亮一定時間,然後熄滅;再送出第二行的數據並鎖存,然後選通第2行使其燃亮相同的時間,然後熄滅;以此類推,第16行之後,又重新燃亮第1行,反復輪回。當這樣輪回的速度足夠快(每秒24次以上),由於人眼的視覺暫留現象,就能夠看到顯示屏上穩定的圖形了。
採用掃描方式進行顯示時,每一行有一個行驅動器,各行的同名列共用一個驅動器。顯示數據通常存儲在單片機的存儲器中,按8位一個位元組的形式順序排放。顯示時要把一行中各列的數據都傳送到相應的列驅動器上去,這就存在一個顯示數據傳輸的問題。從控制電路到列驅動器的數據傳輸可以採用並列方式或串列方式。顯然,採用並行方式時,從控制電路到列驅動器的線路數量大,相應的硬體數目多。當列數很多時,並列傳輸的方案是不可取的。
採用串列傳輸的方法,控制電路可以只用一根信號線,將列數據一位一位傳往列驅動器,在硬體方面無疑是十分經濟的。但是,串列傳輸過程較長,數據按順序一位一位地輸出給列驅動器,只有當一行的各列數據都以傳輸到位之後,這一行的各列才能並行地進行顯示。這樣,對於一行的顯示過程就可以分解成列數據准備(傳輸)和列數據顯示兩部分。對於串列傳輸方式來說,列數據准備時間可能相當長,在行掃描周期確定的情況下留給行顯示的時間就太少了,以致影響到LED的亮度。
解決串列傳輸中列數據准備和列數據顯示的時間矛盾問題,可以採用重疊處理的方法。即在顯示本行各列數據的同時,傳送下一列數據。為了達到重疊處理的目的,列數據的顯示就需要具有所存功能。經過上述分析,就可以歸納出列驅動器電路應具有的功能。對於列數據准備來說,它應能實現串入並處的移位功能;對於列數據顯示來說,應具有並行鎖存的功能。這樣,本行已准備好的數據打入並行鎖存器進行顯示時,串並移位寄存器就可以准備下一行的列數據,而不會影響本行的顯示。圖1為顯示屏電路實現的結構框圖。
圖1,顯示屏電路框圖
4.1 系統硬體電路的設計
硬體電路大致上可以分成單片機系統及外圍電路、列驅動電路和行驅動電路三部分。
4.1.1單片機系統及外圍電路
單片機採用MSC-51或其兼容系列晶元,採用24MHZ或更高頻率晶振,以獲得較高的刷新頻率,時期顯示更穩定。單片機的串口與列驅動器相連,用來顯示數據。P1口低4位與行驅動器相連,送出行選信號;P1.5~P1.7口則用來發送控制信號。P0口和P2口空著,在有必要的時候可以擴展系統的ROM和RAM。16x16的點陣顯示屏的硬體原理圖如圖2所示(在附錄A)。
4.1.2列驅動電路
列驅動電路有集成電路74HC595構成。它具有一個8位串入並出的移位寄存器和一個8位輸出鎖存器的結構,而且移位寄存器和輸出鎖存器的控制是各自獨立的,可以實現在顯示本行列數據的同時,傳送下一行的列數據,既達到重疊處理的目的。
74HC595的外形及內部結構如圖3所示。它的輸入側有8個串列移位寄存器,每個移位寄存器的輸出都連接一個輸出鎖存器。引腳SI是串列數據的輸入端。引腳SCK是移位寄存器的移位時鍾脈沖,在其上升沿發生移位,並將SI的下一個數據打入最低位。
移位後的各位信號出現在各移位寄存器的輸出端,也就是輸出鎖存器的輸入端。RCK是輸出鎖存器的打入信號,其上升沿將移位寄存器的輸出打入輸出鎖存器。引腳G是輸出三態門的開放信號,只有當其為低時鎖存器的輸出才開放,否則為高組態。SCLR信號是移位寄存器清零輸入端,當其為低時移位寄存器的輸出全部為零。由於SCK和RCK兩個信號是互相獨立的,所以能夠做到輸入串列移位與輸出鎖存互不幹擾。晶元的輸出端為QA~QH,最高位QH可作為多片74HC595級聯應用時,向上一級的級聯輸出。但因為QH受輸出鎖存器的打入控制,所以還從輸出鎖存器前引出QH,作為與移位寄存器完全同步的級聯輸出。
QB 1 16 Vcc
QC 2 15 QA
QD 3 14 SI
QE 4 13 G
QF 5 12 RCK
QG 6 11 SCK
QH 7 10 SCLR
GND 8 9 QH
圖3. 74HC595外形及引腳
4.1.3行驅動器
單片機P1口低4位輸出的行號經4/16線解碼器74LS154解碼後生成16條行選通信號線,再經過驅動器驅動對應的行線。一條行線上要帶動16列的LED進行顯示,按每一LED器件20MA電流計算,16個LED同時發光時,需要320MA電流,選通三極體8550作為驅動管可滿足要求。
4.2.系統程序的設計
顯示屏軟體的主要功能是向屏體提供顯示數據,並產生各種控制信號,使屏幕按設計的要求顯示。根據軟體分層次設計的原理,可以把顯示屏的軟體系統分為兩層;第一層是底層的顯示驅動程序,第二層是上層的系統應用程序。顯示驅動程序負責向屏體送顯示數據,並負責產生行掃描信號和其他控制信號,配合完成LED顯示屏的掃描顯示工作。顯示驅動器程序由定時器T0中斷程序實現。系統應用程序完成系統環境設置(初始化)、顯示效果處理等工作,由主程序來實現。
從有利於實現較復雜的演算法(顯示效果處理)和有利於程序結構化考慮,顯示屏程序適宜採用C語言編寫。
4.2.1顯示驅動程序
顯示驅動程序在進入中斷後首先要對定時器T0重新賦初值,以保證顯示屏刷新率的穩定,1/16掃描顯示屏的刷新率(幀頻)計算公式如下:
刷頻率(幀頻)=1/16×T0溢出率
=1/16×f/12(65536-t)
其中f位晶振頻率,t為定時器T0初值(工作在16位定時器模式)。
然後顯示驅動程序查詢當前燃亮的行號,從顯示緩存區內讀取下一行的顯示數據,並通過串口發送給移位寄存器。為消除在切換行顯示數據的時候產生拖尾現象,驅動程序先要關閉顯示屏,即消隱,等顯示數據打入輸出鎖存器並鎖存,然後再輸出新的行號,重新打開顯示。圖4為顯示驅動程序(顯示屏掃描函數)流程圖。
圖 4 顯示驅動程序流程圖
4.2.2系統主程序
本文設計的系統軟體能使系統在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應穩定、清晰無串擾。圖形或文字顯示有靜止、移入移出等顯示方式。
系統主程序開始以後,首先是對系統環境初始化,包括設置串口、定時器、中斷和埠;然後以「卷簾出」效果顯示圖形,停留約3s;接著向上滾動顯示「我愛單片機」這5個漢字及一個圖形,然後以「卷簾入」效果隱去圖形。由於單片機沒有停機指令,
所以可以設置系統程序不斷的循環執行上述顯示效果。
單元顯示屏可以接收來自控制器(主控制電路板)或上一級顯示單元模塊傳輸下來的數據信息和命令信息,並可將這些數據信息和命令信息不經任何變化地再傳送到下一級顯示模塊單元中,因此顯示板可擴展至更多的顯示單元,用於顯示更多的顯示內容。
圖5是系統主程序流程圖。
圖 5 系統主程序流程圖
5性能分析與總結
5.1 性能分析
LED顯示屏硬體電路只要硬體質量可靠,引腳焊接正確,一般無需調試即可 正常工作。軟體部分需要調試的主要有顯示屏刷新頻率及顯示效果兩部分。顯示屏刷新率由定時器T0的溢出率和單片機的晶振頻率決定,表5.1給出了實驗調試時採用的頻率及其對應的定時器T0初值。
表5.1 顯示平刷新率與T0初值關系表(24MHz晶振)
刷新率 25 50 62.5 75 85 100 120
T0初值 0Xec78 0Xf63C 0Xf830 0xF97E 0XFA42 0XFB1E 0xFBEE
從理論上來說,24Hz以上的刷新頻率就能看到穩定的連續的顯示,刷新率越高,顯示越穩定,同時刷新頻率越高,顯示驅動程序佔用的CPU時間越多。試驗證明,在目測條件下刷新頻率40Hz一下的畫面看起來閃爍較嚴重,刷新頻率50Hz以上的已基本察覺不出畫面的閃爍,刷新頻率達到85Hz以上時再增加畫面閃爍沒有明顯的改善。
顯示效果處理程序的內容及方法非常廣泛,其調試過程在此不作具體討論,讀者可以照源程序自行分析。
這個方案設計的16x16的點陣LED圖文顯示屏,電路簡單,成本較低,且較容易擴展成更大的顯示屏;顯示屏各點亮度均勻、充足;顯示圖形或文字穩定、清晰無串擾;可用靜止、移入移出等多種顯示方式顯示圖形或文字。
5.2 總結
本文設計的一個室內用16x16的點陣LED圖文顯示屏,能夠在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應穩定、清晰無串擾。圖形或文字顯示有靜止、移入移出等顯示方式。本系統具有硬體少,結構簡單,容易實現,性能穩定可靠,成本低等特點。
總結本文的研究工作,主要做了下面幾點較突出的工作:
一、通過查閱大量的相關資料,詳細了解了LED的發光原理和LED顯示屏的原理,了解了LED的現狀,清楚地了解了LED顯示屏與其它顯示屏相比較有那些
優點,明確了研究目標。
二,本文設計的LED顯示屏能夠實現在目測條件下LED顯示屏各點亮度均勻、充足,可顯示圖形和文字,顯示圖形和文字應穩定、清晰無串擾。圖形或文字顯示有靜止、移入移出等顯示方式。
三,文章給出了系統具體的硬體設計方案,硬體結構電路圖,軟體流程圖和具體匯編語言程序設計與調試等方面。
四,在這次畢業設計的過程中學會了 Protel 99se 的基本使用,感到Protel 99se 對自動化專業的同學來說是一門很有用的課程。
五,通過這次畢業設計,重新復習並進一步學習了MCS-51;熟練掌握了WORD軟體的使用。
六,存在缺陷:沒有考慮抗干擾的問題。
致謝
本文是在黃金明老師的悉心指導下完成的。從課題的立項、選題到課題的開發與研究,再到本論文的撰寫到定稿的每一步工作都傾注著黃老師的心血和汗水,同時得到同學們相助,並提供了大量的資料. 在此,對於老師和同學們的幫助表示忠心的感謝。
參考文獻
[1] 何立民.MCS-51系列單片機應用系統設計與介面技術 .北京航空航天大學出版社,1990
[2] 任濤等.閃速存儲器數據及應用簡明速查手冊.電子工業出版社,1997
[3] 何立民.單片機應用技術選編.北京航空航天大學出版社,2000
[4] 張毅剛等.MCS-51單片機應用設計.哈爾濱工業電子出版社,1996
[5] 鄔寬明.單片機外圍器件實用手冊.北京航空航天大學出版社,1998
[6] 張凱.LED介紹完全手冊.北京航空航天大學出版社,2000
[7] 張友德等.單片微型機原理應用與實驗,復旦大學出版社,1996
附錄A 16x16的點陣LED圖文顯示屏的硬體原理圖
附錄 B 主要匯編程序清單
以下是16x16的點陣LED電子圖文顯示屏的源程序採用匯編語言編寫(也可採用C語言編寫,C程序KeiluVision2 V2.30環境下調試通過。
以下為用匯編語言編寫的字元顯示控製程序:
; ***************************************
; * *
; * 單個16x16的點陣電子屏字元顯示器 *
; * ATA89C52 12MHz晶振 *
; * 2004.2.11 LRM *
; ***************************************
;顯示字用查表法,不佔用內存,字元用16x16共陽LED點陣,
;效果:向上滾動顯示5個字,再重復循環。
;R1:查表偏址寄存器,B:查表首址,R2:掃描地址(從00~0FH)。
;R3:滾動顯示時控制移動速度,單字顯示可控制靜止顯示的時間。
;*************;
;中斷入口程序 ;
;*************;
;
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTTO
ORG 0013H
ERTI
ORG 001BH
ERTI
ORG 0023H
RETI
ORG 002BH
RETI
;
;***********;
;初始化程序;
;***********;
;
;
;***********;
; 主程序 ;
;***********;
;
START: MOV 20H,#00H ;清零標志,00H為第16行開始掃描標志,01為1幀
;掃描結束標志
MOV A,#0FFH ;埠初始化
MOV P1,A
MOV P1,A
MOV P3,A
MOV P0,A
CLR P1.6 ;串列寄存器輸入打入輸出控制位
MOV TMOD,#01H ;使用T0做16位定時器,行掃描用。
MOV TH0,#0FCH ;1ms初值(12MHz)
MOV TL0,#18H
MOV SCON,#00H ;串口0方式傳送顯示位元組
MOV IE,#82H ;T0中斷允許,總中斷允許
MOV SP,#70H
MAIN: LCALL DISI ;顯示准備,黑屏,1.5s
MOV DPTR,#TAB
LCALL MOVDISP ;向上滾動顯示一頁(8個字)
INC DPH
LCALL MOVDISP ;向上滾動顯示一頁(8個字)
INC DPH
LACLL MOVDISP ;向上滾動顯示一頁(8個字)
AJMP MAIN
;
;
;***********************;
; 多字滾動顯示程序 ;
;***********************;
;每次8個字,入口時定義好DPTR值
;
MOVDISP: MOV B,#00H ;向上移動顯示,查表偏值暫存(從00開始)
DISLOOP: MOV R3,#07H ;移動速度
DISMOV: MOV R2,00H ;第0行開始
MOV R1,B
SETB TR0 ;開掃描(每次一幀)
WAITMOV: JBC 01H,DISMOV1 ;標志為1掃描一幀結束(16ms為1幀,每行1ms)
AJMP WAITMOV
DISMOV1: DJNZ R3,DISMOV ;1幀重復顯示(控制移動速度)
INC B ;顯示字的下一行(每行2位元組)
INC B
MOV A,R1 ;R1為0,8個字顯示完
JZ MOVOUT
AJMP DISLOOP
MOVOUT: RET ;移動先是結束
;
;
;****************;
; 單字顯示程序 ;
;****************;
;顯示表中某個字;
;****************;
DIS1: MOV R3,#5AH ;靜止顯示時間控制(16ms*#=1.6s)
DIS11: MOV R2,#00H ;一幀掃描初始值(行地址從00~0FH)
MOV DPTR,#TAB ;取表首址
MOV R1,#00H ;查表偏址(顯示第一個字)
SETB TR0 ;開掃描(每次一幀)
WAIT11: JBC 01H,DIS111 ;為1,掃描一幀結束
AJMP WAIT11
DIS111: DJNZ R3,DIS11
RET
;
;
;************;
; 掃描程序 ;
;************;
;1ms刷新一次,每行顯示1s
INTT0: PUSH ACC
MOV TH0,#0FCH ;1ms初值重裝
MOV TL0,#18H
JBC 00H,GOEND ;16行掃描標志為1,結束
INC R1 ;取行右邊位元組偏址
MOV A,R1
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;串口0方式發送
WAIT: JBC TI,GO ;等待發送完畢
AJMP WAIT1
GO: DEC R1 ;取行左邊位元組偏址
MOV A,R1
MOVC A,@A+DPTR
MOV SBUF,A
WAIT1: JBC T1,GO1
AJMP WAIT1
GO1: SETB P1.7 ;關行顯示,准備刷新
NOP ;串口寄存器數據穩定
SETB P1.6 ;產生上升沿,行數據打入輸出端
NOP
NOP
CLR P1.6 ;恢復低電平
MOV A,R2 ;修改顯示行地址
ORL A,#0F0H ;修改顯示行地址
MOV R2,A ;修改顯示行地址
MOV A,P1 ;修改顯示行地址
ORL A,#0FH ;修改顯示行地址
ANL A,R2 ;修改顯示行地址
MOV P1,A ;修改完成
CLR P1.7 ;開行顯示
INC R2 ;下一行掃描地址值
INC R1
INC R1 ;下一行數據地址
MOV A,R2
ANL A,#0FH
JNZ GO2
SETB 00H ;R2為01H,現為末行掃描,置標志
GO2: POP ACC
RETI
GOEND: CLR TR0 ;一幀掃描完畢,關掃描
SETB 01H ;一幀掃描完畢,置結束標志
POP ACC
RETI ;退出
;
;
;***************;
; 掃描文字表 ;
;***************;
;
TAB:DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,00FFH,0FFH,0FFH ;黑屏
DB
0F9H,0BFH,0C7H,0AFH,0F7H,0B7H,0F7H,0B7H,0F7H,0BFH,000H,001H,0F7H,0BFH,0F7H,0B7H ;我
DB
0F1H,0D7H,0C7H,0CFH,037H,0DFH,0F7H,0AFH,0F6H,06DH,0F7H,0F5H,0D7H,0F9H,0EFH,0FDH ;
DB
0FFH,007H,0C0H,06FH,0EDH,0EFH,0F6H,0DFH,0C0H,001H,0DDH,0FDH,0BDH,0FFH,0C0H,003H ;愛
DB
0FBH,0FFH,0F8H,00FH,0F3H,0DFH,0F4H,0BFH,0EFH,03FH,09CH,0CFH,073H,0F1H,0CFH,0FBH ;
DB
0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH,0F7H ;單
DB
0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
DB
0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH,0FFH ;片
DB
0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH,0FFH
DB
0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,0EFH,077H,0EFH,077H,0C7H,077H,0CBH,077H ;機
DB
0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH,0FFH ;
DB
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;黑屏
DB
0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ;
END
⑥ 單片機如何接收按鈕信號,比如我按下開關,線路接通,單片機如何知道...
如圖:兩種方法,一個地點平觸發(開關在下),一個高電平觸發(開關在上)。如果連接的是普通的IO口,則採用輪詢方式,就是程序要不停地判斷埠是否有變化。如果連接的中斷腳的話,單片機內部需要對觸發類型做設置,開關在下的設置為低電平觸發,開關在上的設置為高電平觸發,這樣不用你在程序裡面不停的去輪詢埠的電平變化,只需要在中斷服務里編寫你要執行的功能即可,這樣當外界有相應的電平變化的時候,單片機就自動的跳到了你的中斷服務程序里執行了,執行完了,就會退出,等待下一個脈沖的到來。這樣你的程序就靈活多了。