用C语言编写,单片机控制LED灯并用定时器延时,每隔一秒使LED依次点亮,8 个灯

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言编写,单片机控制LED灯并用定时器延时,每隔一秒使LED依次点亮,8 个灯相关的知识,希望对你有一定的参考价值。

我再帮你补一课,看了你的标题,我写了一个用定时器0来控制一个LED灯第隔1秒钟亮灭一次的程序,希望对你有用,另外我也写了一个你说的那个程序,一起发上来吧
****************这个是用定时器0控制一个灯的亮和灭******************************
#include<reg52.h>
#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<reg52.h>
#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++;

参考技术A ‘每隔一秒使LED依次点亮’,其实我没看懂这句话。是每隔一秒亮一个灯,还是。。。追问

每隔一秒亮一个灯,亮完8个灯就停止,不亮了

追答

二楼那个就是了呀

追问

C语言编写的有没有啊

追答

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar a=0,i=8;
void main()

uchar t;
TMOD=1; //初始化定时器0
TH0=(65535-50000)/256; //设定50ms计时初值
TL0=(65535-50000)%256;
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //启动T0定时器
t=0Xfe;
P1=t;
while(i)

if(a==20)

t=_crol_(t,1);
P1=t;
a=0;
i--;


while(1)
P1=0xff; //8个led灯为共阳接法


void time0() interrupt 1

TH0=(65535-50000)/256; //设定50ms计时初值
TL0=(65535-50000)%256;
a++;

本回答被提问者采纳
参考技术B 很简单的!!几句话的事!!!
void main()

TMOD=0x21; //初始化定时器T0为工作方式
TH0=0x3c; //设定50ms计时初值
TL0=0xb0;
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //启动T0定时器
while(1);


//名称:T0中断服务程序
void time0() interrupt 1

中断20次向下执行I/O移位就可以了
TH0=0x3c;//定时器重新赋值就可以了 TL0=0xb0;

51单片机led灯控制

关于内容理解:

先读懂51单片机的实验原理图,然后再着手编程。

由图可知

1,led灯接的是单片机的P0口,意味着我们只能用P0口来编程。

2,led灯是共阳极,当给低电平时led灯才会亮,(单片机灌电流能力较强,输出电流较弱,所以一般用共阳极)

3,led所在的P0口是读io口,故使用时用一个变量来做中介

实验效果

实现跑马灯效果,P0^0->P0^7口依次亮且每次只亮一个灯,然后P0^7->P0^0。

实验代码

#include <reg52.h>      //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

//--声明全局函数--//
void Delay10ms(unsigned int c);   //延时10ms        

void main()
{
        unsigned char i;
               unsigned char LED;
      //--首先赋值LED--//
        LED = 0xFE;

    while (1) 
    {              
        //--LED往左闪烁--//   
        for (i = 0 ;i < 7 ; i++)
        { 
            //--将LED 的值赋给P2口--//
            P0  = LED;
    
            Delay10ms(50);         //延时一下,为了让灯有持续点亮的时间
    
            LED = LED << 1;         // 将LED里面的值左移一位,然后重新赋给LED
    
            LED = LED | 0x01;     // 移位后,前面的位为高电平
        }
    
        //--LED向右显示--//
        for (i = 0 ;i < 7 ; i++)
        {        
            P0  = LED;

            Delay10ms(50);

            LED = LED >> 1;     // 右移

            LED = LED | 0x80;     // 移位后,后面的位为高电平        
        }
        
    }
}

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

    //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
    {
        for (b=38;b>0;b--)
        {
            for (a=130;a>0;a--);
        }
           
    }       
}

扩展:实现流水灯

一次点亮P0^0->P0^7

#include <reg52.h>      //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

//--声明全局函数--//
void Delay10ms(unsigned int c);   //延时10ms        

void main()
{
        unsigned char i;
               unsigned char LED;
      //--首先赋值LED--//
        

    while (1) 
    {     
         LED = 0xFE;     
        //--LED往左闪烁--//   
        for (i = 0 ;i < 8 ; i++)
        { 
            //--将LED 的值赋给P2口--//
            P0  = LED;
    
            Delay10ms(50);         //延时一下,为了让灯有持续点亮的时间
    
            LED = LED << 1;         // 将LED里面的值左移一位,然后重新赋给LED
    
        //    LED = LED | 0x01;     // 移位后,前面的位为高电平
        }
        
        //--LED向右显示--//
        LED = 0x7F;     

        for (i = 0 ;i < 8 ; i++)
        {        
            P0  = LED;

            Delay10ms(50);

            LED = LED >> 1;     // 右移

        //    LED = LED | 0x80;     // 移位后,后面的位为高电平        
        }
        
    }
}

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

    //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
    {
        for (b=38;b>0;b--)
        {
            for (a=130;a>0;a--);
        }
           
    }       
}

 

以上是关于用C语言编写,单片机控制LED灯并用定时器延时,每隔一秒使LED依次点亮,8 个灯的主要内容,如果未能解决你的问题,请参考以下文章

求教如何用单片机控制LED灯的亮度

关于stc单片机做LED点亮和灭的时间控制程序问题?

STM32怎么实现单片机控制LED灯常亮10S后熄灭?

51单片机定时器使用

帮忙用汇编语言写个程序,控制两个LED交替闪烁。

汇编语言 编写 程序 LED 灯显示