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条)