📄 krhld.c
字号:
//************************************
//**** 测试护栏管程序
//**** pcb:mdx-48 mcu:89c2051 2004-07-17
//************************************
#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] //控制寄存器
uchar code chr[]=
{
0x0B,0x0B,0x0A,0x0A,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,
0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,
0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0D,0x0D,0x0D,0x0C,0x0C,0x0B,0x00,
0x0B,0x0B,0x0A,0x0A,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,
0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,
0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0D,0x0D,0x0D,0x0C,0x0C,0x0B,0x00,
0x0B,0x0B,0x0A,0x0A,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,
0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,
0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0D,0x0D,0x0D,0x0C,0x0C,0x0B,0x00,
0x0B,0x0B,0x0A,0x0A,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,
0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,
0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0D,0x0D,0x0D,0x0C,0x0C,0x0B,0x00,
};
//*****************************************************************************
uchar code chg[]=
{
0x0F,0x0E,0x0E,0x0E,0x0D,0x0D,0x0C,0x0C,0x0C,0x0B,0x0B,0x0B,0x0A,0x0A,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x08,0x08,0x07,0x07,
0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
0x05,0x05,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x00,
0x0F,0x0E,0x0E,0x0E,0x0D,0x0D,0x0C,0x0C,0x0C,0x0B,0x0B,0x0B,0x0A,0x0A,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x08,0x08,0x07,0x07,
0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
0x05,0x05,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x00,
0x0F,0x0E,0x0E,0x0E,0x0D,0x0D,0x0C,0x0C,0x0C,0x0B,0x0B,0x0B,0x0A,0x0A,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x08,0x08,0x07,0x07,
0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
0x05,0x05,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x00,
0x0F,0x0E,0x0E,0x0E,0x0D,0x0D,0x0C,0x0C,0x0C,0x0B,0x0B,0x0B,0x0A,0x0A,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x09,0x09,0x09,0x08,0x08,0x07,0x07,
0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
0x05,0x05,0x05,0x05,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x00,
};
//*************************************
uchar code chb[]=
{
0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,
0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x0D,0x0B,0x0A,0x08,0x07,0x06,0x05,0x04,0x03,
0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,
0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x0D,0x0B,0x0A,0x08,0x07,0x06,0x05,0x04,0x03,
0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,
0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x0D,0x0B,0x0A,0x08,0x07,0x06,0x05,0x04,0x03,
0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,
0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x0D,0x0B,0x0A,0x08,0x07,0x06,0x05,0x04,0x03,
};
//******************************
uchar code x64cr[]=
{
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
};
//********************
uchar code x64cg[]=
{
0,0,0,0,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
15,11,7,3,0,0,0,0,
};
//*************************************
uchar code x64cb[]=
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
15,11,7,3,0,0,0,0,
};
//******************************
uchar code x7cr[]=
{
15,
15,
0,
0,
0,
15,
15,
};
//********************
uchar code x7cg[]=
{
0,
15,
15,
15,
0,
0,
15,
};
//*************************************
uchar code x7cb[]=
{
0,
0,
0,
15,
15,
15,
15,
};
//**************************************************************
uchar pwm,rl,mode;
uchar pointer;
uchar dis_buf[96];
sbit roe=P1^3;
sbit goe=P1^4;
sbit boe=P1^5;
sbit da=P1^0;
sbit sclk=P1^1;
sbit lat=P1^2;
//*****************************************
// 延时
//**************************************
void delay(uint tim)
{
uint i;
while(tim!=0)
{
for(i=0;i<500;i++);
tim--;
}
}
//-----------------------
void cler(void)
{
uchar i,j;
j=0;
for(i=0;i<96;i++)
dis_buf[i]=~j;
}
//*****************************************
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;
}
}
//********************************
// 多彩流动
//***************************************
void qcld(uchar ts,uchar code *rp,uchar code *gp,uchar code *bp)
{
uchar i,j;
for(j=0;j<ts;j++)
{
for(i=0;i<7;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[7]=dis_buf[24];
for(i=8;i<15;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[15]=dis_buf[32];
for(i=16;i<23;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[23]=dis_buf[40];
for(i=24;i<31;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[31]=dis_buf[48];
for(i=32;i<39;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[39]=dis_buf[56];
for(i=40;i<47;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[47]=dis_buf[64];
for(i=48;i<55;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[55]=dis_buf[72];
for(i=56;i<63;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[63]=dis_buf[80];
for(i=64;i<71;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[71]=dis_buf[88];
for(i=72;i<79;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[79]=*rp++;
for(i=80;i<87;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[87]=*gp++;
for(i=88;i<95;i++)
dis_buf[i]=dis_buf[i+1];
dis_buf[95]=*bp++;
delay(60);
}
}
//************************************
//七彩渐变
//**********************************
void qcjb(uint speed)
{
uchar i,j;
for(i=0;i<96;i++)
{
da=1;
sclk=1;
sclk=0;
}
lat=0;
lat=1;
for(i=0;i<255;i++)
for(j=0;j<speed;j++)
pwm_oe(i,0,0);
for(i=0;i<255;i++)
for(j=0;j<speed;j++)
pwm_oe(255,i,0);//y
for(i=255;i>0;i--)
for(j=0;j<speed;j++)
pwm_oe(i,255,0);//g
for(i=0;i<255;i++)
for(j=0;j<speed;j++)
pwm_oe(0,255,i);//q
for(i=255;i>0;i--)
for(j=0;j<speed;j++)
pwm_oe(0,i,255);//b
for(i=0;i<255;i++)
for(j=0;j<speed;j++)
pwm_oe(i,0,255);//z
for(i=0;i<255;i++)
for(j=0;j<speed;j++)
pwm_oe(255,i,255);//b
}
//*********************************
void main(void)
{
uchar i;
TMOD=0x01;
TL0=V_TL0;
TH0=V_TH0;
TR0=1;
ET0=1;
TR1=1;
rl=0x01;
P1=0;
while(1)
{
EA=0;
qcjb(2);
EA=1;
roe=0;
goe=0;
boe=0;
cler();
qcld(255,chr,chg,chb);
qcld(255,chr,chg,chb);
qcld(56,x64cr,x64cg,x64cb);
qcld(56,x64cr,x64cg,x64cb);
for(i=0;i<12;i++)
qcld(7,x7cr,x7cg,x7cb);
}
}
//**************************************
void pwmout(void)
{
uchar i;
for(i=0;i<96;i++)
{
da=(bit)(dis_buf[i]&rl);
sclk=0;
sclk=1;
}
lat=0;
lat=1;
}
//*******************************************
void timer1() interrupt 1
{
TR0=0;
pwm++;
switch(pwm)
{
case 1:
pwmout();
rl=0x02;
break;
case 2:
pwmout();
rl=0x04;
break;
case 4:
pwmout();
rl=0x08;
break;
case 8:
pwmout();
rl=0x01;
break;
case 16:
pwm=0;
break;
default: break;
}
TR0=1;
}//end sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -