仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- ORG 0000H;程序從0000h開始存放
- START: MOV SP,#60H;設置堆棧首地址
- MOV SCON,#01010000B;方式1,允許接收
- MOV TMOD,#20H;定時器工作方式1
- ORL PCON,#10000000B;波特率倍數
- MOV TH1,#0F3H;設置定時初始值
- MOV TL1,#0F3H;設置定時初始值
- SETB TR1;啟動定時器1
- MOV R6,#4;給初始值
- LJMP LOOP;跳轉到LOOP
- A1: CJNE R6,#0,A2;如果R6不等于0,則跳轉
- MOV P1,#0FEH;點燈
- LCALL DELAY130MS;延時
- MOV P1,#0FDH
- LCALL DELAY130MS
- MOV P1,#0FBH
- LCALL DELAY130MS
- MOV P1,#0F7H
- LCALL DELAY130MS
- MOV P1,#0EFH
- LCALL DELAY130MS
- MOV P1,#0DFH
- LCALL DELAY130MS
- MOV P1,#0BFH
- LCALL DELAY130MS
- MOV P1,#07FH
- LCALL DELAY130MS
- A2:CJNE R6,#1,A3;如果R6不等于1,則跳轉
- MOV P1,#07FH
- LCALL DELAY130MS
- MOV P1,#0BFH
- LCALL DELAY130MS
- MOV P1,#0DFH
- LCALL DELAY130MS
- MOV P1,#0EFH
- LCALL DELAY130MS
- MOV P1,#0F7H
- LCALL DELAY130MS
- MOV P1,#0FBH
- LCALL DELAY130MS
- MOV P1,#0FDH
- LCALL DELAY130MS
- MOV P1,#0FEH
- LCALL DELAY130MS
- A3:CJNE R6,#2,A6;如果R6不等于2,則跳轉
- MOV P1,#0E7H
- LCALL DELAY130MS
- MOV P1,#0DBH
- LCALL DELAY130MS
- MOV P1,#0BDH
- LCALL DELAY130MS
- MOV P1,#7EH
- LCALL DELAY130MS
- A6:CJNE R6,#3,A5;如果R6不等于3,則跳轉
- MOV P1,#7EH
- LCALL DELAY130MS
- MOV P1,#0BDH
- LCALL DELAY130MS
- MOV P1,#0DBH
- LCALL DELAY130MS
- MOV P1,#0E7H
- LCALL DELAY130MS
- A5: JB P2.0,A9
- INC R6
- CJNE R6,#5,A9
- MOV R6,#0
- A9:CJNE R6,#4,LOOP;如果R6不等于4,則跳轉
- MOV P0,#0FFH
- SJMP LOOP;跳轉
- A4:LJMP A1;跳轉
- LOOP: JNB RI,A4;如果RI不是1,則跳轉
- CLR RI;清零
- MOV A,SBUF;把接收到的數據給累加器
- CJNE A,#30H, B1;如果累加器A不等于'0',則跳轉
- MOV R6,#0
- LCALL MSG1;調用子程序
- B1: CJNE A,#31H,B2;如果累加器A不等于'1',則跳轉
- MOV R6,#1
- LCALL MSG2;調用子程序
- B2: CJNE A,#32H,B3;如果累加器A不等于'2',則跳轉
- MOV R6,#2
- LCALL MSG3;調用子程序
- B3: CJNE A,#33H,B4;如果累加器A不等于'3',則跳轉
- MOV R6,#3
- LCALL MSG4;調用子程序
- B4: CJNE A,#34H,B5;如果累加器A不等于'4',則跳轉
- MOV R6,#4
- LCALL MSG5;調用子程序
- MSG1: MOV DPTR,#M1
- LCALL PRINT;調用中斷程序
- B5:SJMP LOOP;跳轉
- MSG2: MOV DPTR,#M2;取M2首地址給程序指針
- LCALL PRINT
- SJMP LOOP
- MSG3: MOV DPTR,#M3;取M3首地址給程序指針
- LCALL PRINT
- SJMP LOOP
- MSG4: MOV DPTR,#M4;取M4首地址給程序指針
- LCALL PRINT
- SJMP LOOP
- MSG5: MOV DPTR,#M5;取M5首地址給程序指針
- LCALL PRINT
- SJMP LOOP
- PRINT: MOV R0,#00H
- DP1: MOV A,R0
- MOVC A,@A+DPTR;查表
- CJNE A,#00H,OUTPUT;如果累加器A不等于00H,則跳轉
- RET
- DELAY130MS: ;延時130ms
- MOV R4,#255
- DELAY10MSA:
- MOV R5,#255
- DJNZ R5,$
- DJNZ R4,DELAY10MSA
- RET
- OUTPUT: MOV SBUF,A
- JNB TI,$
- CLR TI
- INC R0
- SJMP DP1
- M1: DB 'Light_Mode0',0DH,00H;發送給pc端的字符串
- M2: DB 'Light_Mode1',0DH,00H;發送給pc端的字符串
- M3: DB 'Light_Mode2',0DH,00H;發送給pc端的字符串
- M4: DB 'Light_Mode3',0DH,00H;發送給pc端的字符串
- M5: DB 'Light_OFF',0DH,00H;發送給pc端的字符串
- END
復制代碼
全部資料51hei下載地址:
(RS232串口)基于 51 單片機的多種流水燈上位機控制系統.rar
(114.22 KB, 下載次數: 17)
2020-10-24 21:27 上傳
點擊文件名下載附件
|