利用单片机、1个开关、8个LED发光二极管(水平排列)和定时器,实现开关控制循环左移和右移流水灯效果。

要求:
(1)开关合上时,8个LED从右到左以0.5秒间隔依次点亮(即任一时刻只能有1个LED亮),如此循环;
(2)开关断开时,8个LED从左到右以0.5秒间隔依次点亮(即任一时刻只能有1个LED亮),如此循环;

算法:
1 采用定时器定时25毫秒 启动定时器工作
2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20)
3 当软件计数器减到0时,表示0.5秒时间到
这时可以判断开关状态
开关合上 可以让8个LED左移一位
开关断开 可以让8个LED右移一位

呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息 右上角)
满意 就选满意回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-02
#cinclude <reg51.h>
#include <intrins.h>
sbit s1=p1^4; //开关
unsigned char i=0;
void main(void)
{
EA=1; //开总中断
ET0=1; /定时器T0中断允许
TMOD=0x01; //使用定时器T0的模式2
TH0=(65536-50000)/256; //定时器T0的高8位赋初值
TL0=(65536-u_50000)%256;; //定时器T0的高8位赋初值
TR0=1; //启动定时器T0
P0=oxff; //全灭
while(1) //无限循环等待中断
;
}

void clock_T0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

if(s1=0) //合上开关
{
i++;
P0=0xfe;
if(i==10) //10次中断后定时约0.5S

{
i=0; //次数归0
P0=_crol_(P0,1); //执行语句
}

if(s1=1) //断开开关
{
i++;
P0=0xef;
if(i=10)
{
i=0;
P0=_cror_(P0,1);
}

}

希望你能够采纳
第2个回答  2012-11-03
制动开关
第3个回答  2012-11-02
如果你是初学者,如果你会C,建议你还是用C吧。我们以前用汇编,脑袋里全是浆糊。

利用单片机、1个开关、8个LED发光二极管(水平排列)和定时器,实现开关控 ...
2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20)3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息 ...

...不是开关)、8个LED发光二极管(水平排列),实现按钮按下次数
代码如下:希望对你有所帮助

用51单片机控制八个发光二极管
void main(){ TMOD=0x10;TH1=(65535-50000)\/256; \/\/ 50ms一次 TL1=(65535-50000)%256;EA=1;ET1=1;\/\/开定时器1中断 TR1=1;\/\/启动定时器1 t=0;i=0;while(1){ } } void timer1() interrupt 3 { TH1=(65535-50000)\/256; \/\/ 50ms一次 TL1=(65535-50000)%256;t++;if(t=...

单片机编程8个led灯,让最低灯亮,循环左移s
控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。软件中,只需要将这些灯使用一个for循环即可。代码 include <reg51.h>unsigned char PData; \/\/记录当前是哪个状态,值为1表示亮,输出到P口时取反...

...单片机P1口接八个发光二极管(共阳极接法),试编写流水灯的程序使发光...
\/\/prj1 流水灯实验,LED灯是共阳极,给0亮。J1跳线帽 \/\/用的是移位的方法 \/\/头文件定义 include<reg52.h> include <intrins.h> \/\/延时函数定义 void delay(void){ unsigned int i;unsigned int j;for(i=200;i>0;i--){ for(j=200;j>0;j--);} } void main(){ P0 = 0xfe; ...

8个LED发光二极管依次左移点亮,然后依次右移点亮,如此反复循环。 采 ...
你好,可以用单片机实现 来自天蝎雨之林的回答,满意请采纳,谢谢~祝你生活愉快~

设计用8031单片机P1口为输出口控制8只发光二极管循环点亮。1、 画出接...
内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果 ---*\/ include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 \/*--- 延时子程序 ---*\/ void delay(unsigned int cnt){ while(--cnt);} \/*---...

急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序...
功能 : 实现灯的闪烁 输入 : 无 输出 : 无 说明 :也可以使用例1的的方法来关闭数码管 \/ void Main(void){ uchar i;while(1){ P1 = 0xfe;for(i=0; i<7; i++){ P1 = _crol_(P0, 1); \/\/用于循环左移 Delay(15);} } } 这是一个51单片机的P1口小灯循环左移的例子,不...

51单片机 用1个按键控制8盏灯,进行花样显示
void key1(){ if(key==0){ P1=0x00; \/\/灯全亮 } void key2(){ if(key==0){ P1=0xfe;P1=P1<<1; \/\/左移或右移,这个自己试一下 delay(1000);.\/\/继续移动到最后一个灯亮 if(P1=0x80) \/\/判断最后一个灯是否亮了,亮了就全部灭 { P1=0xff;} } } void key3(){...

keil软件用单片机控制8个LED流水灯来回点亮(C语言程序)
for (i=0;i<8;i++){ P1=w; \/\/循环点亮LED w<<=1; \/\/点亮灯的位置移动,最低位补0 w=w|0x01; \/\/将最低位置1 delay(500); \/\/延时 } } } 或:include "reg51.h"\/\/程序中使用_crol_函数,所以要包含头文件"intrins.h"include "intrins.h"void delay(unsigned int...

相似回答