标题:
单片机PWM控制LED同步渐变分控效果程序
[打印本页]
作者:
421352738
时间:
2022-1-20 11:51
标题:
单片机PWM控制LED同步渐变分控效果程序
//************************************
//***********
//**** 2004-06-19 mcu at89c2051 38400BPS OSC 22.1184MHZ
//************************************
#include <at892051.h>
#include <stdio.h>//一般I/O函数
#include <stdlib.h>//标准函数
#include <absacc.h>//绝对地址
#include <intrins.h>//内部函数
#include <setjmp.h>
#define uchar unsigned char
#define uint unsigned int
#define Byte unsigned char
#define Word unsigned int
#define ulong unsigned long
#define bool bit
#define true 1
#define false 0
#define V_TH0 0xff /* 时间常数高8位 (65536-500)/256 */
#define V_TL0 0x80 /* 时间常数低8位 (65536-500)%256 11.0592*/
#define ADD 1
//******************************
sbit roe=P3^2;
sbit goe=P3^3;
sbit boe=P3^4;
//**************************************************************
uchar dis_buf_r,dis_buf_g,dis_buf_b; //显示缓冲
uchar mode;
uchar pointer;
uchar send_buf[4];
uchar pwm,rl;
uchar setadd;
jmp_buf env;
int retval;
uchar bdata flags;
sbit flag0=flags^0;
sbit flag1=flags^1;
sbit flag2=flags^2;
sbit flag3=flags^3;
sbit frameok=flags^4;
//*********************************
void delay(uint j);
void qcgd(uint speed);
//*********************************
void main(void)
{
TMOD=0x21;
SCON=0xd0;
TH1=0xfd;
TL1=0xfd; //256-(22.1184*10~6/32/12/3/38400*2)
//PCON=0X80;//倍频
SM2=1;
TL0=V_TL0;
TH0=V_TH0;
TR0=1;
ET0=1;
TR1=1;
ET1=0;
ES=1;
EA=1;
PS=1;
frameok=0;
pointer=0;
dis_buf_b=dis_buf_g=dis_buf_r=15;
setadd=(~P1)&0xff;
while(1)
{
if(mode==0x55)
{delay(4);}
else
{
retval=setjmp(env);
if(retval==0)
{
qcgd(20);
}
}
}
}
//*********************************
// 接收数据
//*********************************
void receive(void)
{
dis_buf_r=send_buf[1];
dis_buf_g=send_buf[2];
dis_buf_b=send_buf[3];
}
//*****************************************
// 延时
//**************************************
void delay(uint tim)
{
uint i;
while(tim!=0)
{
for(i=0;i<50;i++)
{
if(frameok)
{receive();
mode=0x55;
frameok=0;
SM2=1;
pointer=0;
retval=1;
longjmp(env,retval);
}
}
tim--;
}
}
//************************************
//七彩过渡roe=(dis_buf_r<pwm)?0:1;
//**********************************
void qcgd(uint speed)
{
//for(i=0;i<255;i++){dis_buf_r=i;dis_buf_g=0;dis_buf_b=0;delay(speed);}//red
/*
for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=i;dis_buf_b=0;delay(speed);}//yeloww
for(i=0;i<16;i++){dis_buf_r=~i;dis_buf_g=15;dis_buf_b=0;delay(speed);}//grn
for(i=0;i<16;i++){dis_buf_r=0;dis_buf_g=15;dis_buf_b=i;delay(speed);}//qi
for(i=0;i<16;i++){dis_buf_r=0;dis_buf_g=~i;dis_buf_b=15;delay(speed);}//blu
for(i=0;i<16;i++){dis_buf_r=i;dis_buf_g=0;dis_buf_b=15;delay(speed);}//zhi
for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=i;dis_buf_b=15;delay(speed);}//w
for(i=0;i<16;i++){dis_buf_r=15;dis_buf_g=~i;dis_buf_b=~i;delay(speed);}//r
*/
for(dis_buf_g=63;dis_buf_g<64;dis_buf_g--)
{dis_buf_b=dis_buf_g;delay(speed);}//r
dis_buf_r=63;dis_buf_g=0;dis_buf_b=0;
for(dis_buf_g=1;dis_buf_g<64;dis_buf_g++)
{delay(speed);}//y
dis_buf_g=63;
for(dis_buf_r=63;dis_buf_r<64;dis_buf_r--)
{delay(speed);}//g
dis_buf_r=0;
for(dis_buf_b=1;dis_buf_b<64;dis_buf_b++)
{delay(speed);}//q
dis_buf_b=63;
for(dis_buf_g=63;dis_buf_g<64;dis_buf_g--)
{delay(speed);}//b
dis_buf_g=0;
for(dis_buf_r=1;dis_buf_r<64;dis_buf_r++)
{delay(speed);}//z
dis_buf_r=63;
for(dis_buf_g=1;dis_buf_g<64;dis_buf_g++)
{delay(speed);}//w
dis_buf_g=63;
}
//****************************************
// 通讯子程序
//**************************************
void send(void) interrupt 4
{
if(!TI && RI && !frameok)
{RI=0;
if(pointer==0)
{
if(SBUF==setadd||SBUF==0)
{
SM2=0;pointer++;
}
}
else
{
if(pointer<3)
{send_buf[pointer]=SBUF;pointer++;}
else
{
send_buf[pointer]=SBUF;
frameok=1;
}
}
}//end if
}//end sub
//*******************************************
void timer1() interrupt 1
{
TL0=V_TL0;
TH0=V_TH0;
pwm++;
if(pwm>63)pwm=0;
//for(pwm=0;pwm<64;pwm++)
// {
roe=(dis_buf_r<=pwm)?1:0;
goe=(dis_buf_g<=pwm)?1:0;
boe=(dis_buf_b<=pwm)?1:0;
// }
}//end sub
复制代码
作者:
heicad
时间:
2022-1-20 17:52
缺少头文件啊 楼主能分享一下吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1