期末考完试无聊,整理整理本学期的单片机学习经历。本系列包含吉林大学单片机课程的三、四、五、六、八次实验的详细教程及可运行代码(原创)。
写这个教程是为了向对单片机不感兴趣和学习过程中卡住的童鞋提供一条坦途,可能你只是想拿个成绩,亦或是想认真学习却卡在某个点上,都可以参考本教程,大佬请跳过。
单片机的前两个实验没代码,都是基础知识学习(软件的使用什么的),就没必要写了,直接从实验三开始。
实验三要求——默认整圈旋转,按下S1后旋转半圈后反向旋转半圈,如此重复直到松开S1,松开后以仍以默认方式旋转。旋转过程中将步数显示在数码管上。
程序整体思路比较简单,使用一个寄存器记录步数(双四拍),然后根据记录执行相应的代码段,向IN1和IN2输出对应的脉冲即可,数码管的显示方式为串入并出,通过P4.4(时钟口)和P4.5(数据口)分别输入24位数据,字码就可以稳定显示,这种显示方式不同于微机原理实验的数码管显示方式,这种方式只需要传入一次三个数码管的数据即可稳定显示,更改时再传入24位数据即可替换先前的字码。
ORG 0000H
LJMP START
ORG 000BH
LJMP T0IN
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字码
ORG 0040H
START:
P4 EQU 0C0H
P4SW EQU 0BBH
SLED EQU P4.5
SCLK EQU P4.4
HCONT EQU 10
TCOUNT EQU 6
F1 EQU PSW.1
MOV P4SW,#30H
SETB P1.1
SETB P1.4
MOV SP,#30H
MOV TMOD,#01H
MOV IE,#82H
MOV IP,#02H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TCON,#10H
MOV R0,#TCOUNT
MOV R1,#01H
MOV R2,#00H
MOV R3,#HCONT
CLR F0
CLR F1
DISPLAY:
MOV P0,R2
MOV DPTR,#TABLE
MOV B,#100
MOV A,R2
DIV AB
MOVC A,@A+DPTR
MOV R4,A
MOV A,B
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV R5,A
MOV A,B
MOVC A,@A+DPTR
MOV R6,A
MOV A,R6
ACALL PUTLOOP
MOV A,R5
ACALL PUTLOOP
MOV A,R4
ACALL PUTLOOP
CHECK:
CJNE A,#0FFH,CHECK
LJMP DISPLAY
PUTLOOP:
MOV R7,#08H
SHIFT:
CLR SCLK
RLC A
MOV SLED,C
SETB SCLK
DJNZ R7,SHIFT
RET
T0IN:
CLR TR0
DJNZ R0,COUNT
MOV R0,#TCOUNT
JNB P3.6,STEP2
JMP STEP1
COUNT:
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
RETI
STEP1:
INC R2
CLR F0
CJNE R1,#01H,C2
LJMP S0
C2:
CJNE R1,#02H,C3
LJMP S1
C3:
CJNE R1,#03H,C4
LJMP S2
C4:
LJMP S3
STEP2:
INC R2
SETB F0
LC1:
CJNE R1,#01H,LC2
LJMP S0
LC2:
CJNE R1,#02H,LC3
LJMP S1
LC3:
CJNE R1,#03H,LC4
LJMP S2
LC4:
LJMP S3
SEND:
JB F0,HALF
INC R1
CJNE R1,#05H,SRET
MOV R1,#01H
JMP SRET
HALF:
JB F1,HALF1
INC R1
CJNE R1,#05H,HALFCOUNT
MOV R1,#01H
HALFCOUNT:
DJNZ R3,SRET
MOV R3,#HCONT
CPL F1
JMP SRET
HALF1:
DJNZ R1,HALF1COUNT
MOV R1,#04H
HALF1COUNT:
DJNZ R3,SRET
MOV R3,#HCONT
CPL F1
SRET:
MOV A,#0FFH
JMP COUNT
S0:
CLR P3.2
SETB C
MOV P1.0,C
JMP SEND
S1:
SETB P3.2
SETB C
MOV P1.0,C
JMP SEND
S2:
SETB P3.2
CLR C
MOV P1.0,C
JMP SEND
S3:
CLR P3.2
CLR C
MOV P1.0,C
JMP SEND
WAIT:
MOV R0,#0AFH
L1:
MOV R1,#0FFH
L2:
DJNZ R1,L2
DJNZ R0,L1
RET
END
若有问题请斧正,欢迎留言交流。(转载请注明)