ACALL YS 调用延时子程序,让P1.0所接的灯亮一小段时间
MOV P1,#11111101B点亮P1.1所接的灯
ACALL YS 调用延时子程序,让P1.1所接的灯亮一小段时间
MOV P1,#11111011B点亮P1.2所接的灯
ACALL YS 调用延时子程序,让P1.2所接的灯亮一小段时间
MOV P1,#11110111B点亮P1.3所接的灯
ACALL YS 调用延时子程序,让P1.3所接的灯亮一小段时间
MOV P1,#11101111B点亮P1.4所接的灯
ACALL YS 调用延时子程序,让P1.4所接的灯亮一小段时间
MOV P1,#11011111B点亮P1.5所接的灯
ACALL YS 调用延时子程序,让P1.5所接的灯亮一小段时间
MOV P1,#10111111B点亮P1.6所接的灯
ACALL YS 调用延时子程序,让P1.6所接的灯亮一小段时间
MOV P1,#01111111B点亮P1.7所接的灯 ACALL YS 调用延时子程序,让P1.7所接的灯亮一小段时间
LJMP MAIN 循环.这回用长调用指令LJMP,当程序比较长的时候就用
LJMP YS: 延时子程序YS,功能是能让LED亮起来或者灭掉一小段时间
MOV R1,#200 让灯亮灭时间的长短也就是延时的长短跟#号后面的数据有关
D: MOV R2,#200 延时长点#号后面的数据就大点,延时短点#号后面的数据
T: MOV R3,#200 就小点,但#号后面最大的数据是255
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET 子程序返回指令,子程序的设计一般都是因为主程序要调用它, 调用完是要返回到主程序继续运行下一个语句的
END
一个简单的开关控制一盏灯的c程序如下:
#include<reg52.h>
sbit S1=P1^4 //将S1位定义为P1^4,检测独立按键
sbit led0=P1^0 //将led0定义为P1.0口的LED
/***********************************************************************************************************************************************
延时函数
***********************************************************************************************************************************************/
void delay(void)
{
unsigned int i
for(i=5000i>0i--)
}
/***********************************************************************************************************************************************
主函数
***********************************************************************************************************************************************/
void main(void)
{
while(1)
{
if(S1==0) //判断是否有键按下
{
delay() //有键按下,延时去抖,真正应用时要少用这种延时,占用时间,用定时器延时或一个寄存器循环检测10多次按键
if(F0==0) //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,
//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用
{
F0=1 //F0置1,表示这次按键按下已处理
led0=~led0 //将LED亮灭状态取反
}
}
else //S1=1说明按键释放
{
F0=0 //F0清零,清按键已处理标志
}
}
}
用MCS51单片机汇编语言编写的点亮一只LED灯源程序LED1.ASM,代码如下:ORG 0000H
AJMPMAIN
ORG 0030H
MAIN:MOV A,#FEH
MOV P1,A
AJMP $
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)