多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序


2024年2月4日发(作者:)

多种方法写出的51单片机流水灯C语言程序

流水灯最原始

下面是一个最基本的流水灯程序,使用了

include "reg51.h"

sbit p0=P1^0;

sbit p1=P1^1;

sbit p2=P1^2;

sbit p3=P1^3;

sbit p4=P1^4;

sbit p5=P1^5;

sbit p6=P1^6;

sbit p7=P1^7;

void mdelay(unsigned int t){

unsigned char n;

51单片机的寄存器编程方法。

for(;t>0;t--)

for(n=0;n<125;n++)

void main()

while(1)

P1=0;

p0=1;

mdelay(1000);

p0=0;

p1=1;

mdelay(1000);

p1=0;

p2=1;

流水灯位左移

在流水灯的基础上,我们可以通过左移位的方式来实现流水灯的效果。

void main()

unsigned char led = 0x01.// 初始化led为xxxxxxxx

while(1)

P1 = ~led。// 取反输出,因为我们的电路是低电平亮灯

mdelay(1000);

led <<= 1.// 左移一位

if(led == 0) // 如果led变为0了,说明已经左移到最后一位了,需要重新开始

led = 0x01;

流水灯移位函数

为了方便实现流水灯的位移,我们可以封装一个移位函数。

void shift_left(unsigned char *led。unsigned char n)

for(unsigned char i=0.i

led <<= 1;

if(*led == 0)

led = 0x01;

void main()

unsigned char led = 0x01;

while(1)

P1 = ~led;

mdelay(1000);

shift_left(&led。1)。// 调用移位函数

流水灯数组

如果我们需要控制多个流水灯,可以使用数组来存储每个流水灯的状态。

void shift_left(unsigned char *led。unsigned char n)

for(unsigned char i=0.i

led <<= 1;

if(*led == 0)

led = 0x01;

void main()

unsigned char leds[] = {0x01.0x02.0x04.0x08}。流水灯

while(1)

for(unsigned char i=0.i<4.i++)

P1 = ~leds[i];

mdelay(1000);

shift_left(&leds[0]。4)。// 移动整个数组

// 定义四个

流水灯精确定时器

为了更精确的控制流水灯的时间间隔,我们可以使用定时器来实现。

void timer0_init()

TMOD |= 0x01.// 定时器0工作在模式1下

TH0 = 0xFC。// 定时1ms

TL0 = 0x66;

ET0 = 1.// 允许定时器0中断

EA = 1.// 允许总中断

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

void timer0_isr() interrupt 1

16位定时器)(

static unsigned int count = 0;

TH0 = 0xFC;

TL0 = 0x66;

if(++count。= 1000) // 定时1s

count = 0;

shift_left(&leds[0]。4);

void main()

timer0_init();

while(1)

for(unsigned char i=0.i<4.i++)

P1 = ~leds[i];

unsigned char i;

TMOD=0x01.//设置定时器0为模式1

TH0=(-)/256.//设置定时器0初值

TL0=(-)%256;

ET0=1.//开定时器0中断

EA=1.//开总中断

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

led=0xfe;

while(1)

P1=led;

led=_crol_(led,1);

while(count<10)。//等待定时器中断10次,即count=0;

void timer() interrupt 1

1秒

TH0=(-)/256.//重新设置定时器0初值

TL0=(-)%256;

count++。//计数器加1

P1=0x00;

led=0x01;

EA=1;

ET0=1;

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

TR0=1;

以上是初始化部分,设置计时器、中断等

for(。)

进入死循环,保持程序运行

void biao() interrupt 1{

count++;

if(count==20)

count=0;

P1=led;

led=_crol_(led,1);

TH0=0x3c;

TL0=0xb0;

中断函数,每20次改变P1口的输出,控制灭。同时重新设置计时器的初值。

LED灯的亮


发布者:admin,转转请注明出处:http://www.yc00.com/web/1706999673a1472521.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信