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

作者&投稿:昌玉 (若有异议请与网页底部的电邮联系)
用C语言编写,单片机控制LED灯并用定时器延时,每隔一秒使LED依次点亮,8 个灯~

我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧
****************这个是用定时器0控制一个灯的亮和灭******************************
#include
#define uchar unsigned char
#define uint unsigned int
/**************************************/
uchar num;
bit tt;
sbit d=P1^0;

/******************主程序入口********************/
void main()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TCON=0x10;
EA=1;
ET0=1;
tt=255;

while(1)
{
if(num==20)
{
tt=!tt;
d=tt;
num=0;
}

}
}

void timer() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
num++;
}
****************这个程序是逐个点亮的(思路:由256逐减1,值由LED灯显示)***********************
#include
#define uchar unsigned char
#define uint unsigned int
/**************************************/
uchar num,tt;
//bit tt;
sbit d=P1^0;

/******************主程序入口********************/
void main()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TCON=0x10;


EA=1;
ET0=1;


tt=255;

while(1)
{
if(num==20)
{
tt--;
P1=tt;
num=0;
}

}
}

void timer() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
num++;

}

算法: 1 采用定时器定时25毫秒 启动定时器工作 2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20) 3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息 右上角) 满意 就选满意回答

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

呵呵 满意 就选满意回答哦

你可以设置一个外部中断,中断的目的是控制灯的方向。间隔一秒可以用单片机小精灵生成。你自己在加中断就可以啦!
/*头文件*/
#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); /*延时*/
}
}

}


怎样使用51单片机的定时器?
51单片机定时器的使用 51单片机定时器\/计时器的使用 步骤:1、 打开中断允许位:对IE寄存器进行控制,IE寄存器各位的信息如下图所示:EA: 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:...

51单片机555定时器原理
555定时器的电路结构 555定时器的电路结构如图所示。C1和C2为两个电压比较器,其功能是如果“+”输入端电压v+大于“-”输入端电压v-,即v+>v-时,则比较器输出vc为高电平(vc=1),反之输出vc为低电平(vc=0)。比较器C1参考电压v1+(VREF1)=2\/3Vcc,比较器C2的参考电压v2-(VREF2)=...

51单片机的3个定时器怎样使用?
51单片机只有T0,T1。52才有T2的。定时器设置方法:做定时用一般采用16位模式,也就是TMOD=0x11(10或01单独一个定时器的话),初值的计算是这样的:假设时间是X毫秒,晶振为YMhz,那么:THn=(65536-1000*X*Y\/12)\/256 TLn=(65536-1000*X*Y\/12)%256 之后就是TRn=1(开启定时器)ETn=1(开启...

单片机高手给点拨下,定时器这个不太理解,定时器初始化有几种方法啊...
51 单片机中定时器,是个 16 位的加法计数器。其内容是 0000H ~ FFFFH,即:0 ~ 65535。每隔一个机器周期,加一次一。加到 65536,就会溢出,产生中断。在外部振荡器频率 = 11.0592 MHz 时,机器周期=1085.06944...us。要想定时 1000us,这就有点困难了。在外部振荡器频率 = 12 MHz 时,...

C51单片机定时器1以方式1定时1秒如何设置?
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。2、然后,我们要定义两个变量。3、接着,设定好定时器的工作方式。4、设置中断发生的机制。5、最后,我们要加进这几行代码进行初值的重装。6、最后,把if语句补充完毕就可以了。

请问51单片机怎么用定时器延时?
51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器\/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器\/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易...

51单片机的定时器和计数器分别定时和计数的周期是多长时间,这个脉冲...
定时器\/计数器做为定时器来用的时候,是数的单片机时钟的脉冲个数,也就是说,单片机的时钟做为定时器\/计数器的时钟源,因为单片机的时钟一般比较固定,因此,我们就知道一个脉冲占多长时间,因为根据脉冲的个数,就能推算出时间,就能做定时器用.比如:12MHz的传统51单片机,一个脉冲周期是1us,如果定时器数了...

51单片机如何配置定时器2?
1、首先第一步是定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。注意的是掌握好定时器2还是非常有必要的。2、然后就是定时器2是一个16位定时器\/计数器,注意的是通过设置特殊功能寄存器T2CON中的C\/T2位可将其设置为定时器或是计数器。3、接着就是通过设置T2CON中的工作模式...

51单片机T0定时器4种方式的定时时长分别是多少
这个取决于系统时钟和定时器位数。例如传统89c51单片机(在不考虑新型单片机有分频设置的情况下),12MHz系统时钟,采用8位定时器,最大定时时间为256us;如果采用16位定时器,最大定时时间为65536us。

MCS-51单片机AT89C51有几个几位的定时计数器,可以被设定的工作方式有几...
51单片机有两个定时器,每个定时器可以设置4中工作方式。\\x0d\\x0a方式0:13位定时器\\x0d\\x0a方式1:16位定时器\\x0d\\x0a方式2:8位重装载模式\\x0d\\x0a方式3:两个独立8位定时器模式

戚墅堰区19339963019: 51单片机C语言程序,利用定时器1控制LED灯每隔100ms亮一个,并且数码管上的数每隔200ms加1,加到100清零 -
长性复方: #include<reg51.h> #include<intrins.h> #define uchar unsigned char; uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f uchar number,dat,time; void t0isr() interrupt 1 {TH0=(65536-5000...

戚墅堰区19339963019: 51单片机如何用一个按键和一个定时器来模拟PWM控制一个LED灯的亮度?? -
长性复方: 使用定时器T0产生PWM方波,用按键调整占空比,20级可调 控制led灯的亮度等级.#include "my51.h" #include "timer0.h" #define grading 20 //亮度20级变化 sbit keyS3=P3^5; //按键调整占空比,PWM_keyChange++ sbit keyS4=P3^6; // ...

戚墅堰区19339963019: 51单片机控制led亮5分钟灭五分钟循环5次 c程序怎么写? -
长性复方: -(void) processDigit:(int)digit{ currentNumber = currentNumber *10 + digit;[displayString appendString: [NSString stringWithFormat : @"%i",digit]]; display.text = displayString;}-(IBAction) clickDigit: (UIButton*) sender{ int digit = sender.tag; [self processDigit:digit];}

戚墅堰区19339963019: 51单片机如何使用定时器让LED亮一会灭一会? -
长性复方: 用定时器定时20ms,再用软件计数25次,计满后用一条口线执行一条CPL指令即可,比如说:CPL P1.0.如有帮助请采纳,或点击右上角的满意,谢谢!!

戚墅堰区19339963019: 51单片机用汇编语言如何编写LED灯逐渐变亮在逐渐变暗啊 -
长性复方: 这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了.首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期.此函数的返回值作为pwm的输入值.再做一个pwm的模拟程序,占空比(0-100)是三...

戚墅堰区19339963019: AT89S51单片机,编写程序,用定时计数器1控制LED以10HZ的频率闪烁,求程序 -
长性复方: 设置定时器1的定时时间为200ms,然后在定时器1的中断服务程序中将LED翻转就可以了

戚墅堰区19339963019: 51单片机如何实现,LED灯定时5分钟定自己熄灭? -
长性复方: 这个不难,如果任务单纯可以直接用软件延时,如果还有其它任务循环,可以设置计数变量对定时器中断进行累计,计数时间到了关闭相关驱动引脚即可.

戚墅堰区19339963019: 51单片机c语言定时器控制流水灯 -
长性复方: #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0xFE; for(i=0;i<8;i++) //8个流水灯依...

戚墅堰区19339963019: 制作一个基于51单片机的简单电路怎么通过按键改变LED不同的闪烁效果 -
长性复方: LED的闪烁可以用定时器来做,然后检测按键,检测到了按键就进入中断,并将一个变量+1 然后在定时器中断里面根据变量的取值不同跳到相应的闪烁程序去

戚墅堰区19339963019: 求一段用51单片机来实现60个led灯循环点亮的程序,没过一秒点亮一盏(就是模拟时钟的秒针) -
长性复方: 51单片机来实现60个led灯循环点亮的程序://************************************汇编程序:#include<at89x51.h>#define uchar unsigned char#define uint unsigned int uchar data count=0; bit flag=0;//*********主函数***************** void main(void) { ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网