|
/******************************************************************************/
STC15F104W芯片
內(nèi)部晶振18.432M
/*******************************************************************************/
#include <STC15F100W.H> //MCU頭文件
#include "intrins.h" //包含nop指令頭文件
#define nop _nop_();
//宏定義
/********************************定義控制端口***********************************/
sbit DO=P3^4; //定義信號(hào)輸出DO
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;
/**********************************定義變量*************************************/
unsigned int IC=6; //控制TM1804個(gè)數(shù)
unsigned int LED_PX; //像素點(diǎn)數(shù)
unsigned char PWM=255; //TM1804灰度數(shù)據(jù)
unsigned char Rda,Gda,Bda; //R、G、B灰度數(shù)據(jù)
unsigned char bdata LED_data; //可位操作的數(shù)據(jù)發(fā)送暫存變量聲明
sbit bit0=LED_data^0; //被發(fā)送的數(shù)據(jù)各位定義
sbit bit1=LED_data^1;
sbit bit2=LED_data^2;
sbit bit3=LED_data^3;
sbit bit4=LED_data^4;
sbit bit5=LED_data^5;
sbit bit6=LED_data^6;
sbit bit7=LED_data^7;
bit flag=0; //定義一個(gè)標(biāo)志位
/**********************************延時(shí)函數(shù)*************************************/
void delay(unsigned int n) //n=1,延時(shí)500us
{
unsigned int i;
while(n--)
for(i=0;i<860;i++);
}
/********************發(fā)送0碼函數(shù),高電平400ns,周期1.25us************************/
void send_data_0()
{
DO=1;
nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
DO=0;
nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;
}
/*******************發(fā)送1碼函數(shù),高電平800ns,周期1.25us*************************/
void send_data_1()
{
DO=1;
nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
DO=0;
}
/***********************發(fā)送1個(gè)字節(jié)數(shù)據(jù),高位先發(fā)*******************************/
void send_data(unsigned char DATA)
{
LED_data=DATA;
if(bit7) send_data_1(); else send_data_0();
if(bit6) send_data_1(); else send_data_0();
if(bit5) send_data_1(); else send_data_0();
if(bit4) send_data_1(); else send_data_0();
if(bit3) send_data_1(); else send_data_0();
if(bit2) send_data_1(); else send_data_0();
if(bit1) send_data_1(); else send_data_0();
if(bit0) send_data_1(); else send_data_0();
}
/******************************發(fā)送1幀數(shù)據(jù)*************************************/
void send_px()
{
unsigned int i;
for(i=0;i<LED_PX;i++)
{
send_data(Rda); //發(fā)送R灰度數(shù)據(jù)
send_data(Gda); //發(fā)送G灰度數(shù)據(jù)
send_data(Bda); //發(fā)送B灰度數(shù)據(jù)
}
}
/*===============================主函數(shù)=======================================*/
void main()
{
unsigned char i;
P3M0=0xFF;
P3M1=0x00;
led1=led2=led3=0;
LED_PX=IC; //像素點(diǎn)數(shù)等于TM1804個(gè)數(shù)
Rda=Gda=Bda=0; //R、G、B灰度數(shù)據(jù)復(fù)位清零
while(1)
{
for(i=0;i<PWM;i++) //紅色漸亮
{
Rda=i; //灰度計(jì)算
send_px(); //發(fā)送灰度數(shù)據(jù)
delay(50); //復(fù)位延時(shí)
}
flag=1; //標(biāo)志位置位
while(flag) //標(biāo)志位置位后循環(huán)函數(shù)
{
for(i=0;i<PWM;i++) //紅色漸滅,綠色漸亮
{
Gda=i;
Rda=PWM-i; //灰度計(jì)算
send_px(); //發(fā)送灰度數(shù)據(jù)
delay(50); //復(fù)位延時(shí)
}
for(i=0;i<PWM;i++) //綠色漸滅,藍(lán)色漸亮
{
Bda=i;
Gda=PWM-i; //灰度計(jì)算
send_px(); //發(fā)送灰度數(shù)據(jù)
delay(50); //復(fù)位延時(shí)
}
for(i=0;i<PWM;i++) //藍(lán)色漸滅,紅色漸亮
{
Rda=i;
Bda=PWM-i; //灰度計(jì)算
send_px(); //發(fā)送灰度數(shù)據(jù)
delay(50); //復(fù)位延時(shí)
}
}
}
}
/*================================結(jié)束==========================================*/
|
評(píng)分
-
查看全部評(píng)分
|