实验一 流水灯
学习实验仪和KEIL软件的使用。流水灯程序(可选其他实验)。
采用ISP下载(或仿真器在线仿真)两种方式调试运行程序,编写流水灯程序(采用软件延时每隔0.5秒左右依次点亮八个LED)。
ISP下载:第一步 接USB转串口线。执行STC单片机下载软件,下载流水灯HEX程序,观察8个LED发光管轮流闪烁。
如果采用仿真器在线仿真:将仿真器的USB线连接电脑,把单片机的CPU拔出,将仿真器的仿真头插入单片机的CPU座。编写程序,编译生成HEX文件,点击Debug图标,进入Debug调试模式,全速或单步执行。观察8个发光管轮流闪烁。
实验代码
org 0000h
ajmp loop
org 0080h
loop:
MOV P1,#00000110B //1
lcall delay
MOV P1,#01011011B//2 11011010B
lcall delay
MOV P1,#01001111B//3 11110010B
lcall delay
MOV P1,#01100110B//4 01100110B
lcall delay
MOV P1,#01101101B//5 10110110B
lcall delay
MOV P1,#01111101B//6 10111110B
lcall delay
MOV P1,#00000111B//7 11100000B
lcall delay
AJMP LOOP
//也可以使用移位的方法控制流水灯,代码更加简便
//如RR等
delay: mov r5,#40
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
若使用移位指令控制流水灯:
ORG 0000H
AJMP START
ORG 0080H
START:
MOV P1, #0 ; 设置P1口为输出口,初始值为全灭
LOOP:
MOV R1, #00000001B ; 设置R1为二进制数00000001,表示第一个LED点亮
MOV R2, #8 ; 设置R2为8,表示总共有8个LED
SHIFT:
MOV P1, R1 ; 将R1的值输出到P1口,点亮对应的LED
ACALL DELAY ; 调用延时函数,延时0.5秒
ROL R1 ; 左移R1,将下一个LED点亮
DJNZ R2, SHIFT ; R2减1,如果R2不为0,则跳转到SHIFT继续点亮下一个LED
SJMP LOOP ; 跳转到LOOP,重新开始循环
DELAY:
MOV R3, #0FFH ; 设置R3,用于延时计数
DELAY_LOOP:
MOV R4, #0FFH ; 设置R4,用于延时计数
DELAY_LOOP2:
DJNZ R4, DELAY_LOOP2 ; R4减1,如果R4不为0,则跳转到DELAY_LOOP2继续计数
DJNZ R3, DELAY_LOOP ; R3减1,如果R3不为0,则跳转到DELAY_LOOP继续计数
RET
END
实验二 继电器编程-控制继电器
继电器编程,控制继电器通断,独立按键单键控制继电器。
实验代码
ORG 0H
MOV P2, #0FFH ;初始化
MOV P1, #0FFH
LOOP:
MOV A,P2 ;把P2的值赋给累加器A
CPL A ;取反
ANL A,#001H ;将取反后的A与001H按位相与
JZ LOOP ;若按钮未被按下,则跳转LOOP
LCALL DELAY
CPL P1.3 ;乒乓球开关
SJMP LOOP
DELAY: MOV R5,#20 ;延时子程序
D1: MOV R6,#40
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
结果和分析
程序运行后,继电器吸合,吸合时可以听到“搭”的一声。(P1键设计为乒乓球开关,即按一下开,再按一下关)
—如图: