单片机的点亮一盏灯程序

单片机的点亮一盏灯程序,第1张

MAIN: MOV P1,#11111110B点亮P1.0所接的灯

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7753759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存