⑴ 單片機做交通燈
硬體電路:使用晶元:89C51、8255、74LS373。採用Protel電路設計軟體繪制原理圖。
1. 紅、綠、黃四個方向共12盞燈,需要12條口線
取8255 PB口 0~3 PC口 0~7(與DVCC模擬機對應,便於調試)
2. 考慮其帶負載能力,加匯流排驅動器74LS244,並加限流電阻,驅動LED。
3. 連接順序:
①數據線 P0~P7 =D0~D7,
②PB0~PB3 PC0~PC7作為輸出口,控制紅綠燈,
③A0、A1 地址需要鎖存,從74LS373引出,
④要有相應的讀寫信號,
⑤不考慮地址分配,片選信號直接接地,
⑥RESET腳與89C51同時復位,
程序編制:
1. 任務分析:交通燈每2(4)秒變化一次,基本狀態如下表
序號 狀態 PB PC
1 4 南北紅 東西綠 1000 01100001
2
3 2 東西綠閃 0000 01000001
4 2 東西黃 0100 01010001
5 4 南北綠 東西紅 0011 00001100
6
7 2 南北綠閃 0010 00001000
8 2 南北黃 0010 10001010
紅綠黃燈對應表
PB3 PB2 PB1 PB0 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0
東西綠1 東西黃1 東西紅1 南北綠1 南北黃1 南北紅1 東西綠2 東西黃2 東西紅2 南北綠2 南北黃2 南北紅2
2. 設計思路可以是:
a) 設計一個循環執行程序,6種狀態順序執行。
b) 列一個數據表,每變化2秒,順序取數送出,8次一個循環。
c) 更新的思路。
3. 定時方式建議採用定時器中斷,定時器查詢,或軟體延時。
4. 設計難點:綠燈閃爍處理。
5. 設計注意點:8255必須是送控制字後方可工作。8255口地址 FF28~FF2BH
PA口1000 PB口1001 PC口1010 控制字1011
FF28H FF29H FF2AH FF2BH
⑵ 單片機課程設計的要求 交通燈系統設計
:利用單片機的定時器功能,令十字路口的紅綠燈交替點亮和熄滅(用實驗箱上的8隻發光二極體分成南北、東西兩組各4隻表示),並且用LED數碼管顯示時間(實驗箱上的8隻數碼管中,用兩端的各2隻表示南北、東西兩組的計時)
我可以幫你做,提供電路圖和源程序
⑶ 利用8051單片機設計一個十字路口交通燈控制器
模擬實例,供參考
⑷ 單片機控制交通燈
ORG 0000H
STA: MOV P0,#11011011B ;干線亮綠燈,支線亮紅燈
MOV P2,#0001000B ;選通LED
MOV P3,#11101111B ;K1列線置0
MOV R7,#3
STA1: JB P3.3,$ ;無按鍵等待
LCALL DELAY30MS ;去抖動
JB P3.3,STA1
JNB P3.3,$ ;等鍵釋放
DJNZ R7,STA1
MOV R6,#200
STA2: LCALL DELAY30MS ;延時30MS
DJNZ R6,STA2 ;延時6秒
MOV P0,#10111011B ;干線亮黃燈,支線亮紅燈
MoV R6,#100
STA3: LCALL DELAY30MS
DJNZ R6,STA3 ;延時3秒
MOV P0,#01111110B ;干線亮紅燈,支線亮綠燈
MOV R5,#4
STA4: MOV R6,#200
STA5: LCALL DELAY30MS
DJNZ R6,STA5
DJNZ R5,STA4 ;延時24秒
MOV P0,#01111101B ;干線亮綠燈,支線亮黃燈
MOV R6,#100
STA6: LCALL DELAY30MS
DJNZ R6,STA6 ;延時3秒
LJMP STA
DELAY30MS:MOV R4,#55
DELAY:MOV R3,#250
DJNZ R3,$ ;1.085us(指令周期)*2*250+2=547.5us
DJNZ R4,DELAY
⑸ 單片機交通燈的設計
4.2.3 系統工作原理
(1)開關鍵盤輸入交通燈初始時間,通過8051單片機P1輸入到系統
(2) 由8051單片機的定時器每秒鍾通過P0口向8255的數據口送信息,由8255的PA 口顯示紅、綠、黃燈的燃亮情況;由8255的PC口顯示每個燈的燃亮時間。
(3)8051通過 設置 各個信號等的燃亮時間、通過8031設置,綠、紅時間分別為60秒、80秒循環由8051的 P0口向8255的數據口輸出。
(4) 通過8051單片機的P3.0位來控制系統是工作或設置初值,當.牌位0就對系統進行初始化,為1系統就開始工作。
(5)紅燈倒計時時間,當有車輛闖紅燈時,啟動蜂鳴器進行報警,3S後然後恢復正常。
(6)增加每次綠燈時間車流量檢測的功能,並且通過查詢P2.0埠的電平是否為低,開關按下為低電平,雙位數碼管顯示車流量,直到下一次綠燈時間重新記入。
(7)綠燈時間倒計時完畢,重新循環。
5.5.2 程序源代碼
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳轉到主程序的開始處
ORG 0003H ;外部中斷0的中斷程序入口地址
ORG 000BH ;定時器0的中斷程序入口地址
LJMP T0_INT ;跳轉到中斷服務程序處
ORG 0013H ;外部中斷1的中斷程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU開中斷,允許T0中斷,T1中斷和外部中斷1中斷
MOV TMOD,#51H ;設置T1為計數方式,T0為定時方式,且都工作於模式1
MOV TH1,#00H ;T1計數器清零
MOV TL1,#00H
SETB TR1 ;啟動T1計時器
SETB EX1 ;允許INT1中斷
SETB IT1 ;選擇邊沿觸發方式
MOV DPTR ,#0003H
MOV A, #80H ;給8255賦初值,8255工作於方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判斷是否要設定東西方向紅綠燈時間的初值,若P3.1為1 則跳轉
MOV A,P1
JB P1.7,RED ;判斷P1.7是否為1,若為1則設定紅燈時間,否則設定綠燈時間
MOV R0,#00H ;R0清零
MOV R0,A ;存入東西方向綠燈初始時間
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入東西方向紅燈初始時間
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;-------------------------------------------
N0: SETB TR0 ;啟動T0計時器
MOV 76H,R7 ;紅燈時間存入76H
N00: MOV A,76H ;東西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,東西方向紅燈亮,南北方向綠燈亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比較R3中的值是否為0,不為0轉到當前指令處執行
;------黃燈閃爍5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黃燈滅
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
CJNE R3,#00H,N1 ;閃爍時間達5秒則退出
;------------------------------------------------------------
N2: MOV R7,#00H
MOV A,R0 ;東西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ; 置8255A口,東西方向綠燈亮,南北方向紅燈亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黃燈閃爍5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,東西,南北方向黃燈亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續亮0.5秒
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黃燈滅
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黃燈持續滅0.5秒
CJNE R3,#00H,N3 ;閃爍時間達5秒則退出
SJMP N00
;------闖紅燈報警程序------
B0: MOV R2,#03H ;報警持續時間3秒
B01: MOV A,R3
JZ N1 ;若倒計時完畢,不再報警
CLR P3.0 ;報警
CJNE R2,#00H,B01 ;判斷3秒是否結束
SJMP N02
;------1秒延時子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;給定時器T0送定時10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判斷延時是否夠一秒,不夠則調用顯示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒計時初值減一
DEC R2 ;報警初值減一
T01: ACALL DISP ;調用顯示子程序
RETI ;中斷返回
;------顯示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二轉十顯示轉換
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;顯示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;顯示個位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------東西方向車流量檢測程序------
T03: MOV A,R3
SUBB A,#00H ;若綠燈倒計時完畢,不再檢測車流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中斷到100次則清零
E1: SJMP N22
;------東西方向車流量顯示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二轉十顯示轉換
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;顯示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;顯示個位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延時4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字元表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
⑹ 交通燈的單片機設計
哥們啊你是不是做畢業設計啊,那還不自己好好做啊,這個作出來很有用啊,這個既不需要擴展口,真的很簡單啊,好好做吧,給你個圖看看吧,基本上就是這個電路就行了啊
程序也很簡單,用定時器就好了啊,中斷也用的到,加油啦,支持你,Myfriends!!!(這個圖中用了8個LED,做交通燈再加上4個就行了,口也夠)
⑺ 基於51單片機的紅綠燈設計
ORG 0000H
MOV DPTR ,#0B00H ;選中8155的命令寄存器,P2.2接CE端,p2.1接I/O
MOV A,#01H ;命令寄存器設為01H=000000001B D0=1A口輸出,D1=0B口輸入
MOVX @DPTR,A
LOOP :MOV DPTR,#0B01H
LED0:MOV A,#0FFH ;第一組燈點亮
MOVX @DPTR,A
MOV R4,#09H
LOOP0:ACALL DELAY
DJNZ R4,LOOP0
MOV A,#11011110B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
LED1:ACALL DELAY ;第二組燈點亮
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
MOV A,#0FFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#11101101B
MOVX @DPTR,A
ACALL DELAY
LED2:MOV R5,#09H ;第三組燈點亮
LOOP1:ACALL DELAY
DJNZ R5,LOOP1
MOV A,#11110011B
MOVX @DPTR,A
ACALL DELAY
ACALL DELAY
ACALL DELAY
SJMP LOOP
DELAY:MOV R3,#02H
LOP3:MOV R1,#85H
LOP1:MOV R2,#0FAH
LOP2:DJNZ R2,LOP2
DJNZ R1,LOP1
DJNZ R3,LOP3
RET
END
⑻ 單片機課程設計:交通燈控制!
我給你發一個看看,是protues的模擬電路圖,可以運行看效果,還有keil的匯編程序,有郵箱給你發去
我給你發了啊!!!下邊是程序:
org 0000h
sjmp main
org 0030h
main: mov p0,#11101110b
acall del1
acall del1
acall del1
acall mmm
mov p0,#11011011b
acall del1
acall del1
mov p0,#11110101b
lcall del1
acall del1
acall del1
acall mmm
sjmp main
del1:mov r0,#0ffh
loop1:mov r1,#0ffh
loop2:djnz r1,loop2
djnz r0,loop1
ret
mmm:mov p1,#0ffh
mov p2,#0ffh
mov r3,#02h
mmm2:mov p1,r3
mov r2,#09h
mmm1:mov p2,r2
acall del1
acall del1
djnz r2,mmm1
djnz r3,mmm2
mov p1,r3
mov r2,#09h
mmm3: mov p2,r2
acall del1
acall del1
djnz r2,mmm3
ret
end
⑼ 基於單片機的交通燈模擬控制系統設計
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]={0x01,0x67,0x12,0x42,0x64,0x48,0x08,0x63,0x00,0x40};
sbit E1=P0^7;
sbit welay1=P2^6;
sbit welay2=P2^7;
sbit SNL=P2^2;
sbit SNY=P2^1;
sbit SNR=P2^0;
sbit EWL=P2^5;
sbit EWY=P2^4;
sbit EWR=P2^3;
void init()
{
P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
E1=0;
TMOD=0x21;
TH0=0x3c; //50ms
TL0=0xb0;
EA=1;
ET0=1;
TF0=0;
TR0=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void display()
{
shi=num/10;
ge=num%10;
P0=table[ge];
welay2=1;
welay1=0;
delay(10);
welay1=1;
P0=table[shi];
welay1=1;
welay2=0;
delay(10);
welay2=1;
}
void time0() interrupt 1 using 1
{
temp++;
temp1++;
TH0=0x3c;
TL0=0xb0;
//display();
TR0=1;
}
void main()
{
init();
while(1)
{
if(temp==0)
{
EWL=0;
SNR=0;
num=31;
temp1=0;
for(i=30;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==600) //
{
EWL=1;
num=6;
j=0;
for(i=12;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
EWY=!EWY; //燈閃爍
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==720)
{
EWY=1;
EWR=0;
SNR=1;
SNL=0;
num=24;
temp1=0;
for(i=24;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==1200)
{
SNL=1;
j=0;
num=6;
for(i=12;i>0;i--)
{
temp2=temp;
SNY=!SNY;
j++;
if(j%2==0)
{
num--;
}
while(temp-temp2!=10)
{
display();
};
}
SNY=1;
EWR=1;
temp=0;
}
}
}
⑽ 急求:單片機匯編語言設計的交通燈,各位大俠幫幫忙 謝謝!!!!!!
這是我以前編的;
AJMP S1
SEVER:CLR EX0
PUSH 34H
PUSH 30H
PUSH 31H
PUSH PSW
PUSH DPH
PUSH DPL
MOV 40H,A
MOV 41H,R7
MOV 42H,R1
MOV 34H,#00010000B
MOV P1,#0FH
MOV R6,#0AH
LAST1:LCALL PTFO3
LCALL LED
LCALL DELAY2
DJNZ R6,LAST1
MOV P1,R0
MOV A,40H
MOV R7,41H
MOV R1,42H
POP DPL
POP DPH
POP PSW
POP 31H
POP 30H
POP 34H
SETB EX0
RETI
PTFO1:MOV P1,R0
LCALL PTFO3
LCALL LED
LCALL DELAY2
DJNZ R2,PTFO1
RET
PTFO2:MOV R0,35H
MOV P1,R0
LCALL PTFO3
LCALL LED
LCALL DELAY1
MOV R0,36H
MOV P1,R0
LCALL DELAY1
DJNZ R2,PTFO2
RET
DELAY1:MOV R7,#0AH
AJMP DELAY
DELAY2:MOV R7,#14H
DELAY:CLR EX0
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#4CH
SETB TR0
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#00H
MOV TH0,#4CH
DJNZ R7,HERE
CLR TR0
SETB EX0
RET
LED:MOV DPTR,#0FF82H
MOV A,#90H
MOVX @DPTR,A
MOV R1,#30H
MOV R7,#02H
MOV DPTR,#0FF80H
LOOP:MOV A,@R1
ADD A,#05H
MOVC A,@A+PC
MOVX @DPTR,A
INC R1
DJNZ R7,LOOP
RET
DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH
PTFO3:MOV A, 34H
CLR C
SUBB A,#01H
JNB PSW.6,NEXT
CLR C
SUBB A,#06H
NEXT:MOV 34H,A
ANL A,#0FH
MOV 30H,A
MOV A,34H
ANL A,#0F0H
SWAP A
MOV 31H,A
RET
END
另外:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP SEVER
ORG 0030H
MAIN:MOV DPTR,#0FF82H
MOV A,#0D1H
MOVX @DPTR,A
WAIT:MOVX A,@DPTR
JB ACC.7,WAIT
MOV A,#00H
MOVX @DPTR,A
MOV A,#2CH
MOVX @DPTR,A
SETB EA
SETB EX0
CLR IT0
CLR 00H
CLR 01H
MOV 60H,#05H ;起始5秒
MOV 61H,#05H ; ;;5秒顯示
MOV 62H,#14H ;20秒
MOV 63H,#20H ;;20秒顯示
MOV 64H,#03H ;;3秒
MOV 65H,#03H ;;3秒顯示
MOV 66H,#0AH ; ;10秒
MOV 67H,#10H ; ;10秒顯示
MAIN1:LCALL SEACH1
JBC 00H,START
AJMP MAIN1
START:MOV 34H,61H
MOV R2,60H
MOV R0,#0FH
LCALL PTFO1
S1:MOV 34H,63H
MOV R0,#96H
MOV R2,62H
LCALL PTFO1
MOV R2,64H
MOV 34H,65H
MOV 35H,#9FH
MOV 36H,#06H
LCALL PTFO2
MOV R2,62H
MOV 34H,63H
MOV R0,#69H
LCALL PTFO1
MOV R2,64H
MOV 34H,65H
MOV 35H,#6FH
MOV 36H,#09H
LCALL PTFO2
AJMP S1
SEVER:CLR EX0
PUSH 34H
PUSH 30H
PUSH 31H
PUSH PSW
PUSH DPH
PUSH DPL
MOV 40H,A
MOV 41H,R7
MOV 42H,R1
MOV 34H,67H
MOV P1,#0FH
MOV R6,66H
LAST1:LCALL PTFO3
LCALL LED
LCALL DELAY2
DJNZ R6,LAST1
MOV P1,R0
MOV A,40H
MOV R7,41H
MOV R1,42H
POP DPL
POP DPH
POP PSW
POP 31H
POP 30H
POP 34H
SETB EX0
RETI
PTFO1:MOV P1,R0
LCALL PTFO3
LCALL LED
LCALL DELAY2
MOV DPTR,#0FF82H
MOVX A,@DPTR
ANL A,#07H
JZ NEXT1
LCALL KEY
JBC 01H,NEXT11
NEXT1: DJNZ R2,PTFO1
RET
NEXT11:LCALL SEACH1
JBC 00H,NEXT1
SJMP NEXT11
PTFO2:MOV R0,35H
MOV P1,R0
LCALL PTFO3
LCALL LED
LCALL DELAY1
MOV R0,36H
MOV P1,R0
LCALL DELAY1
MOV DPTR,#0FF82H
MOVX A,@DPTR
ANL A,#07H
JZ NEXT2
LCALL KEY
JBC 01H,NEXT12
NEXT2: DJNZ R2,PTFO2
RET
NEXT12:LCALL SEACH1
JBC 00H,NEXT2
SJMP NEXT12
DELAY1:MOV R7,#0AH
AJMP DELAY
DELAY2:MOV R7,#14H
DELAY:CLR EX0
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#4CH
SETB TR0
HERE:JBC TF0,NEXT13
SJMP HERE
NEXT13:MOV TL0,#00H
MOV TH0,#4CH
DJNZ R7,HERE
CLR TR0
SETB EX0
RET
LED:MOV DPTR,#0FF82H
MOV A,#90H
MOVX @DPTR,A
MOV R1,#30H
MOV R7,#02H
MOV DPTR,#0FF80H
LOOP:MOV A,@R1
ADD A,#05H
MOVC A,@A+PC
MOVX @DPTR,A
INC R1
DJNZ R7,LOOP
RET
DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH
PTFO3:MOV A, 34H
CLR C
SUBB A,#01H
JNB PSW.6,NEXT
CLR C
SUBB A,#06H
NEXT:MOV 34H,A
ANL A,#0FH
MOV 30H,A
MOV A,34H
ANL A,#0F0H
SWAP A
MOV 31H,A
RET
KEY:MOV DPTR ,#0FF82H
MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#0AH,KEY1
SETB 00H
AJMP RETUN
KEY1:CJNE A,#0BH,KEY2
SETB 01H
AJMP RETUN
KEY2:CJNE A,#0CH,KEY3
ACALL SEACH2
MOV DPTR ,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR1
ERROR1:JC NEXT3
MOV 61H,#05H
AJMP RETUN
NEXT3:SWAP A
MOV 61H,A
ACALL SEACH2
MOV DPTR, #0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR2
ERROR2:JC NEXT4
MOV 61H,#05H
AJMP RETUN
NEXT4:ORL 61H,A
MOV A,61H
LCALL BCDH
MOV 60H,A
AJMP RETUN
KEY3:CJNE A,#0DH,KEY4
ACALL SEACH2
MOV DPTR, #0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR3
ERROR3:JC NEXT5
MOV 63H,#20H
AJMP RETUN
NEXT5:SWAP A
MOV 63H,A
ACALL SEACH2
MOV DPTR ,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR4
ERROR4:JC NEXT6
MOV 63H,#20H
AJMP RETUN
NEXT6:ORL 63H,A
MOV A,63H
LCALL BCDH
MOV 62H,A
AJMP RETUN
KEY4:CJNE A,#0EH,KEY5
ACALL SEACH2
MOV DPTR ,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR5
ERROR5:JC NEXT7
MOV 65H,#03H
AJMP RETUN
NEXT7:SWAP A
MOV 65H,A
ACALL SEACH2
MOV DPTR ,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR6
ERROR6:JC NEXT8
MOV 65H,#03H
AJMP RETUN
NEXT8:ORL 65H,A
MOV A,65H
LCALL BCDH
MOV 64H,A
AJMP RETUN
KEY5:CJNE A,#0FH,RETUN
ACALL SEACH2
MOV DPTR ,#0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR7
ERROR7:JC NEXT9
MOV 67H,#10H
AJMP RETUN
NEXT9:SWAP A
MOV 67H,A
ACALL SEACH2
MOV DPTR, #0FF80H
MOVX A,@DPTR
ANL A,#3FH
CJNE A,#09H,ERROR8
ERROR8:JC NEXT10
MOV 67H,#10H
AJMP RETUN
NEXT10:ORL 67H,A
MOV A,67H
LCALL BCDH
MOV 66H,A
AJMP RETUN
RETUN: RET
SEACH1:MOV DPTR,#0FF82H
MOVX A,@DPTR
ANL A,#07H
JZ RETUN1
LJMP KEY
RETUN1:RET
SEACH2:MOV DPTR,#0FF82H
MOVX A,@DPTR
ANL A,#07H
JNZ RETUN3
SJMP SEACH2
RETUN3:RET
;;(20)標號:BCDH 功能:單位元組BCD碼整數轉換成單位元組十六進制整數
;;入口條件:待轉換的單位元組BCD碼整數在累加器A中。
;;;出口信息:轉換後的單位元組十六進制整數仍在累加器A中。
;;;;;影響資源:PSW、A、B、R4 堆棧需求: 2位元組
BCDH: MOV B,#10H ;;;分離十位和個位
DIV AB
MOV R4,B ;;;暫存個位
MOV B,#10 ;;;;將十位轉換成十六進制
MUL AB
ADD A,R4 ;;;;;;按十六進制加上個位
RET
END
這兩種都是我以前做的,都可以
和你那個好像有點不同
改下參數就可以了