STC单片机控制光带程序,能够实现流水灯,灯得走动能够延时30秒走一次,最好可控制颜色亮度

STC单片机控制光带程序,能够实现流水灯,灯得走动能够延时30秒走一次,最好可控制颜色亮度,第1张

#include<reg52h>

#include<intrinsh>

void delay1();

void delay2();

void main()

{ int x;

while(1)

{ P1=0xfe;

delay2();

for(x=0;x<7;x++)

{

P1=_crol_(P1,1);

delay2();

}

delay1();

}

}

void delay1()

{ int i,j,z;

for(i=0;i<900;i++)

{for(j=0;j<30;j++)

for(z=0;z<100;z++);

} }

void delay2()

{ int i=20000;

while(i--);

}

#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED = P1^2; //定义LED灯,通过LED显示调光效果

unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 01ms

unsigned char PWM_ON ;//定义高电平时间

//

/ 延时函数 /

//

void delay(unsigned int cnt)

{

while(--cnt);

}

//

/ 主函数 /

//

main()

{

bit Flag;

TMOD |=0x01; //定时器设置 01ms in 12M crystal

TH0=(65536-100)/256;

TL0=(65536-100)%256; //定时01mS

IE= 0x82; //打开中断

TR0=1;

CYCLE = 10; // 时间可以调整 这个是10调整 8位PWM就是256步

while(!Flag)

{

delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果

PWM_ON++; //这个使用较长延时,以便能看清楚变化过程

if(PWM_ON == CYCLE)

{ //这个里可以添加其他程序 如到最亮时候控制设备

Flag=1;

}

}

while(Flag) //亮度递减 同上,是个相反的过程

{

delay(20000);

PWM_ON--;

if(PWM_ON == 0)

{

Flag=0;

}

}

}

//

/ 定时器中断函数 /

//

void tim(void) interrupt 1 using 1

{

static unsigned char count;

TH0=(65536-100)/256;

TL0=(65536-100)%256; //定时01mS

if (count==PWM_ON)

{

LED = 1; //灯灭

}

count++;

if(count == CYCLE)

{

count=0;

if(PWM_ON!=0) //如果左右时间是0 保持原来状态

LED = 0; //灯亮

}

}

有两个程序。。一个是流水灯。。可能没有30秒。。你可以在延时函数中该。。。

另外一个程序是控制一个LED管亮度的

软件延

精确

我都

叫dpjxjl

软件自

具体准确否

没校验

1MS例:STC

1T单片机12MHz:

void

delay(void)

//误差

0us

{

unsigned

char

a,b;

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

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

}

1T单片机110592MHz:

void

delay(void)

//误差

-0018084490741us

{

unsigned

char

a,b,c;

for(c=8;c>0;c--)

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

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

}

假设你用的12M晶振,IT单片机;

参照STC的数据手册“26 指令系统分类总结及与普通8051 指令执行时间对比”

可查出: 机器周期

L1:CLR A 1

MOV R6,A 2

L2:INC R6 3

CJNE R6,#0X09,L2 4

DJNZ R7,L1 4

RET 4

你的延时=((1+2+9(3+4)+4)n+4)/12000000秒=(70n+4)/12us;

n取1的话=74/12=6167us;

这个就很简单了,可以用定时器来做。定时时间50毫秒,用一个变量如Count来计50毫秒的个数,再用一个全局变量来计设定的时间如SetTime。

当按键按下时,改变SetTime的值,比较的时候注意把这个值换算成和Count一样的单位,比较一下就可以了

以上就是关于STC单片机控制光带程序,能够实现流水灯,灯得走动能够延时30秒走一次,最好可控制颜色亮度全部的内容,包括:STC单片机控制光带程序,能够实现流水灯,灯得走动能够延时30秒走一次,最好可控制颜色亮度、stc12c5a60s2单片机 延时函数怎么写 晶振11.0592Mhz 和 12M、关于STC单片机指令周期及延时函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10133603.html

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

发表评论

登录后才能评论

评论列表(0条)

保存