A. 51單片機中 C語言 P2^3與P2.3的區別
P2^3表示的就是P2.3,但在KeilC中P2.3的表述是不合法的。其實這只是編譯器的語法而已。
B. 51單片機編程,裡面的引腳定義多為大寫字母,怎麼修改成小寫的
你打開頭文件「reg51.h」把埠大寫的P全換成小寫的就可以了。
C. 51單片機開發板和驅動模塊怎麼連接
我記得我回答過這個問題的,怎麼又出現了。+5V和GND是電源,接到5V電源的正負極就可以了,IN1~IN4是控制IO,接到單片機的任意四個IO就可以了,比如P20到P23。
D. 51單片機,p2^3=~p2^3這樣寫為什麼錯而sbit data1=p2^3,再data1=~dara1卻對了
sbit data1=p2^3是定義了一個IO口,編譯時確定。在表達式中p2^3不可用,否則^也作為異或運算符,沒辦法區分。
E. 在單片機編程中P2_3與P23有什麼區別
P2^3表示的是P2口的第四位(唯一),不可以用來表示其他別的位 P2_3是標號,可以表示P2口任意一位,也可以表示其他的位或存儲單元
F. 51單片機倒計數編程
;假設條件:
;A 採用共陽極數碼管
;B P2口控制LED的段碼,p2.0接A段,負輸出有效
;C P1口控制位碼,P1.0接最高位,P1.3接最高位,負輸出有效。
;D 晶振採用12M
;E 數碼管顯示0.5S後自動加1
;程序:
ORG 0000H
LJMP 0080H
ORG 0030H
VAR1:DS 1 ;高位數據
VAR2:DS 1 ;低位數據
VAR3:DS 1 ;數碼管位狀態
VAR4:DS 1 ;暫存
VAR5:DS 1 ;周期
ORG 0080H
MOV SP, #60H
;初始狀態為00.00
MOV VAR1, #00H
MOV VAR2, #00H
MOV VAR3, #01H
;==關閉數碼管====
MOV P1, #0FFH
MOV P2, #0FFH
MOV VAR5, #12
INT:
;==================================================
ACALL AJTDATA ;將兩位數據調整成按每位輸出的單獨數據
ACALL OUTSIM ;數碼管顯示程序
;===================================================
;==以上兩個小程序執行的時間約為40MS,
;所以,當延時12次以後,程序運行了480ms,
;子程序ADDONE就是等待約0.5秒後,顯示數據自動加1
ACALL ADDONE
LJMP INT
ADDONE:
DJNZ VAR5, EXITADD
MOV VAR5, #12
MOV A, VAR2
CLR C
ADDC A, #01H
DA A
MOV VAR2, A
MOV A, VAR1
ADDC A, #00H
DA A
MOV VAR1, A
EXITADD:
RET
AJTDATA:
MOV R0, #VAR4
;最高位
MOV A, VAR1
SWAP A
ANL A, #0FH
MOV @R0, A
;第二位
INC R0
MOV A, VAR1
ANL A, #0FH
MOV @R0, A
;第三位
INC R0
MOV A, VAR2
SWAP A
ANL A, #0FH
MOV @R0, A
;第四位
INC R0
MOV A, VAR2
ANL A, #0FH
MOV @R0, A
RET
OUTSIM:
MOV R0, #VAR4
;送第一位
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #01H
ACALL DEL10 ;延時10MS,以保證數碼管顯示時的視覺延緩時間
;送第二位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
ANL A, #7FH ;將最高位,即小數點位清零,讓其亮
MOV P2, A
MOV P1, #02H
ACALL DEL10
;送第三位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #04H
ACALL DEL10
;送第二位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #08H
ACALL DEL10
RET
DEL10: ;10MS延時程序
MOV R6, #20
DEL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6, DEL1
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,32H,82H,0F8H,80H,90H
END
G. 51單片機如何連接4個二位數碼管,只有p0口和P20-P23可以使用了。
用4個二位數碼管,可以用一個8位一體的共陰數碼管畫模擬圖更簡單。用P0口和P2.0~P2.2就可以接成8位動態顯示電路。方法一:用兩片74HC573鎖存器,這是比較典型的顯示電器,用是比較多,用P0口輸出數據,兩片鎖存器分別鎖存段碼和位碼。如下圖。
H. 關於51單片機點陣心形顯示問題
首先你要搞清楚點陣顯示原理。
8*8點陣要顯示一個畫面,通常採用掃描的形式。點陣內部發光陣列每一行的陰極連在一起,引出一條共陰線;每一縱向陽極連在一起,引出一條共陽線。這樣8*8點陣就共有8條共陰線和8條共陽線。具體請參考點陣內部結構示意圖!
掃描的過程:例如將共陽線作為掃描線,即每次給其中一條陽線供電,其它陽線斷電。這樣,在該條陽線上的LED點亮與否就取決於8條陰線的電平高低了。快速地掃描陽線,並且每掃描一條就給陰線變化相應的電平,就實現了一組圖像的顯示。
在你給的程序中,很明顯的 tabP2是用來形成掃描輸出的。你自己分析一下這些值每次是不是只發生了0這個值的移位。這是採用查表法來得到掃描功能的,每次讓IO口(一組)輸出這表中的一個值,最終就形成了掃描動作。至於tabP0就是對應於每一個掃描線輸出的心形數據表了。每次掃描IO輸出 tabP2的一個值,對應數據IO輸出tabP0的一個值。
至於你說的「還有8X8點陣圖中介面P23,P25,LP04,LP06,其中的LP04,LP06是不是指單片機的P04和P06介面啊?」我個人認為你應該自己有能力對這等電路進行分析了,不要一味只是單純復制製作。只有自己嘗試了解,以後才能做出更具特色的東西而不會僅僅停留在心形顯示。
I. 51單片機數碼管靜態顯示問題
點亮數碼管是最基本的了。首先要學會看原理圖。通過P22,P23,P24來控制38解碼器先選通一個數碼管,然後把段碼加到P0上,就能顯示了。要想顯示多個數碼管,就是上述方法加上延時。先顯示一個數碼管,再選通另一個數碼管,再送段碼,就能靜態顯示多個數碼管了。