❶ 51单片机怎么用汇编实现流水灯循环点亮,要求亮1秒熄灭,等待一秒后下一个才点亮
嘿嘿 俺可以帮你噢
1 给你一个算法:
可以利用定时计数器0 定时50毫秒 允许中断 再设置一个软件计数器(初始值为20)
每当定时器定时时间到即50毫秒 计入中断服务程序后 软件计数器减1
等于0时 表示1秒钟到( 要重新给软件计数器送初值) 同时根据用户标志FAL1=1 则
显示内容左移 同时显示 并将用户标志FAL1取反
否则 显示全灭 并将用户标志FAL1取反。具体指导,可以参见右上角的网络私信。
呵呵 满意就选满意回答
❷ 求实现51单片机按下按钮LED灯亮1秒后熄灭
外部中断的优先级是高于定时器中断的。首先是触发外部中断嘛,在外部中断程序里面开定时器中断,定时器设置为50ms,这个直接装初值大概46000(晶振12m)的样子,具体你自己算一下。然后在调用定时器中断程序里面肯定是要有个标志位的,这个标志位会累加n个定时器时间直到8s,然后在这个定时器中断程序里面不断检测3.2口电平就行了,如果变回高电平就把灯在点亮(比如在这句直接将flag赋到设定的技术最大值)就行了。最好用下降沿触发,低电平触发容易出问题总感觉,可能你程序逻辑是完全正确的,但是仿真或者实物的时候会出问题。
❸ 51单片机控制led灯亮两秒灭一秒 用单片机编程,不用c语言。用中断和循环两种,谢谢
您好,这样:
P0=0x00;
if(a==20)
{
a=0;
P0=0x01;
}
如果你是要实现一秒钟亮,一秒钟灭,你可以这样
D=0x00;
while(1)
{
if(a==20)
{
a=0;
D=~D;
}
}其中D是led对应的一个io口(一定要先定义D)
❹ 求实现51单片机按下按钮LED灯亮1秒后熄灭
要实现51单片机按下按钮LED灯亮1秒后熄灭,这很简单,检测到按下按钮后点亮LED灯并开始计时,1秒到就灭灯。用定时器定时并用中断方式,计中断次数,定时×次数=1秒即可。
❺ 51单片机定时器定时 2秒灯亮 3秒灯灭,如此循环
如果想实现无限循环那就采用死循环方式,可以无限的循环如while(1){};然后设定定时器定时时间为1s(此值需要根据单片机确定是否可以设定这么大),其次,设定一个变量对时间进行计数,根据计数情况做出相应的改变,程序可以这样设定:
unsigned
char
gucledstatus
=
0x00;
//全局变量,表示灯当前的状态
0为灭,1为亮
volatile
unsigned
int
gustimecnt;
//全局变量对时间计数
int
main()
{
//增加定时器初始化并开放中断
while(1)
{
if(gucledstatus
==
0x01)
//当前为亮状态
{
if(gustimecnt
>=
7200)
//两个小时时间到
{
gustimecnt
=
0x00;
//清零
gucledstatus
=
0x00;
//灯为灭状态
//此处加程序代码,控制灯为灭的状态
}
else
{
//此处加程序代码,控制灯为亮的状态,此处会重复执行,可以进行控制
}
}
else
if(gucledstatus
==
0x00)
//灯为灭的状态
{
if(gustimecnt
>=
3600)
//1个小时
{
gustimecnt
=
0x00;
gucledstatus
=
0x01;
//亮状态
//增加程序代码,控制灯亮
}
else
{
//增加程序代码,控制灯灭,此处会重复执行,可以进行控制
}
}
}
return
0;
}
在中断函数中,对gustimecnt进行递增即可!
❻ 用定时器实现51单片机上LED灯每隔两秒亮暗闪烁
你用的是几个灯啊?比如说8个灯吧,用p0口,
就是直接讲p0口与led直接相连就行了啊,注意led的另一端要接在一起,共地或者高电平都可以,但是为了保护led,最好在每个小灯上串上一个电阻(若单片机采用的是5v电压,电阻可选用500欧左右的就可以了),以减小通过led的电流。剩余的就是单片机的最小系统了,没什么好说的吧,就是晶振,复位而已。
程序嘛,也很简单啊,你说用定时器,每个两秒如果单纯用一个定时器的话肯定不够用的,要结合循环判断语句,比如你采用12m的晶振,并且将定时中断时间定为50ms,那么设置一个变量,每20次就是一秒了,所以40次就是两秒。这样的话,每个40次就让led的状态(用0和1表示亮与灭)改变就可以了。main函数中应该设置一个死循环函数,可用while(1),让单片机不断的循环工作。
❼ 51单片机 定时器问题 (LED小灯 每隔一秒亮灭一次)
TF0 初始值为0。
TR0 = 1; //启动计数器0
启动后,TH0TL0就会自动加一。
如下:
B800
B801
B802
……
当加到0000时,TF0就自动为1。