|  | 
 
| #include "stc15.h" #include "intrins.h"
 #define uint unsigned int
 #define uchar unsigned char
 //#define MAIN_Fosc 24000000
 
 sbit Din=P5^3;
 
 
 
 void io_init()//初始化IO口,如果不初始化IO口,特定某些IO可能高阻状态,具体怎么初始化参考手册,这里为双向口
 {
 P0M0=0x00;
 P0M1=0x00;//P0
 P1M0=0x00;
 P1M1=0x00;//P1
 P2M0=0x00;
 P2M1=0x00;//P2
 P3M0=0x00;
 P3M1=0x00;//P3
 P4M0=0x00;
 P4M1=0x00;//P4
 P5M0=0x00;
 P5M1=0x00;//P5
 P6M0=0x00;
 P6M1=0x00;//P6
 P7M0=0x00;
 P7M1=0x00;//P7
 }
 //void  delay_ms(unsigned int ms)//一个简单的延时
 //{
 //            unsigned int i;
 //            do
 //    {
 //            i = MAIN_Fosc / 13000;
 //            while(--i);   //14T per loop
 //    }
 //            while(--ms);
 //}
 void delay_us(uint us)
 {
 unsigned char i;
 
 while(us--)
 {
 i = 3;
 while (--i);
 }
 }
 void delay_ms(uint ms)
 {
 unsigned char i, j;
 
 while(ms--)
 {
 _nop_();
 _nop_();
 i = 24;
 j = 84;
 do
 {
 while (--j);
 } while (--i);
 }
 }
 /*******************************************************
 * 函数名: RGB_LOW
 * 描述  :0码
 * 输入  :无
 * 输出  :无
 * 备注     :
 *******************************************************/
 void RGB_LOW()
 {
 Din=1;
 _nop_();
 Din=0;
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 }
 /*******************************************************
 * 函数名: RGB_High
 * 描述  :1码
 * 输入  :无
 * 输出  :无
 * 备注     :
 *******************************************************/
 void RGB_High()
 {
 Din=1;
 _nop_(); _nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 
 Din=0;
 _nop_();_nop_(); _nop_(); _nop_();
 
 }
 /*******************************************************
 * 函数名: RGB_RESET
 * 描述  :复位
 * 输入  :无
 * 输出  :无
 * 备注     :
 *******************************************************/
 void RGB_RESET()
 {
 
 Din = 0;
 delay_us(60);
 }
 /*******************************************************
 * 函数名: RGB_BYTE
 * 描述  :单色一个字节写入
 * 输入  :X  为
 r
 g
 b
 * 输出  :无
 * 备注     :
 *******************************************************/
 void RGB_BYTE(uchar X)
 {
 uchar i;
 for(i=0;i<8;i++)
 {
 
 if((X&0X80))
 {
 RGB_High();
 
 }
 else
 RGB_LOW();
 
 X=X<<1;
 }
 }
 
 /*******************************************************
 * 函数名:RGB_display
 * 描述  :颜色写入
 * 输入  :r:红色
 g;蓝色
 b;绿色
 len;灯的个数
 * 输出  :无
 * 备注     :0-255级亮度
 *******************************************************/
 void RGB_display(uchar r,uchar g,uchar b,uchar len)
 {
 uchar i;
 RGB_RESET();
 for(i=0;i<len;i++)
 {
 
 RGB_BYTE(r);
 RGB_BYTE(g);
 RGB_BYTE(b);
 }
 RGB_RESET();
 
 }
 
 void main()
 {
 uchar q;
 uchar r,g,b;
 uchar w,e;
 io_init();//对IO进行初始化稍微延时一会
 delay_ms(10);
 r=255;
 g=0;
 b=0;
 e=1;
 while(1)
 {
 
 for(q=1;q<29;q++)
 {
 RGB_display(g,r,b,q);
 delay_ms(e);
 
 }
 w++;
 switch(w)
 {
 case 0:r=255;g=0;b=0;e=5;break;
 case 1:r=0;g=255;b=0;e=10;break;
 case 2:r=0;g=0;b=255;e=15;break;
 case 3:r=255;g=255;b=0;e=20;break;
 case 4:r=255;g=0;b=255;e=25;break;
 case 5:r=255;g=255;b=255;e=30;break;
 case 6:r=100;g=0;b=255;e=1;break;
 case 7:r=200;g=100;b=20;e=2;break;
 case 8:r=120;g=120;b=255;e=3;break;
 case 9:r=234;g=77;b=32;e=4;break;
 case 10:r=136;g=0;b=255;e=5;break;
 case 11:r=30;g=100;b=255;e=6;break;
 }
 if(w==12)
 {
 w=0;
 }
 
 }
 }
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?立即注册 
  |