外部中断的优先级是高于定时器中断的。首先是触发外部中断嘛,在外部中断程序里面开定时器中断,定时器设置为50ms,这个直接装初值大概46000(晶振12m)的样子,具体你自己算一下。然后在调用定时器中断程序里面肯定是要有个标志位的,这个标志位会累加n个定时器时间直到8s,然后在这个定时器中断程序里面不断检测32口电平就行了,如果变回高电平就把灯在点亮(比如在这句直接将flag赋到设定的技术最大值)就行了。最好用下降沿触发,低电平触发容易出问题总感觉,可能你程序逻辑是完全正确的,但是仿真或者实物的时候会出问题。
#include“reg52h”
void yanshi()
{
};/////延伸函数一秒根据晶体的频率自己设置也可以用定时器的中断来设置1秒时间也可以用软件定时器;
mian()
{
p1=0xff;
yanshi();
p1=0x00;
yanshi();
}
你粘的这个程序只是一部分,很多函数的定义根本没有粘出来,别人怎么给你解释啊,LED_Toggle() 这个函数实现的就是闪烁的功能,如何实现要看这个函数如何定义的,Delay(1000)
这个函数如何实现1ms的延时也是需要看这个函数的如何定义的,根据上面的初始化这个延时应该是由SysTick这个系统定时器的中断来实现的
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口--回到开始
首先实现LED灯的点亮和熄灭,控制连接LED灯的管脚输出高低电平就可以实现。如果电流比较大可以增加三极管驱动电路。10秒定时可以用定时器实现,设置一个1秒的定时器。上电点亮LED灯,并开始计时,10秒时间到熄灭LED就可以了。
剪了一段程序你试试吧:
#include <reg51h>
#define uint unsigned int
#define uchar unsigned char
#define u_s 50000//12MHz晶振
sbit LED=P1^0; //LED出端
uchar count,second=0; //标志变量
/
定时器0中断子函数
12T芯片,12MHz晶体,定时50MS
/
void clock_T0(void) interrupt 1
{
TH0=(65536-u_s)/256;
TL0=(65536-u_s)%256;
if(count++==20) //1S
{
count=0; //次数归0
second++; //秒标志加1
if(second==3)
{
second=0; //60S后秒标志归0
LED=~LED;
}
}
}
main()
{
IE=0x8a; //开启总中断允许定时器0/1响应中断
TMOD=0x11; //设置定时器0/1的工作于Mode1模式计数满值65536
TH0=(65536-u_s)/256; //计数器高8位填值
TL0=(65536-u_s)%256; //计数器高8位填值
while(1)
{
TR0=1;
}
}
首先要将你的单片机或者dsp的时钟转化成1秒或者1毫秒,转换的方法很多最简单的就是分频,这样做了之后写一个简单的程序使得某个变量比如说M即时一秒之后将你接的那个引脚的电平拉高或清零,使得led亮一秒。看得你接法怎么接的。然后第二步就是M大于1的时候将led熄灭(电平高低看你的接法而定)然后将m的值大于5时请一次零就ok了
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
CLR P10
MOV R2,#10
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
DJNZ R2,T0E
CPL P10
MOV R2,#10
T0E:
RETI
END
以上就是关于求实现51单片机按下按钮LED灯亮1秒后熄灭全部的内容,包括:求实现51单片机按下按钮LED灯亮1秒后熄灭、请问,单片机控制8个LED灯同时亮 同时灭(间隔1秒)的程序、求大神。为什么这个程序会实现LED的亮和灭。还有就是定时1ms是怎么具体实现的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)