欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STC15F104W單片機TM1803彩燈程序 [打印本頁]

作者: kxcuser    時間: 2021-7-3 12:00
標題: STC15F104W單片機TM1803彩燈程序
/******************************************************************************/
STC15F104W芯片
內部晶振18.432M
/*******************************************************************************/

#include <STC15F100W.H>                            //MCU頭文件
#include "intrins.h"                            //包含nop指令頭文件

#define nop  _nop_();   
                   //宏定義
/********************************定義控制端口***********************************/
sbit DO=P3^4;                                    //定義信號輸出DO
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;
/**********************************定義變量*************************************/
unsigned int IC=6;                          //控制TM1804個數
unsigned int LED_PX;                        //像素點數
unsigned char PWM=255;                      //TM1804灰度數據
unsigned char Rda,Gda,Bda;                  //R、G、B灰度數據
unsigned char bdata LED_data;               //可位操作的數據發送暫存變量聲明
sbit bit0=LED_data^0;                            //被發送的數據各位定義
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;                                 //定義一個標志位

/**********************************延時函數*************************************/
void delay(unsigned int n)                  //n=1,延時500us
{
unsigned int i;
while(n--)
for(i=0;i<860;i++);
}

/********************發送0碼函數,高電平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;
}

/*******************發送1碼函數,高電平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;   
}

/***********************發送1個字節數據,高位先發*******************************/
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();
}
/******************************發送1幀數據*************************************/
void send_px()
{
unsigned int i;
for(i=0;i<LED_PX;i++)
  {
   send_data(Rda);             //發送R灰度數據
   send_data(Gda);             //發送G灰度數據
   send_data(Bda);             //發送B灰度數據
  }
}
/*===============================主函數=======================================*/
void main()
{
unsigned char i;
P3M0=0xFF;
P3M1=0x00;
led1=led2=led3=0;
LED_PX=IC;                          //像素點數等于TM1804個數
Rda=Gda=Bda=0;                      //R、G、B灰度數據復位清零
while(1)
  {
   for(i=0;i<PWM;i++)          //紅色漸亮  
    {
     Rda=i;              //灰度計算
     send_px();          //發送灰度數據
     delay(50);          //復位延時
    }
    flag=1;                     //標志位置位
    while(flag)                 //標志位置位后循環函數
    {
     for(i=0;i<PWM;i++)  //紅色漸滅,綠色漸亮
      {
       Gda=i;
       Rda=PWM-i;  //灰度計算
       send_px();  //發送灰度數據
       delay(50);  //復位延時
      }
     for(i=0;i<PWM;i++)  //綠色漸滅,藍色漸亮
      {
       Bda=i;           
       Gda=PWM-i;  //灰度計算
       send_px();  //發送灰度數據
       delay(50);  //復位延時
      }
     for(i=0;i<PWM;i++)  //藍色漸滅,紅色漸亮
      {
       Rda=i;
       Bda=PWM-i;  //灰度計算
       send_px();  //發送灰度數據
       delay(50);  //復位延時
      }
    }
  }
}
/*================================結束==========================================*/






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1