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

📄 liguolin.c

📁 LED照明行业地砖及护栏控制器程序 从现况来看
💻 C
字号:
//************************************
//**** 李国林变色灯,按键停止
//****	pcb:mdx-48 mcu:89c2051 2004-08-23
//************************************
#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   0xfb  /* 时间常数高8位 (65536-500)/256			*/
#define V_TL0   0x00  /* 时间常数低8位 (65536-500)%256   11.0592*/
#define ADD 2
#define reg01 XBYTE[0xc000]
#define reg02 XBYTE[0xc001] //控制寄存器
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 	0xa1

//*****************************************
uchar rbuf,gbuf,bbuf;
uchar bdata flag;
sbit	sw=flag^0;
sbit	keyin=P1^4;
sbit 	roe=P0^7;//	roe=P1^7;
sbit 	goe=P0^6;//	goe=P1^6;
sbit	boe=P0^5;//	boe=P1^5;
sbit	SCL=P3^0;
sbit	SDA=P3^1;
/***************************************************************************/
void I2cDelay(unsigned int number) {
	unsigned char temp;
	for(;number!=0;number--) {
		for(temp=112;temp!=0;temp--) {
		}
	}
}

/***************************************************************************/
void Start() {
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}

/***************************************************************************/
void Stop() {
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}

/***************************************************************************/
void Ack() {
	SDA=0;
	SCL=1;
	SCL=0;
	SDA=1;
}

/***************************************************************************/
void NoAck() {
	SDA=1;
	SCL=1;
	SCL=0;
}

/***************************************************************************/
bit TestAck() {
	bit ErrorBit;
	SDA=1;
	SCL=1;
	ErrorBit=SDA;
	SCL=0;
	return(ErrorBit);
}

/***************************************************************************/
Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--) {
		SDA=(bit)(input&0x80);
		SCL=1;
		SCL=0;
		input=input<<1;
	}
}

/***************************************************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(RomAddress);
	TestAck();
	for(;number!=0;number--) {
		Write8Bit(*Wdata);
		TestAck();
		Wdata++;
	}
	Stop();
	I2cDelay(10);
}

/***************************************************************************/
unsigned char Read8Bit() {
	unsigned char temp,rbyte=0;
	for(temp=8;temp!=0;temp--) {
		SCL=1;
		rbyte=rbyte<<1;
		rbyte=rbyte|((unsigned char)(SDA));
		SCL=0;
	}
	return(rbyte);
}

/***************************************************************************/
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
//	unsigned char temp,rbyte;
	Start();
	Write8Bit(WriteDeviceAddress);
	TestAck();
	Write8Bit(RomAddress);
	TestAck();
	Start();
	Write8Bit(ReadDviceAddress);
	TestAck();
	while(bytes!=1) {
	*RamAddress=Read8Bit();
	Ack();
	RamAddress++;
	bytes--;
	}
	*RamAddress=Read8Bit();
	NoAck();
	Stop();
}

//***************************************	
void	pwm_oe(uchar r,g,b)
{
uchar i;
for(i=1;i<255;i++)
	{
	roe=(r<i)?1:0;
	goe=(g<i)?1:0;
	boe=(b<i)?1:0;
	}
}
//*********************************
bit key	(void)
{
uchar *p;
uchar temp[5];
p=&temp[0];
keyin=1;
if(!keyin)
	{
	pwm_oe(rbuf,gbuf,bbuf);
	if(keyin)return(sw);
	while(!keyin)pwm_oe(rbuf,gbuf,bbuf);
	pwm_oe(rbuf,gbuf,bbuf);
	sw=!sw;
	temp[0]=0x55;
	temp[1]=rbuf;
	temp[2]=gbuf;
	temp[3]=bbuf;
	Write24c02(p,0,5);
	}
return(sw);
}
//**********************
void	delay(void)
{
do
	pwm_oe(rbuf,gbuf,bbuf);
while(key());
}
//**********************************



//******************************
void color(void)
{
uchar i;
for(gbuf=255;gbuf>0;gbuf--)
	{bbuf=gbuf;pwm_oe(rbuf,gbuf,bbuf);delay();}//r
	rbuf=255;gbuf=0;bbuf=0;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(gbuf=1;gbuf>0;gbuf++)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//y
	gbuf=255;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(rbuf=255;rbuf>0;rbuf--)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//g
	rbuf=0;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(bbuf=1;bbuf>0;bbuf++)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//q
	bbuf=255;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(gbuf=255;gbuf>0;gbuf--)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//b
	gbuf=0;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(rbuf=1;rbuf>0;rbuf++)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//z
	rbuf=255;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
for(gbuf=1;gbuf>0;gbuf++)
	{pwm_oe(rbuf,gbuf,bbuf);delay();}//w
	gbuf=255;
	for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}



}
//************************
main()
{
uchar *p;
uchar temp[5];
p=&temp[0];
Read24c02(p,0,5);
if(temp[0]==0x55)
	{sw=1;
	rbuf=temp[1];
	gbuf=temp[2];
	bbuf=temp[3];
	delay();
	}
else
	{sw=0;
	rbuf=gbuf=bbuf=255;
	}
while(1)
	color();
}

⌨️ 快捷键说明

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