//单片机流水灯程序,是学习单片机的最简单的程序。
//流水灯
#include <REG51.h> //51头文件
#define DY_PORT P1 //设置LED连接的I/O组
#define DY_SPEED 100 //设置每一个明亮级的停留时间(竖洞值域:0~65535)
void delay (unsigned int a){ // 1ms延时程序
unsigned int i
while( --a != 0){
for(i = 0i <600i++)
}
}
void main(void){
unsigned int i
unsigned int temp
while(1){
temp=0x01
for(i=0i<8i++){ //8个流水灯逐个闪动
DY_PORT=~temp
delay(DY_SPEED) //调用延时函数稿蠢
temp<<=1
}
temp=0x80
for(i=0i<8i++){ //8个流水灯反向逐个闪动
DY_PORT=~temp
delay(DY_SPEED) //调用延时函数
temp>>=1
}
temp=0xFE
for(i=0i<8i++){ //8个流水灯依次全部点亮
DY_PORT=temp
delay(DY_SPEED) //调用延时函数
temp<<=1
}
temp=0x7F
for(i=0i<8i++){ //8个流水灯依次反向键纤陪全部点亮
DY_PORT=temp
delay(DY_SPEED) //调用延时函数
temp>>=1
}
}
}
最好用PWM,通过调节占空比来实现,我这里有现成的一个程序发给你!#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit LED = P1^2 //定义LED灯,通过LED显示调光效果unsigned char CYCLE //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON //定义高电平时间
/******************************************************************/
/*延时函数*/
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt)
}
/******************************************************************/
/*主函数 */
/******************************************************************/
main()
{
bit FlagTMOD |=0x01 //定时器设置宏没 0.1ms in 12M crystal
TH0=(65536-100)/256
TL0=(65536-100)%256 //定时0.1mS
IE= 0x82//打开中断
TR0=1CYCLE = 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//定时0.1mS if (count==PWM_ON)
{
LED = 1 //灯灭
}
count++
if(count == CYCLE)
{
count=0
if(PWM_ON!=0)//如果左右时间是0 保持原瞎改来状态
LED = 0 //灯亮}}有什么不明白的可以问我!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)