a)单个按键与多个LED灯(位操作—输入与字节操作—输出)—判断与子程序
此处只是将输出指令由位指令换成了字节指令,而输入判断仍然是位判断指令。
ORG 0000H
MAIN:
;CLR C
MOV C,P2.0 ;获取P2.0位状态送位累加器;位与字节转换需要判断指令
JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE ,
JNC位累加器为0转移到ZIJIE,否则顺序执行。
MOV C,P1.0
ZIJIE:;子程序起始
MOVA,#00H
MOVP3,A
RET;子程序结束并返回调用处
END
b)单个按键与多个LED灯(位操作—输入与位、字节操作—输出)
l位输入控制位或字节输出
ORG 0000H
MAIN:
;CLR C
MOV C,P1.0 ;获取P1.0位状态送位累加器;位与字节转换需要判断指令
JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE ,JNC位累加器为0转移到ZIJIE,否则顺序执行。
MOV P0.0,C ;送位累加器到P0.0位等,P1.0位状态变化则输出随之变化
ACALLDELAY;调延时子程序
MOV P0.1,C
ACALLDELAY
MOV P0.2,C
ACALLDELAY
MOV P0.3,C
ACALLDELAY
MOV P0.4,C
ACALLDELAY
MOV P0.5,C
ACALLDELAYMOV P0.6,C
ACALLDELAYMOV P0.7,CACALLDELAY
SJMP MAIN ;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回
ZIJIE:
MOV A,#00H
MOV P2,AACALLDELAY
MOV P3,AACALLDELAY
CLR AMOV P0,A
MOV P1,AACALLDELAY
RET
DELAY:;延时子程序-这是一个非常有用、而且常见的一个子程序
MOV R5,#04H;将16进制数04H传递给寄存器R5
F1:
DJNZR7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令
RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序
END
l位输入控制字节输出
c)单个按键与单个电机控制—开环控制
单“位”—P口1位--单个灯—位输出,单个按键控制—硬控制与软控制
一个按键,一盏照明灯,一个继电器。硬件接口问题—线路连接、硬件硬驱动问题(程序称为软驱动)。
一个按键,两盏灯(指示、照明),一个继电器。硬件接口问题—线路连接、硬件硬驱动问题。程序称为软驱动:就是利用两个端口,通过延时或计时器完成转换。
说明:
硬件特性,驱动与控制信号,程序编写
由继电器引出的强电驱动电器的控制问题,如电动机—交流电机、直流电机、步进电机、伺服电机;单项或多项
1.单个开关(按键)与多个LED灯→数码管→点阵问题—最小系统—输出扩展
a)单个按键与多个LED灯(位操作—输入与字节操作—输出)
b)单个按键与多个LED灯—数码管(位操作—输入与字节操作—输出)—数组
c)单个按键与多个数码管(位操作—输入与多字节操作—输出)—静态—数组
d)多个按键与多个数码管(位操作—输入与字节操作—输出)—动态—扫描函数
e)单个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—静态
f)多个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—动态
3.单个开关(按键)与多个LED灯→数码管→点阵问题—输出扩展—最小系统
a)单个按键,多个LED灯(位操作—输入与字节操作—输出)
l单输入与多输出的电子线路—静态特性—结构与联接
对于多个LED灯(LED数< 8个)来说(图4),在硬件连接方面、软件编写方面均没有大的难点。按照单个LED的连接方式增加便可。控制程序编写基本上也是重复性工作—用COPY简单修改即可。
对于LED数= 8个或是8的倍数的情况,需要解决两个方面的问题。一个是硬件的连接方法,一个是控制程序的编写指令—用词方法—字节操作指令。硬件方面可以用单个或多个成组(NET)的LED或总线接口、单个接口扩展等实现。程序编写则可以使用重复性工作、可以使用字节操作指令而摒弃位操作指令,使得程序简洁、可读性好、硬件运行效率高。
对于LED数> 8个且不能被8整除的,仍需要用位操作指令。参见图5,指令如下:
l单输入与多输出电子线路的控制指令—动态特性
ORG0000H
MAIN:
MOVA,#00H
MOVP1,A;P1口的状态,低电平为关
MOVC,0A0H;按位操作,P2.0口的状态—按键定,关为低电平,开为高电平
MOVP1.0,C;P1.0口的状态,按位高电平显示灯亮,低电平显示灯灭
MOVP1.1,C
MOVP1.2,C
MOVP1.3,C;P1.3口的状态,
MOVP1.7,C
MOVP2.1,C
MOVP2.2,C
MOV P2.4,C
MOVP3.0,C
MOVP3.3,C
MOVP3.5,C
MOVP3.7,C
MOVP0.0,C
MOVP0.4,C
END
对于LED数> 8个且能被8整除的需要用字节操作指令。参见图2所示。
ORG0000H
START:
MOVA,#00H
MOVP1,A
MOVC,0A0H
JB0A0H,GUAN;按位操作;按P2.0口的状态获得两种显示结果,0跳转
MOVP1,#0FFH;按P2.0口的状态为非1时的顺序显示本指令
RET;返回控制指令
GUAN :;程序控制指令入口,跳转入口
MOVP2,#0FFH;按P2.0口的状态为1时的转移显示本指令
RET;子程序返回控制指令
END
程序说明:
每个口用位赋值指令来开关P1口的各个LED。也可以用字节赋值指令一次性的开关8位P1口全部LED。
P1=0;// P1口8位置低电平,点亮8个LED
P1=1;// P1口8位置高电平,关闭8个LED。图5为多个LED灯-单个按键的运行结果与汇编语言。
上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。
ORG 0000H
START:
MOVA,#0FFH
MOVP3,A
MOVP1,A
MOV C, 0A0H
JNB0A0H,GUAN
MOVP1,#00H
RET
GUAN :
MOVP3,#00H
RET;可以产生闪烁效果
END