稍稍做了一些改動:
/******************溫度數碼顯示模塊*********************/
DISP1:
MOV R1, #70H
MOV R0, #74H
MOV R5, #0FEH
PLAY:
MOV DPTR, #TAB
MOV P2, #0FFH ;原來是 P1
MOV A, @R1
MOVC A, @A+DPTR
MOV P1, A
MOV A, @R0
MOVC A, @A+DPTR
MOV P0, A
MOV P2, R5
MOV A, R5
JB ACC.1, LOOP1
CLR P1.7
CLR P0.7
LOOP1:
CALL DL1MS
INC R1
INC R0
JNB ACC.3, ENDOUT
RL A
MOV R5, A
MOV A, 73H
......
Ⅱ 怎麼用單片機匯編語言數碼管靜態顯示1234
數碼管連接電路如圖1所示,p0口輸出碼型,p2口輸出位選。鎖存器74hc573起驅動作用,提供驅動電流供數碼管發光。解碼器74hc138將位選地址轉換成位選信號,例如當前是第5個數碼管顯示,那麼p2口輸出位選地址05h,解碼器輸入cba=110,輸出位選信號y7-y0=11101111,其中y5=0,第5個數碼管選通並顯示,其它數碼管不顯示。實驗時將j6的左邊兩個引腳針(1和2)用跳冒連接,鎖存器11腳接vcc,關閉鎖存功能。
數碼管顯示方式為動態掃描方式,當p0口送第一個數0的碼型到鎖存器時,p2送位選地址01h,即y0=0,只有第一個數碼管亮,顯示0,其他數碼管不顯示。當p0口送第二個數1的碼型到鎖存器時,p2送位選地址02h,即y1=0,只有第二個數碼管亮,顯示1,其他數碼管不顯示。即每次只有一個數碼管點亮,8個數碼管是輪流被點亮的,輪流點亮的間隔時間很短(一般用延時程序延時幾個毫秒),由於視覺的暫留現象,看到的卻好象全都點亮著,這就是動態掃描。
數碼管顯示數字的碼型由數碼管的數據腳a~dp決定,圖2為數碼管的筆段分布圖,由於是共陰極的,所以當a~dp為高電平時相應的筆段會亮,電路中p1.0~p1.7分別接數碼管的a.b.c.d.e.f.g.dp,得到0~9這10個數字的碼型如表1所示。
圖2 數碼管的筆段分布圖
引腳
p0.7
p0.6
p0.5
p0.4
p0.3
p0.2
p0.1p0.0數字 碼型
筆段
dp
g
f
e
d
c
b a
0
0
1
1
1
1
1 1
0 3fh
0
0
0
0
0
1
1 0
1 06h
0
1
0
1
1
0
1 1
2 5bh
0
1
0
0
1
1
1 1
3 4fh
0
1
1
0
0
1
1 0
4 66h
0
1
1
0
1
1
0 1
5 6dh
0
1
1
1
1
1
0 1
6 7dh
0
0
0
0
0
1
1 1
7 07h
0
1
1
1
1
1
1 1
8 7fh
0
1
1
0
1
1
1 1
9 6fh
1
0
0
0
0
0
0 0
小數點80h
只要把上面的相關數,改成學好就可以了。
Ⅲ 51單片機匯編語言如何用定時器中斷實現數碼管從0-F每秒進1且循環進行。
ORG0000H
JMPBEGIN
ORG000BH
LJMPT0ISR
ORG0030H
TABLE:;共陰極數碼管顯示代碼表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
;---------------------------------------
BEGIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
SETBET0
SETBEA
MOVR2,#20
CLRA
LOOP:
MOVDPTR,#TABLE
PUSHACC
MOVCA,@A+DPTR
MOVP0,A
POPACC
SJMPLOOP
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
DJNZR2,T0E
INCA
ANLA,#0FH
T0E:
RETI
END
Ⅳ 單片機數碼管編程 匯編語言,急
U16INC MACRO U16,;;16位無符號型變數加1
LOCALZZ
INC U16+1
MOV A,U16+1
JNZ ZZ
MOV U16+1,#0
INC U16
ZZ:
ENDM
U16MOV MACRO U16,VAL;;16位無符號型變數賦值
MOV U16+1,#LOW(VAL)
MOV U16,#HIGH(VAL)
ENDM
U16DAYV MACRO U16,VAL,;;16位無符號型變數判斷大小,最後根據Cy判斷
MOV A,U16+1
CLR C
SUBB A,#LOW(VAL)
MOV A,U16
SUBB A,#HIGH(VAL)
ENDM
WX1 EQU P2.0
WX2 EQU P2.1
WX3 EQU P2.2
WX4 EQU P2.3
S4 EQU P1.3
S5 EQU P1.4
LED1 EQU P1.6;;兩個LED
LED2 EQU P1.7
JDQ EQU P1.5;;繼電器
SMGBZ1 EQU 0X30
DS1 EQU 0X31
ZT EQU DS1+4
JSBZ1 EQU ZT+1;0-39的計數
JSBZ2 EQU ZT+2;計時標志,用於閃爍和計時
JSBZ3 EQU JSBZ2+2;;繼電器通斷兩次的計時和計數
ORG 0
JMP MAIN
ORG 0XB
JMP TimeInterupt
MAIN:
MOV SP,#0X70
MOV R0,#0x70
CLR A
MA1: MOV @R0,A ;數據全清0
DJNZ R0,MA1
CALL JDQLC_STOP
CALL Time0Init
;主循環
LOOP: CALL AJPD
CALL RUN
JMP lOOP
;主運行函數
RUN: MOV A,ZT
CJNE A,#1,RR1
JMP RUN1
RR1: CJNE A,#2,RR2
JMP RUN2
RR2: RET
;;0-39循環
RUN1:
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV A,JSBZ1
MOV B,#10
DIV AB
MOV DS1+2,A
MOV DS1+3,B
U16DAYV JSBZ2,1000
JC RUN1_1
U16MOV JSBZ2,0
INC JSBZ1
MOV A,JSBZ1
CJNE A,#39+1,RUN1_1
MOVJSBZ1,#0
RUN1_1:
RET
;;FFFF閃爍
RUN2: U16DAYV JSBZ2,500
JC RUN2_1
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV DS1+2,#0X10
MOV DS1+3,#0X10
SETB LED1
SETB LED2
U16DAYV JSBZ2,1000
JC RUN2_2
U16MOV JSBZ2,0
JMP RUN2_2
RUN2_1:
MOV DS1+0,#0X0F
MOV DS1+1,#0X0F
MOV DS1+2,#0X0F
MOV DS1+3,#0X0F
CLR LED1
CLR LED2
RUN2_2:
CALL JDQLC
RET
;按鍵判斷
AJPD:
JNB S4,AJ1
JNB S5,AJ2
RET
AJ1: JNB S4,$
MOV ZT,#2
CALL JDQLC_START
RET
AJ2: CALL JDQLC_STOP
SETB LED1
SETB LED2
JNB S5,$
MOV ZT,#1
MOV JSBZ1,#0
U16MOV JSBZ2,0
RET
JDQLC_START:
U16MOV JSBZ3,0
RET
JDQLC_STOP:
U16MOV JSBZ3,30000
SETB JDQ
RET
;繼電器通斷兩次
JDQLC:
U16DAYV JSBZ3,1000
JNC JDQ_1
CLR JDQ;通1s
RET
JDQ_1: U16DAYV JSBZ3,1500
JNC JDQ_2
SETB JDQ;斷0.5s
RET
JDQ_2: U16DAYV JSBZ3,1500+1000
JNC JDQ_3
CLR JDQ;通1s
RET
JDQ_3: U16DAYV JSBZ3,3000
JNC JDQ_4
SETB JDQ;斷
JDQ_4: RET
;;定時器初始化
Time0Init:
MOV TMOD,#0X01
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
SETB TR0
SETB ET0
SETB EA
RET
;;數碼顯示
SMXS:
INC SMGBZ1
MOV A,SMGBZ1
SUBB A,#4
JC SMXS1
MOV SMGBZ1,#0
SMXS1:
MOV P2,#0XF0
MOV A,SMGBZ1
ADD A,#DS1
MOV R0,A
MOV A,@R0
MOV DPTR,#TABD
MOVC A,@A+DPTR
MOV P0,A
MOV DPTR,#TABW
MOV A,SMGBZ1
MOVC A,@A+DPTR
MOV P2,A
RET
TABD:;段碼
DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
DB0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF,0XBF
TABW:;位碼
DB0xF1,0xF2,0xF4,0xF8
;;定時器0中斷
TimeInterupt:
PUSH PSW
PUSH ACC
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
CALL SMXS
U16INC JSBZ2
U16DAYV JSBZ3,30000
JNC TimeOut
U16INC JSBZ3
TimeOut:
POP ACC
POP PSW
RETI
END
Ⅳ 單片機控制74LS164控制數碼管顯示怎麼編程(匯編語言)
74LS164是串入並出轉換晶元,可以藉助串口來實現,也可以用普通IO口模擬實現。舉例如下:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit keyup=P3^6;
sbit keydn=P3^7;
void delay()
{
int i=1000;
while(i--);
}
main()
{
uchar i;
i=0;
SCON=0x00;
TI=1;
while(1)
{
SBUF=table[i];
while(TI==0);
TI=0;
delay();
if(keyup==0)
{
i++;
while(keyup==0);
}
if(keydn==0)
{
if(i>0)i--;
while(keydn==0);
}
i%=10;
}
}
Ⅵ 單片機匯編語言讓數碼管顯示0到9
ORG00H
LJMPMAIN
ORG30H
MAIN:
MOVDPTR,#TABLE
MOVR7,#10
MOVA,#0
LOOP:
LCALLDISPLAY
LCALLDELAY
INCA
DJNZR7,LOOP
LJMPMAIN
DISPLAY:
PUSHACC
MOVCA,@A+DPTR
MOVP1,A
POPACC
RET
DELAY:
DL1:DJNZR6,DL1
DL2:DJNZR6,DL2
DJNZR7,DL1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
再試試看。
Ⅶ LED數碼管動態顯示2017的51單片機匯編語言
DAT EQU33H
SCANLED EQU39H
ORG0000H
LJMPMAIN
ORG0003H
LJMPEXTINT0
ORG001BH
LJMPT1ISR ;掃描顯示
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#10H
MOVTH1,#0ECH
MOVTL1,#078H
MOV33H,#2
MOV34H,#0
MOV35H,#1
MOV36H,#7
SETBTR1
SETBET1
SETBEA
SJMP$
T1ISR:
PUSHACC
CLRTR1
MOVTH1,#0ECH
MOVTL1,#78H
SETBTR1
MOVDPTR,#LEDTAB
T100:
MOVR0,#DAT
MOVA,SCANLED
ADDA,R0
MOVR0,A
MOVA,SCANLED
JNZT101
MOVP2,#01H
SETBDOT
SJMPT1DIS
T101:
DECA
JNZT102
MOVP2,#02H
CLRDOT
SJMPT1DIS
T102:
DECA
JNZT103
MOVP2,#04H
SETBDOT
SJMPT1DIS
T103:
MOVP2,#08H
CLRDOT
T1DIS:
MOVA,@R0
MOVCA,@A+DPTR
JNBDOT,T1DIS1
ORLA,#01H
T1DIS1:
CPLA
MOVP0,A
INCSCANLED
MOVA,SCANLED
CJNEA,#4,T1END
MOVSCANLED,#0
T1END:
POPACC
RETI
LEDTAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
Ⅷ 單片機匯編語言8隻數碼管顯示1-8
1、數碼管顯示演示程序:在8個LED數碼管上依次顯示1,2,3,4,5,6,7,8。引用埠:數碼管數據p0,數碼管控制p2;
DIS_DIGITEQU40H
;位選通值,傳送到P2口用於選通當前數碼管的數值,
;如等於0xfe時,選通P2.0口數碼管
DIS_INDEXDATA41H
;顯示索引,用於標識當前顯示的數碼管和緩沖區的偏移量
DIS_BUFDATA50H
;顯於緩沖區起始地址
ORG0000H
AJMPMAIN
ORG000BH
AJMPINTT0
ORG0100H
MAIN:MOVP0,#0FFH;初始化I/O口
MOVP2,#0FFH
MOVTMOD,#02H;定時器0在模式2下工作
MOVTL0,#38H;每200μs產生一次溢出
MOVTH0,#38H;自動重裝初值
SETBET0;使能定時器0中斷
SETBTR0;啟動定時
SETBEA;使能總中斷
MOVDPTR,#DIS_CODE;設定顯示初值為1-8
MOVA,#1;初值為1,以後順序加1
MOVCA,@A+DPTR
MOVDIS_BUF,A
MOVA,#2
MOVCA,@A+DPTR
MOVDIS_BUF+01H,A
MOVA,#3
MOVCA,@A+DPTR
MOVDIS_BUF+02H,A
MOVA,#4
MOVCA,@A+DPTR
MOVDIS_BUF+03H,A
MOVA,#5
MOVCA,@A+DPTR
MOVDIS_BUF+04H,A
MOVA,#6
MOVCA,@A+DPTR
MOVDIS_BUF+05H,A
MOVA,#7
MOVCA,@A+DPTR
MOVDIS_BUF+06H,A
MOVA,#8
MOVCA,@A+DPTR
MOVDIS_BUF+07H,A
DISPLAY:MOVDIS_DIGIT,#0FEH;初始從第一個數碼管開始掃描
MOVDIS_INDEX,#0
SETBTR0;啟動定時器0,開始動態掃描顯示
MAIN_LP:NOP
;主程序循環,可增加其它代碼以改變50H-57H中的值以改變顯示內容
SJMPMAIN_LP
;=====================================================
INTT0:
;定時器0中斷服程序,用於數碼管的動態掃描
PUSHACC
PUSHPSW
MOVP2,#0FFH;先關閉所有數碼管
MOVA,#DIS_BUF;獲得顯示緩沖區基地址
ADDA,DIS_INDEX;獲得偏移量
MOVR0,A;R0=基地址+偏移量
MOVA,@R0;獲得顯示代碼
MOVP0,A;顯示代碼傳送到P0口
MOVP2,DIS_DIGIT;
MOVA,DIS_DIGIT
;位選通值左移,下次中斷時選通下一位數碼管
RLA
MOVDIS_DIGIT,A
INCDIS_INDEX
;DIS_INDEX加1,下次中斷時顯示下一位
ANLDIS_INDEX,#0x07
;當DIS_INDEX等於8(00001000B)時,清0
POPPSW
POPACC
RETI
DIS_CODE:DB28h,7eh,0a2h,62h,74h,61h,21h,7ah
DB20h,60h,30h,25h,0a9h,26h,0a1h,0b1h
;0-9和ABCDEF的數碼管顯示代碼
END
Ⅸ 單片機匯編語言數碼管顯示數字。。。。
MAIN:
;------------------
LOOP:
ACALLSHOW1
ACALLDELAY
ACALLSHOW6
ACALLDELAY
SJMPLOOP
;------------------
SHOW1:
MOVP0,#06H
SETBP2.6
CLRP2.6
MOVP0,#0FEH
SETBP2.7
CLRP2.7
RET
;------------------
SHOW6:
MOVP0,#7DH
SETBP2.6
CLRP2.6
MOVP0,#0FDH
SETBP2.7
CLRP2.7
RET
;------------------
DELAY:
DEL1:
NOP
NOP
DJNZR7,DEL1
RET
;------------------
END
Ⅹ AT89C51單片機怎麼用匯編語言讓4個數碼管同時顯示1234
1、首先我們先打開keil。