51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序

51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序,第1张

一、利用定时器实现:

/预处理命令/

#include<reg52h>

#define OUT P0

//晶振:12MHZ

/重新定义数据类型/

typedef unsigned char unit8;

typedef unsigned short unit_16;

/

函数名:main()

函数功能: 主函数

输入:无

输出:无

/

void main()

{

TMOD = 0x01;

TR0 = 1;

ET0 = 1;

EA = 1;

while(1);

}

/

函数名:Timer0_Rountine() interrupt 1

函数功能:内部中断T0 服务函数

输入: 无

输出:无

/

void Timer0_Rountine() interrupt 1

{

static unit_16 Count=0;

static unit8 Count_Sign=0;

static bit Sign=0;

TH0 = 0xfc;

TL0 = 0x18;

Count++;

if(!Sign)

OUT = 0xaa; //奇数 (1秒)

if(Count>=1000)

{

Sign=1;

Count=0;

if(Count_Sign<3) //2秒

OUT = 0xaa; //奇数

else if(Count_Sign>=3&&Count_Sign<=10) //8秒

OUT = 0x55; //偶数

else if(Count_Sign>10&&Count_Sign<=22) //12秒

OUT = 0x00; //全部

else if(Count_Sign>22)Count_Sign=Sign=0;

Count_Sign++;

}

}

二、利用软件延时实现:

#include<reg52h>

#define OUT P0

typedef unsigned char unit8;

typedef unsigned int unit16;

/

函数名:delay_ms(unit16 x)

函数功能: 延时函数1MS

输入:x

输出:无

/

void delay_ms(unit16 x)

{

unit8 a,b;

while(x--)

{

for(b=142;b>0;b--)

for(a=2;a>0;a--);

}

}

/

函数名:main()

函数功能: 主函数

输入:无

输出:无

/

void main()

{

while(1)

{

OUT = 0xaa; //奇数

delay_ms(3000); //3秒

OUT = 0x55; //偶数

delay_ms(8000); //8秒

OUT = 0x00; //全部

delay_ms(12000);//12秒

}

}

#include<reg51h> 包含单片机专用头文件

#include<intrinsh> 这个是什么俺也不知道,但这个程序不需要这个头文件

void Delay10ms(unsigned int c); 自定义的延时函数声明

main() 主函数

{

unsigned int LED; 建立一个数值型变量,变量名 LED

LED=0xfe; 给这个变量赋值,0xfe 换成二进制数为 1111 1110

while(1) 主循环

{

P2=LED; 点亮发光管,即先点亮右边的第一个

Delay10ms(50); 延时一段时间

LED=LED<<1; 点亮的发光管,向左移动一位

if (P2==0x00) 判断是否8个全部点亮了

{

LED=0xff; 如果全部点亮,则将全部发光管熄灭

}

}

}

void Delay10ms(unsigned int c)延时函数主程序

{

unsigned char a, b;建立两个变量 a b

for(;c>0;c--)循环语句,不断改变变量数值,已达到延时目的

{

for(b=38;b>0;b--)

{

for(a=130;a>0;a--);

}

}

}

给你翻译了,希望能帮到你

#include <reg52h>     //包括一个52标准内核的头文件

#define uchar unsigned char

/主函数/

void timer0();

void main() // 主程序

{

TMOD=0x01; //定时器0工作方式1

EA=1;

ET0=1; //定时器0中断

TR0=1; //启动定时器0

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

while(1);  //程序循环

}

/定时器0中断/

void timer0() interrupt 1

{

uchar t;//定义变量

TF0=0;//定时器清0

t++; //中断一次累加1

if(t==20) //预置值,溢出20次就是1秒钟,晶振12MHZ

{

t=0;

P3=~P3; //反转LED灯的亮灭

}

}

//

以上就是关于51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序全部的内容,包括:51单片机定时器控制8个LED灯亮3秒灭8秒再亮12秒的程序、51单片机如何控制8个led程序、求51单片机定时LED闪烁程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9283437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存