本文目录一览:
- 1、单片机C语言流水灯移位指令
- 2、怎么用c语言用循环位移法实现流水灯
- 3、为什么C语言位移可以实现发光二极管的流水灯?
- 4、单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
- 5、用c语言编写流水灯。
单片机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;
}