led应该是一个变量,是代表led灯 亮或者灭的一个变量。 当你按下开关后,s1==0,就执行 led=!led 这条语句。 led=!led 的意思就是取反的意思,即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;}
使用四个独立按键控制四个LED灯亮灭的汇编程序怎么弄?
单片机的P10-P13接四个发光二极管L1-L4的阴极,P14-P17接四个开关K1-K4
程序:
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
RR A
ORl A,#0F0H
MOV P1,A
SJMP START
可以检测单个按键,也可以同时检测多个按键
过程:开始--读P1口数据到A--A中的数据右移4次--A中的内容和F0H相或--A中的数据送到P1口--回到开始
MAIN: MOV P1,#11111110B;点亮P10所接的灯
ACALL YS ;调用延时子程序,让P10所接的灯亮一小段时间
MOV P1,#11111101B;点亮P11所接的灯
ACALL YS ;调用延时子程序,让P11所接的灯亮一小段时间
MOV P1,#11111011B;点亮P12所接的灯
ACALL YS ;调用延时子程序,让P12所接的灯亮一小段时间
MOV P1,#11110111B;点亮P13所接的灯
ACALL YS ;调用延时子程序,让P13所接的灯亮一小段时间
MOV P1,#11101111B;点亮P14所接的灯
ACALL YS ;调用延时子程序,让P14所接的灯亮一小段时间
MOV P1,#11011111B;点亮P15所接的灯
ACALL YS ;调用延时子程序,让P15所接的灯亮一小段时间
MOV P1,#10111111B;点亮P16所接的灯
ACALL YS ;调用延时子程序,让P16所接的灯亮一小段时间
MOV P1,#01111111B;点亮P17所接的灯 ACALL YS ;调用延时子程序,让P17所接的灯亮一小段时间
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
写单片机P0循环点亮八盏灯的程序并不复杂,只需要实现一个循环点亮的过程,就可以实现了。
一、硬件接线
首先,电路接线是最重要的环节,需要将外部组件与单片机核心引脚相连接,如接线正确,接地和电源,以及led灯和信号脚之间的接法、灯丝与中断脚的线路等,全部调整正确才能正常工作。
二、编程 *** 作
接着,编写程序,设置数字输出端口,将接线好的八盏灯分别设定为1-8口,编写时序程序,循环点亮8个信号脚和led灯,进行点亮和关灯,完成点亮循环工作。
三、调试程序
最后,就可以进行程序调试,将调试好的程序导入单片机,上电启动,查看8个信号脚的点亮情况,运行效果达到预期,即可完成点亮循环程序的编写。
以上是我关于单片机P0循环点亮八盏灯的程序编写步骤,希望能够帮助您更好地理解并完成编写程序,把您的设计想法实现出来!
#include "reg51h"
main()
{
unsigned int i,j;
while(1)
{
P1=0xfe; //点亮第一个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfd; //点亮第二个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfb; //点亮第三个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xf7; //点亮第四个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xef; //点亮第五个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xdf; //点亮第六个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xbf; //点亮第七个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0x7f; //点亮第八个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
}
或:
#include "reg51h"
void delay(unsigned int t)
{
unsigned inti,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char w,i;
while(1)
{
w=0xfe;
for (i=0;i<8;i++)
{
P1=w; //循环点亮LED
w<<=1; //点亮灯的位置移动,最低位补0
w=w|0x01; //将最低位置1
delay(500); //延时
}
}
}
或:
#include "reg51h"
//程序中使用_crol_函数,所以要包含头文件"intrinsh"
#include "intrinsh"
void delay(unsigned int t)
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char temp;
temp=0xfe;
while(1)
{
P1=temp;
delay(500); //延时
temp=_crol_(temp,1); //点亮LED的位置循环左移一位
}
}
用位定义的方法定义端口,例如:sbit LED0=P1^0; sbit LED1=P1^1sbit LED7=P1^7;
接下来,LED0=0;//点亮第一个灯 延时一段时间 LED1=0;//点亮第二个灯 依次点亮。
如下即可:
#include<reg52h>void main()
{
unsigned int i, j;
P1 = 85;
while(1) {
P1 ^= 255;
for(i = 100; i > 0; i--) for(j = 800; j > 0; j--);
}
}
以上就是关于单片机按键控制LED灯亮灭程序怎么做到的全部的内容,包括:单片机按键控制LED灯亮灭程序怎么做到的、单片机的点亮一盏灯程序、单片机p0循环点亮八盏灯的程序怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)