📄 liguolin.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 + -