• 大小: 871KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签: rgb  pb9813  全光谱  

资源简介

系统是利用P9813模块来实现照明与彩灯闪烁等功能,P9813模块输入电压为5V~6.5V,内置红绿蓝三原色led灯,通过P9813模块可以控制彩灯的颜色以及亮度。同时,

资源截图

代码片段和文件信息

/*
*========================================================================================================
*
* File                : RGB_LED.c
* Hardware Environment:
* Build Environment   : AVR Studio 4.18 + Winavr 20100110
* Version             : V1.0
* By                  : Chen Zhe
*
*                                  (c) Copyright 2013-2017 WaveShare
*                                       http://www.waveShare.net
*                                          All Rights Reserved
*
*========================================================================================================
*/


#include 
#include “avr_rgb_led.h“

uint8 Color_R=0;
uint8 Color_G=0;
uint8 Color_B=0;
uint8 C_Loop=0;


void delay_ms(unsigned int  ms)
{

     for(volatile unsigned  int i=0;i  
}

/************ generation clock *********************/
void ClkProduce(void)
{  
  SCL_LOW;    // SCL=0
delay_ms(20);
  SCL_HIGH;     // SCL=1
  delay_ms(20);
   
}
 

/**********  send 32 zero ********************/
void Send32Zero(void)
{
    unsigned char i; 

SDA_LOW;   // SDA=0

for (i=0; i<32; i++)
{
          ClkProduce();
    }
}


 /********* invert the grey value of the first two bits ***************/
uint8 TakeAntiCode(uint8 dat)
{
    uint8 tmp = 0;

tmp=((~dat) & 0xC0)>>6;  
return tmp;
}
 

/****** send gray data *********/
void DatSend(uint32 dx)
{
    uint8 i;
 
for (i=0; i<32; i++)
{
    if ((dx & 0x80000000) != 0)
{
        
        SDA_HIGH;     //  SDA=1; 
}
else
{
             SDA_LOW;    //  SDA=0; 
}
 
dx <<= 1;
        ClkProduce();
}
}
 
/******* data processing  ********************/
void DataDealWithAndSend(uint8 r uint8 g uint8 b)
{
    uint32 dx = 0;
 
    dx |= (uint32)0x03 << 30;             // The front of the two bits 1 is flag bits
    dx |= (uint32)TakeAntiCode(b) << 28;
    dx |= (uint32)TakeAntiCode(g) << 26;
    dx |= (uint32)TakeAntiCode(r) << 24;
 
    dx |= (uint32)b << 16;
    dx |= (uint32)g << 8;
    dx |= r;
 
    DatSend(dx);
}




int main(void) 
{   
 SCL_SDA_OUT;  //PD0 PD1 OUT
 SCL_SDA_HIGH;// PD0 PD1 HIGH

while(1)
{
char ij;

  Send32Zero();
for(j=0;j {
DataDealWithAndSend(10000);   // display red

}
Send32Zero();
delay_ms(60000);                  // four delay_ms() about 1s
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);

Send32Zero();
for(j=0;j {
DataDealWithAndSend(00100);   // display green
}
Send32Zero();
delay_ms(60000);
    delay_ms(60000);
delay_ms(60000);
    delay_ms(60000);


Send32Zero();
for(j=0;j {
DataDealWithAndSend(01000);   // display blue
}
Send32Zero();
delay_ms(60000);
    delay_ms(60000);
delay_ms(60000);
    delay_ms(60000);

Send32Zero();
for(j=0;j

评论

共有 条评论