/*************************************************************
流水灯测试程序
程序编写:Fucp 2015-2-7
DIY套件 http://59tiaoba.taobao.com
单片机 IAP15W4K61S4 或者其他stc15w系列 晶振18.432M
电机旋转方向 逆时针
/***********************************************************
说明:此程序用于测试LED焊接好坏
*************************************************************/
#include "NEW_8051.H"
#define uchar unsigned char
#define uint unsigned int //宏定义
sbit R1=P6^6; //定义R每个IO控制的LED
sbit R2=P2^7;
sbit R3=P4^0;
sbit R4=P1^7;
sbit R5=P0^0;
sbit R6=P0^6;
sbit R7=P1^2;
sbit R8=P1^5;
sbit R9=P1^1;
sbit R10=P0^7;
sbit R11=P0^5;
sbit R12=P0^1;
sbit R13=P7^6;
sbit R14=P6^5;
sbit R15=P3^4;
sbit R16=P4^4;
sbit G1=P2^1; //定义G每个IO控制的LE
sbit G2=P2^3;
sbit G3=P6^4;
sbit G4=P7^7;
sbit G5=P4^6;
sbit G6=P0^2;
sbit G7=P6^1;
sbit G8=P1^4;
sbit G9=P1^6;
sbit G10=P4^7;
sbit G11=P6^0;
sbit G12=P5^2;
sbit G13=P4^5;
sbit G14=P2^6;
sbit G15=P6^7;
sbit G16=P2^2;
sbit B1=P4^3; //定义B每个IO控制的LED
sbit B2=P2^0;
sbit B3=P2^5;
sbit B4=P7^5;
sbit B5=P5^5;
sbit B6=P0^4;
sbit B7=P5^3;
sbit B8=P6^3;
sbit B9=P1^3;
sbit B10=P1^0;
sbit B11=P6^2;
sbit B12=P0^3;
sbit B13=P5^4;
sbit B14=P2^4;
sbit B15=P7^4;
sbit B16=P5^0;
uchar l=0;
//sfr WDT_CONTR = 0xc1; //看门狗控制寄存器
uchar DataLow[4];
uint CeL=0;
/***************************************/
void Show_R(uchar r1,uchar r2)//数据输出IO口 R是红色16灯
{
R1=(bit)(r1&0x01);
R2=(bit)(r1&0x02);
R3=(bit)(r1&0x04);
R4=(bit)(r1&0x08);
R5=(bit)(r1&0x10);
R6=(bit)(r1&0x20);
R7=(bit)(r1&0x40);
R8=(bit)(r1&0x80);
R9=(bit)(r2&0x01);
R10=(bit)(r2&0x02);
R11=(bit)(r2&0x04);
R12=(bit)(r2&0x08);
R13=(bit)(r2&0x10);
R14=(bit)(r2&0x20);
R15=(bit)(r2&0x40);
R16=(bit)(r2&0x80);
}
void Show_G(uchar r1,uchar r2)//数据输出IO口 G是绿色16灯
{
G1=(bit)(r1&0x01);
G2=(bit)(r1&0x02);
G3=(bit)(r1&0x04);
G4=(bit)(r1&0x08);
G5=(bit)(r1&0x10);
G6=(bit)(r1&0x20);
G7=(bit)(r1&0x40);
G8=(bit)(r1&0x80);
G9=(bit)(r2&0x01);
G10=(bit)(r2&0x02);
G11=(bit)(r2&0x04);
G12=(bit)(r2&0x08);
G13=(bit)(r2&0x10);
G14=(bit)(r2&0x20);
G15=(bit)(r2&0x40);
G16=(bit)(r2&0x80);
}
void Show_B(uchar r1,uchar r2)//数据输出IO口 B是绿色16灯
{
B1=(bit)(r1&0x01);
B2=(bit)(r1&0x02);
B3=(bit)(r1&0x04);
B4=(bit)(r1&0x08);
B5=(bit)(r1&0x10);
B6=(bit)(r1&0x20);
B7=(bit)(r1&0x40);
B8=(bit)(r1&0x80);
B9=(bit)(r2&0x01);
B10=(bit)(r2&0x02);
B11=(bit)(r2&0x04);
B12=(bit)(r2&0x08);
B13=(bit)(r2&0x10);
B14=(bit)(r2&0x20);
B15=(bit)(r2&0x40);
B16=(bit)(r2&0x80);
}
void delayMs(void) //误差 -0.054253472218us 300ms
{
unsigned char a,b,c;
for(c=83;c>0;c--)
for(b=68;b>0;b--)
for(a=203;a>0;a--);
}
/*****主函数*****/
void main(void)
{
P1M0=0X00;
P1M1=0X00;
WDT_CONTR = 0x04; //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
//设置看门狗定时器分频数为32,溢出时间如下:
//11.0592M : 1.14s
//18.432M : 0.68s
//20M : 0.63s
WDT_CONTR |= 0x20; //启动看门狗
P0M0=0X00; //IO口初始化准双向IO
P0M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
P4M0=0X00;
P4M1=0X00;
P5M0=0X00;
P5M1=0X00;
P6M0=0X00;
P6M1=0X00;
P7M0=0X00;
P7M1=0X00;
P0=0XFF;
P1=0XFF;
P2=0XFF;
P3=0XFF;
P4=0XFF;
P5=0XFF;
P6=0XFF;
P7=0XFF;
//主程序中
while(1)
{
CeL=0x0001;
for(l=0;l<16;l++)
{
DataLow[0]=CeL;
DataLow[1]=CeL>>8;
Show_R(~DataLow[0],~DataLow[1]);
Show_G(~DataLow[0],~DataLow[1]);
Show_B(~DataLow[0],~DataLow[1]);
delayMs();
WDT_CONTR=0x14;
CeL=CeL<<1;
}
}
}
/*********************************************************************************/
/*************************************************************************************
************************************************************************************
*********************** ***************************
*************DIY视界出品 http://59tiaoba.taobao.com ***************************
*********************** ***************************
************************************************************************************
**********************************************************************************/