#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单片机指令周期及延时函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)