首页 > 编程知识 正文

位移实现流水灯c语言,流水灯位移函数

时间:2024-03-07 18:23:11 阅读:331491 作者:UPLA

本文目录一览:

单片机C语言流水灯移位指令

//没有编译过,大概思路就这样

#define P_LED P1; //定义到你自己的端口

void main(void)

{

unsigned char circledata=0x01,i=0;

while(1)

{

for(i=0;i4;i++) //显示范围 P_LED.0:P_LED3

{

P_LED=circledatai;

Delay_ms(1000);//根据自己的晶振写延时1S的函数

}

circledata=0xfe;

for(i=3;i=0;i--) //显示范围 P_LED.3:P_LED.0

{

P_LED=circledatai;

Delay_ms(1000);//根据自己的晶振写延时1S的函数

}

}

return;

}

怎么用c语言用循环位移法实现流水灯

单片机的内容吧。

单片机的一个Port是8位的。

方法1: 移位运算

while (1)

{

led = 0x01;

for (i = 0; i 8; i++)

{

port_2 = led; // 将数值赋值给单片机的Port.

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

}

}

方法2: 乘法运算

while (1)

{

led = 0x01;

for (i = 0; i 8; i++)

{

port_2 = led; // 将数值赋值给单片机的Port.

led = led * 2; // 乘2, 相当于左移1位.

}

}

为什么C语言位移可以实现发光二极管的流水灯?

每个位代表了一个二极管的引脚。根据单片机外围电路不同,逻辑高或低电平时,LED会点亮。假设逻辑高电平时LED点亮,如00000001,bit0-7控制led0-7,此时led0点亮,左移一位变为00000010,led0熄灭,led1点亮。

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。

2、#include "reg51.h"首先写出单片机的头函数。

3、#include "intrins.h"输入位移函数。

4、unsigned int count=0,led;定义函数。

5、输入主函数,定义单片机的端口,写入延时函数。

6、中断跳转,使流水灯运行起来。

用c语言编写流水灯。

C语言流水灯程序是学习的基础,一定要搞懂!给你发两个!

(一)

#includereg51.h //51系列单片机定义文件

#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void delay(uint); //声明延时函数

void main()

{

uint i;

uchar temp;

while(1)

{

temp=0x01;

for(i=0;i8;i++) //8个流水灯逐个闪动

{

P2=~temp;

delay(500); //调用延时函数

temp=1;

}

temp=0x80;

for(i=0;i8;i++) //8个流水灯反向逐个闪动

{

P2=~temp;

delay(500); //调用延时函数

temp=1;

}

temp=0xFE;

for(i=0;i8;i++) //8个流水灯依次全部点亮

{

P2=temp;

delay(500); //调用延时函数

temp=1;

}

temp=0x7F;

for(i=0;i8;i++) //8个流水灯依次反向全部点亮

{

P2=temp;

delay(500); //调用延时函数

temp=1;

}

}

}

void delay(uint a) //延时函数,毫秒级别

{

uint i;

while(--a!=0) //执行空操作循环,其中a为形参,由调用该函数的函数语句提供值

{

for(i=0;i125;i++);//执行当0加到125时,大约会用掉1ms的时间

}

}

(二)

*****************************以下程序均采用12M晶振*****************************************************/

#includereg51.h

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

sbit p2=P2^0;

void main()

{

TMOD=0x01;

TR0=1;

ET0=1;

EA=1;

while(1)

{

;

}

}

timer0() interrupt 1

{

TH0=0x00;

TL0=0x06;

p2=!p2;

}

(三)

定时流水灯//

#includereg51.h

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

bit ldelay=0;

void main()

{

uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};

uchar leda;

TMOD=0x00;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(ldelay)

{

ldelay=0;

P2=led[leda];

leda++;

if(leda==9)leda=0;

}

}

}

timer2() interrupt 1

{

static uchar t;

TF0=0;

t++;

if(t==10)

{

t=0;

ldelay=1;

}

}

(四)

变速流水灯//

#includereg51.h

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

bit ldelay=0;

uchar speed=100;

void main()

{

uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};

uchar leda;

TMOD=0x00;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(ldelay)

{

ldelay=0;

P2=led[leda];

leda++;

if(leda==9)

{

leda=0;

speed-=10;

if(speed==0)speed=100;

}

}

}

}

timer2() interrupt 1

{

static uchar t;

TF0=0;

t++;

if(t==speed)

{

t=0;

ldelay=1;

}

}

(五)

//每2两圈改变一次亮度

#includereg51.h

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

bit ldelay=0;

uchar speeda=30;

uint k=0;

void main()

{

uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};

uchar leda;

uchar speed[10]={5,80,70,60,50,40,30,20,10,5};

uint i;

uint k;

TMOD=0x00;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(ldelay)

{

ldelay=0;

P2=led[leda];

leda++;

if(leda==9)

{

leda=0;

k++;

if(k==2){

k=0;

speeda=speed[i];

i++;

if(i==9)i=0;

}

}

}

}

}

timer2() interrupt 1

{

static uchar t;

TF0=0;

t++;

if(t==speeda)

{

t=0;

ldelay=1;

}

}

(六)

//在上面基础上调灯的亮度(调占空比)

#includereg51.h

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

bit ldelay=0;

uchar speeda=30;

uint k=0;

uchar scale;

void main()

{

uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};

uchar leda;

uchar speed[10]={5,80,70,60,50,40,30,20,10,5};

uint i;

uint k;

TMOD=0x00;

TR0=1;

ET0=1;

EA=1;

while(1)

{

if(ldelay==1)

{

ldelay=0;

P2=led[leda];

leda++;

scale++;

if(scale==10)scale=0;

if(leda==9)

{

leda=0;

k++;

if(k==2){

k=0;

speeda=speed[i];

i++;

if(i==9)i=0;

}

}

}

}

}

timer2() interrupt 1

{

static uchar t;

TH0=0x1c;

TL0=0xbf;

TF0=0;

t++;

if(t==speeda)

{

t=0;

ldelay=1;

}

if(scale==10)P2=0;

if(scale==0)P2=1;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。