⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hldv13.c

📁 LED照明行业地砖及护栏控制器程序 从现况来看
💻 C
字号:
//************************************
//****护栏灯管控制程序********* 
//****	2004-06-19	mcu at89c2051 172800BPS  OSC 11.0592MHZ
// ding li zhao ming
//************************************
#include <reg51.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   0xfe  /* 时间常数高8位 (65536-500)/256			*/
#define V_TL0   0x0c  /* 时间常数低8位 (65536-500)%256   11.0592*/
#define ADD 2


//******************************

sbit red0=P1^0;
sbit grn0=P1^4;
sbit blu0=P3^3;

sbit red1=P1^1;
sbit grn1=P1^5;
sbit blu1=P3^4;

sbit red2=P1^2;
sbit grn2=P1^6;
sbit blu2=P3^5;

sbit red3=P1^3;
sbit grn3=P1^7;
sbit blu3=P3^7;
sbit senden=P3^2;


//**************************************************************
uchar 	mode;
uchar 	pointer;
uchar	dis_red0,dis_red1,dis_red2,dis_red3;
uchar	dis_grn0,dis_grn1,dis_grn2,dis_grn3;
uchar	dis_blu0,dis_blu1,dis_blu2,dis_blu3;

uchar	send_buf[13];
uchar	pwm,rl;
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	receive(void);
void	qcgd(uint speed);
void	qcld(uchar speed);
void	qcpm(uchar speed);
//*********************************
void main(void)
{

TMOD=0x21;
SCON=0xd0;
TH1=0xfd;
TL1=0xfd;
PCON=0X80;
SM2=1;

TL0=V_TL0;
TH0=V_TH0;
TR0=1;
ET0=1;

TR1=1;
ET1=0;
ES=1;
EA=1;



rl=0x01;
senden=0;
frameok=0;
pointer=0;

while(1)
	{
	if(mode==0x55)
		{delay(4);}
	else
		{
		retval=setjmp(env);
		if(retval==0)
			{
			qcgd(2000);
//			qcld(50);
//			qcgd(500);
//			qcpm(50);
//			qcld(50);
			}
		}
	}
}
//*****************************************
//	 延时
//**************************************
void delay(uint tim)
{
uint i;
while(tim!=0)
	{
	for(i=0;i<500;i++)
		{
//		pwmcoun();
		if(frameok)
			{receive();
			mode=0x55;
			frameok=0;
			retval=1;
			longjmp(env,retval);
			}
		}  
	tim--;
	}
}
//************************************
//七彩过渡
//**********************************
void	qcgd(uint speed)
{
uchar i;
dis_red0=dis_red1=dis_red2=dis_red3=0;
dis_grn0=dis_grn1=dis_grn2=dis_grn3=0;
dis_blu0=dis_blu1=dis_blu2=dis_blu3=0;
for(i=1;i<16;i++)
	{dis_red0=dis_red1=dis_red2=dis_red3=i;
	delay(speed);
	}
for(i=1;i<16;i++)
	{//dis_red0=dis_red1=dis_red2=dis_red3=i;
	dis_grn0=dis_grn1=dis_grn2=dis_grn3=i;		//yello
	delay(speed);
	}
for(i=15;i<16;i--)
	{dis_red0=dis_red1=dis_red2=dis_red3=i; //green
	delay(speed);
	}
for(i=1;i<16;i++)
	{//dis_red0=dis_red1=dis_red2=dis_red3=i;
	dis_blu0=dis_blu1=dis_blu2=dis_blu3=i;
	delay(speed);
	}
for(i=15;i<16;i--)
	{//dis_red0=dis_red1=dis_red2=dis_red3=i; //blue
	dis_grn0=dis_grn1=dis_grn2=dis_grn3=i;		
	delay(speed);
	}
for(i=1;i<16;i++)
	{dis_red0=dis_red1=dis_red2=dis_red3=i;
	delay(speed);
	}
for(i=15;i<16;i--)
	{dis_red0=dis_red1=dis_red2=dis_red3=i; //green
	delay(speed);
	}
}
//*****************************************

//*********************************
//   接收数据
//*********************************
void	receive(void)
{
uchar i;
uchar data *s,*o;
//s=&dis_buf[0];
o=&send_buf[1];
for(i=0;i<12;i++)
	{
//	*s=*o;
	s++;
	o++;
	}
}
//****************************************
// 通讯子程序
//**************************************
void send(void) interrupt  4 
{
if(!TI && RI && !frameok)
 {RI=0;
	if(pointer==0)
		{
		if(SBUF==ADD||SBUF==0)
			{//senden=1;TB8=1,
			//SBUF=ADD;while(!TI);TI=0;
			//senden=0;TB8=0;
			SM2=0;pointer++;
			}
//		else
//			{if(SBUF==0){SM2=0;pointer++;}
//			}
		}
	else
		{
	  	if(pointer<12)
    		{send_buf[pointer]=SBUF;pointer++;}
	  	else
    	 	{send_buf[pointer]=SBUF;SM2=1;frameok=1;pointer=0;} 
		}
 }//end if
}//end sub
void pwmout(void)
{
red0=(bit)(dis_red0&rl);
red1=(bit)(dis_red1&rl);
red2=(bit)(dis_red2&rl);
red3=(bit)(dis_red3&rl);
grn0=(bit)(dis_grn0&rl);
grn1=(bit)(dis_grn1&rl);
grn2=(bit)(dis_grn2&rl);
grn3=(bit)(dis_grn3&rl);
blu0=(bit)(dis_blu0&rl);
blu1=(bit)(dis_blu1&rl);
blu2=(bit)(dis_blu2&rl);
blu3=(bit)(dis_blu3&rl);
}
//*******************************************
void timer1() interrupt  1  
{ 
	pwm++;
	switch(pwm)
		{
		case	1:
			pwmout();
			rl=0x02;
		break;
		case	2:
			pwmout();
			rl=0x02;
		break;
		case	4:
			pwmout();
			rl=0x08;
		break;
		case	8:
			pwmout();
			rl=0x01;
		break;
		case	15:
			pwm=1;
		break;
		default:break;
		}
	TL0=V_TL0;
	TH0=V_TH0;
}//end sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -