仿真原理图如下(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)
|