单片机实验利用定时器控制八个LED灯每隔1S每四个为一组轮流点亮

作者&投稿:娄桂 (若有异议请与网页底部的电邮联系)
用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++;

}

分成小题,再来提问,你将能较顺当的得到答案。

03  8只LED左右来回点亮

 

/*    名称:8只LED左右来回点亮

       说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       P2=0x01;

       while(1)

       {

              for(i=0;i<7;i++)

              {

                     P2=_crol_(P2,1);//P2的值向左循环移动

                     DelayMS(150);

              }

              for(i=0;i<7;i++)

              {

                     P2=_cror_(P2,1);//P2的值向右循环移动

                     DelayMS(150);

              }

       }

}

 

04  花样流水灯

 

/*    名称:花样流水灯

       说明:16只LED分两组按预设的多种花样变换显示

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code Pattern_P0[]=

{

 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

uchar code Pattern_P2[]=

{

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       while(1)

       {     //从数组中读取数据送至P0和P2口显示

              for(i=0;i<136;i++)

              {

                     P0=Pattern_P0[i];

                     P2=Pattern_P2[i];

                     DelayMS(100);

              }

       }

}

 

05  LED模拟交通灯

 

/*    名称:LED模拟交通灯

       说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0;    //东西向灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3;    //南北向灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

       switch(Operation_Type)

       {

              case1:     //东西向绿灯与南北向红灯亮

                            RED_A=1;YELLOW_A=1;GREEN_A=0;

                            RED_B=0;YELLOW_B=1;GREEN_B=1;

                            DelayMS(2000);

                            Operation_Type=2;

                            break;

              case2:     //东西向黄灯闪烁,绿灯关闭

                            DelayMS(300);

                            YELLOW_A=~YELLOW_A;GREEN_A=1;

                            if(++Flash_Count!=10)return; //闪烁5次

                            Flash_Count=0;

                            Operation_Type=3;

                            break;

              case3:     //东西向红灯,南北向绿灯亮

                            RED_A=0;YELLOW_A=1;GREEN_A=1;

                            RED_B=1;YELLOW_B=1;GREEN_B=0;

                            DelayMS(2000);

                            Operation_Type=4;

                            break;

              case4:     //南北向黄灯闪烁5次

                            DelayMS(300);

                            YELLOW_B=~YELLOW_B;GREEN_B=1;

                            if(++Flash_Count!=10)return;

                            Flash_Count=0;

                            Operation_Type=1;

       }

}

//主程序

void main()

{

       while(1)Traffic_Light();

}

 

06  单只数码管循环显示0~9

 

/*    名称:单只数码管循环显示0~9

       说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari=0;

       P0=0x00;

       while(1)

       {/* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);}  //注:另一方案 */

              P0=~DSY_CODE[i];

              i=(i+1)%10;

              DelayMS(300);

       }

}



;给你做一个单双各四个灯轮流点亮的程序吧,P0口
#include<reg51.h>
#define uchar unsigned char
uchar num=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=20)
{
P0=~P0;
num=0;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
P0=0x5a;
while(1);
}

89C52各位,请帮忙...

单片机的种类型号五花八门,单片机的定时器模型又五花八门,你的电路是LED高电平点亮还是低电平点亮又没说,所以。。答案=无解, 不知道你要问什么。


利用定时器计数器设计一个电路,其功能是每输入1个脉冲,发光二极管状态...
①由+5V电源供电,I\/O口与TTL电平兼容,并有足够数目的I\/O口;②要有丰富的四则算术运算和逻辑运算指令,指令执行速度要快;③片内除RAM外还要有EPROM;④至少有两个16位的定时器\/计数器;⑤有外部中断输入引脚;⑥具有串行通信口;⑦价格要低廉 其中输入通道组成框图如下:被测信号边沿选择电路:被...

利用定时器0工作方式1,在TX-1C实验板上实现第一个发光管以1s亮灭闪 ...
要我们说,我们说的可能还没郭天祥的视频中说的好。void T0_time() interrupt 1 你这个用的是定时器0的中断 当定时器计时满了之后 溢出 使TF0置1 这时候cpu就会来执行中断服务程序 void T0_time() interrupt 1 { TH0=(65535-45872)\/256;TL0=(65535-45872)%256; \/\/重新给定时器赋初值 n...

定时器(硬件)原理及与外部设备连接
定时器按结构可分为机械式、电动式和电子式 3类。通常与以下设备连接:V+:正电源端,由于电源电压变化对定时周期的影响很小,因此可使用具有高纹波的电源而输出脉冲宽度不变。V+端驱动电抗性负载时需连接一电容。V+端的静态电流不随电源电压变化。TRIGGER:触发信号输入端,用以启动一定时周期。R\/...

单片微型机原理、应用与实验目录
第二章专攻51系列单片机,详细解析了系统结构,内存组织,时钟、复位和中断系统。这部分涵盖了指令系统,如指令格式、寻址方式和常用指令如数据传送、算术运算和逻辑操作。第3章深入探讨51系列单片机的功能模块,如并行口、定时器、串行接口及其应用,如蜂鸣器、键盘控制和串行通信。同时,也介绍了A\/ D转换...

单片机定时器是赋初值后就开始工作?
主函数和中断函数里都可以赋值,开始计数是从TR0=1或TR1=1开始的。而且计时器是独立的,就是说除非关计时器(TR0=0或TR1=0),不然计时器会一直计数(就算有外部中断它也不会停止计数),具体你可以软件仿真,查看对应寄存器(如TH0,TL0)的变化。

单片机C51实验求程序!求大神!!!
\/\/定时器1 ,工作模式2 PCON=0x80;\/\/SMOD=1,串行口波特率倍增,自动重载;TH1=0xfd;\/\/设置波特率9600 TL1=0xfd;EA=1;\/\/ EA=0时,访问外部ROM,EA=1时,CPU访问内部存储器 ES=1;\/\/禁止串口中断 TR1=1;\/\/ 启动定时器1 } void delay(){int j,k;for(k=500;k>0;k--)for (j=50...

利用8253定时器的0通道设计一个具有时、分、秒显示的电子时钟
在设计发光报警时利用了8255芯片。在程序设计中利用INT 10H实现在屏幕上显示相关的警报信息 三、教学实验系统连线 用8253的CLK2端口与系统总线的OPCLK相连 用8253的OUT2输出端口与内置扬声器SPK端口相连 用8255的A端口的8个引脚与8LED灯相连 四:所用芯片工作原理 INTER 8253是可编程间隔定时器,同样也...

单片微机控制应用技术实操指导书内容简介
还有打印机的操作演示。更为精彩的是,书中还提供了14个综合应用实例,涉及键盘扫描显示、秒表定时器的设置、5位计数器的设计、串行口多机通信技术、LED点阵和LCD点阵模块的汉字显示、步进电机控制技术、以及利用DS18B20进行精确温度控制等,这些实例不仅涵盖了基础编程和接口设计,还给出了实用电路设计、高效...

单片机定时器里(65536-45872)\/256中的45872怎么得来的?
45872是根据需要的定时时间和晶振的频率计算出来的,例如,晶振频率是12M,定时时间要50ms,则50 000us\/1us=50000。这个45872,如果频率是11.0592M,机器周期=12\/11.0592=1.085us,定时需要49771,则49771\/1.085=45872。但不知晶振频率的准确数值,也不知定时的准确时间,上面也是猜测的,只是说明...

STC89C52单片机作息时间控制钟一秒时间基准是如何产生的
这是用单片机做电子钟的最典型的最基本的应用了。用定时器定时,可以定时20ms或50ms(不能直接定时1秒的),采用中断方式,每中断一次,就是20ms或50ms,对中断计数50次,或20次就是1秒啦。这一秒的基准时间就得到了。

丰满区13617642756: 单片机实验利用定时器控制八个LED灯每隔1S每四个为一组轮流点亮 -
利葛半水: 03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果 */ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(...

丰满区13617642756: 利用单片机、1个开关、8个LED发光二极管(水平排列)和定时器,实现开关控制循环左移和右移流水灯效果. -
利葛半水: 算法: 1 采用定时器定时25毫秒 启动定时器工作2 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20)3 当软件计数器减到0时,表示0.5秒时间到这时可以判断开关状态开关合上 可以让8个LED左移一位开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见的消息 右上角) 满意 就选满意回答

丰满区13617642756: 利用单片机内部定时/计数器T1产生定时时钟,试编程使P1口输出信号控制8个LED指示灯从左到右依次闪动一遍,再 -
利葛半水: #include<reg52.h> #include<intrins.h> #define ch P1 int num; void init() {EA=1;ET0=1; TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; } void timer() interrupt 0 {TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++; if(num==10) { num=0; ch=_crol_(ch,1); } } void main() {init();while(1); }

丰满区13617642756: 51单片机8个灯同时闪烁数程序用定时器写怎么写?c语言版. -
利葛半水: 你就先写个清零端清零,然后同时低电平控制八个灯,写个延时程序,然后同时给给高电平,定时器记时.

丰满区13617642756: 8只LED阴极接至单片机P0口,用定时器T0实现8只LED亮0.5秒的闪烁.T0工作于方式0,设晶振的频率为12MHz -
利葛半水: #include void InitTimer0(void) { TMOD = 0x01; TH0 = 0x3C; TL0 = 0x0B0; EA = 1; ET0 = 1; TR0 = 1; } unsigned char cs; void main(void) { P0=0x00; cs=0; InitTimer0(); while(1); } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x3C; TL0 = 0x0B0; cs++; if(cs>=100) { P0=~P0; cs=0; } }

丰满区13617642756: 单片机 8个按键分别控制对应的8个led的亮灭 程序设计 -
利葛半水: 八个灯接在单片机的P1口(P0,P2,P3,P4都一样) while(1) { delay(你想要延时的时间); P1=0xff; delay(你想要延时的时间); P1=0; } 注意led最好加驱动,不然单片机会坏的.

丰满区13617642756: 单片机用汇编语言编写用一个控制器控制8个LED灯亮 -
利葛半水: ORG 00HJMP MAINORG 30H MAIN: MOV A,#0FFH ;设置左移初值CLR C ;C=0MOV R2,#08H ;设置左移次数 LOOP: RLC A ;左移1位MOV P2,A ;输出到P2CALL DELAY ;延时DJNZ R2,LOOP ;左移7次MOV R2,#07H ; LOOP1: ...

丰满区13617642756: 单片机控制8个led灯隔两位亮一次.开始倒数第二个灯亮,隔一秒左移两位,再隔一秒左移两位,如此循环. -
利葛半水: 把8个led与io口相连,然后对io口的首地址进行赋初始值,开启定时器,每隔一秒对初始值循环左移两位

丰满区13617642756: 单片机、1个开关、8个LED发光二极管(水平排列)和定时器,实现开关控制循环右移流水灯效果,求汇编程序
利葛半水: 你可以在主程序中先判断开关状态 1 当开关闭合时 让第一个发光二极管亮 采用定时器定时50毫秒 启动定时器工作 每当定时时间到中断 在中断服务程序中软件计数器减1(初始值为20) 当减到0时,表示1秒时间到 可以让8个LED左移一位 2 当开关断开时 停止定时器工作 同时让所有LED全部点亮. 哈哈 按以上算法编写 就可以实现你的要求和效果 满意 就选满意回答

丰满区13617642756: 使用AT89C51设计一个接在p2口的8个led从左到右循环依次点亮 -
利葛半水: 这是一个很简单的控制单片机端口的程序,估计老师要求用定时器的吧提问的时候没说具体要求,所以只好给出一个利用定时器来完成的流水灯程序定时时间为一秒,即1000毫秒,可根据实际需要进行修改星号是各个函数间的分隔符号,不...

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