用51单片机的定时器实现LED灯逐一点亮,间隔一秒。要求拨动控制开关可以控制灯的方向。

接上面,还需要1357这么亮。问题有点多,您能不能留个QQ好好教教我啊!

第1个回答  2012-11-07
嘿嘿 这个俺可以帮你解答
1 利用定时计数器0 工作在方式2 定时50毫秒 结合软件计数器(初始值选20)
允许定时计数器中断
2 设计一个定时器0的中断服务程序 每50毫秒 就中断 在中断程序中软件计数器减1
当减到0时,表示1秒时间到 (重新送初始值20)
判断拨动开关状态 如果为低低电平 则选择控制LED的端口内容左移一位
如果为高低电平 则选择控制LED的端口内容右移一位
即可实现对流水灯的方向控制。

呵呵 满意 就选满意回答哦追问

谢谢您的回答,您能给我留个QQ么。我们这课快考试了,我还好多不会呢,希望您能教教我。

追答

826807446

本回答被提问者和网友采纳
第2个回答  2012-11-07
你可以设置一个外部中断,中断的目的是控制灯的方向。间隔一秒可以用单片机小精灵生成。你自己在加中断就可以啦!
/*头文件*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

/*端口定义*/#define led_port P0 /*定义LED显示的数据脚*/

/*1MS为单位的延时程序*/
void delay_1ms(uchar x)
{
uchar j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}

/*主程序*/
void main()
{
uchar led_sdata; /*显示寄存器*/
uchar i;

while(1){
led_sdata=0xfe; /*初始化显示寄存器为1号灯亮*/
for(i=0;i<8;i++){
led_port = led_sdata; /*将显示寄存器输出到LED端口*/
led_sdata = (led_sdata<<1)+1; /*将显示寄存器数据左移1位,并将第一位置高,即熄灭*/
delay_1ms(200);
delay_1ms(200);
delay_1ms(200); /*延时*/
}
}

}
相似回答