#ifndef __RGBLED_H
#define __RGBLED_H
#include "at32l021_gpio.h"
//#include "Delay.h"
//////////////////////////////////////////////////////////////////////////////////
//������
//RGBLED��������
//////////////////////////////////////////////////////////////////////////////////
#define RGBLED_SCL_Clr() gpio_bits_reset(GPIOB,GPIO_PINS_7)
#define RGBLED_SCL_Set() gpio_bits_set(GPIOB,GPIO_PINS_7)
#define RGBLED_SDA_Clr() gpio_bits_reset(GPIOA,GPIO_PINS_9)
#define RGBLED_SDA_Set() gpio_bits_set(GPIOA,GPIO_PINS_9)
void RGBLED_config(void);
void RGBLED_SHOW(void);//RGB��IO��ʼ��
void RGBLED_Show(uint8_t r,uint8_t g,uint8_t b);//RGB����ɫ����
#endif
#include "rgbled.h"
#include "Delay.h"
void RGBLED_config(void)
{
gpio_init_type gpio_initstructure;
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
//gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_0);
//gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_0);
gpio_default_para_init(&gpio_initstructure);
//RGBLED�ܽų�ʼ��
//din data
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins =GPIO_PINS_9;
gpio_initstructure.gpio_pull = GPIO_PULL_DOWN;
gpio_init(GPIOA,&gpio_initstructure);
//cin
gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pins =GPIO_PINS_7;
gpio_initstructure.gpio_pull = GPIO_PULL_UP;
gpio_init(GPIOB,&gpio_initstructure);
RGBLED_SCL_Set();
RGBLED_SDA_Set();
}
//////////////////////////////////////////////////////////////////////////////////
//MB-024
//RGBLED��������
//����ǰ32λ'0'��ʼ֡
void RGBLED_Send32Zero(void)
{
uint8_t i;
RGBLED_SDA_Clr();
for(i=0;i<32;i++)
{
RGBLED_SCL_Clr();//Delay_us(200);
RGBLED_SCL_Set();//Delay_us(200);
}
}
//��תǰ��λ�ĻҶ�ֵ
uint8_t RGBLED_TakeAntiCode(uint8_t dat)
{
uint8_t tmp = 0;
tmp = ((~dat) & 0xC0) >> 6;
return tmp;
}
//���ͻҶ�����
void RGBLED_DatSend(uint32_t dx)
{
uint8_t i;
for(i=0;i<32;i++)
{
if((dx & 0x80000000) !=0)
RGBLED_SDA_Set();
else
RGBLED_SDA_Clr();
dx<<=1;
RGBLED_SCL_Clr();//Delay_us(200);
RGBLED_SCL_Set();///Delay_us(200);
}
}
//���ݴ����뷢��
//r;��ɫֵ 0~255
//g:��ɫֵ 0~255
//b:��ɫֵ 0~255
void RGBLED_DataDealWithAndSend(uint8_t r,uint8_t g,uint8_t b)
{
uint32_t dx=0;
dx |= (uint32_t)0x03 << 30; //ǰ��λ'1'λ��־λ
dx |= (uint32_t)RGBLED_TakeAntiCode(b) << 28;
dx |= (uint32_t)RGBLED_TakeAntiCode(g) << 26;
dx |= (uint32_t)RGBLED_TakeAntiCode(r) << 24;
dx |= (uint32_t)b << 16;
dx |= (uint32_t)g << 8;
dx |= r;
RGBLED_DatSend(dx);//��������
}
//RGB�ƿ��ƺ���
//r;��ɫֵ 0~255
//g:��ɫֵ 0~255
//b:��ɫֵ 0~255
void RGBLED_Show(uint8_t r,uint8_t g,uint8_t b)
{
RGBLED_Send32Zero();//����ǰ32λ'0'��ʼ֡
RGBLED_DataDealWithAndSend(r, g, b);//���͵�һ��32bit�Ҷ�����
RGBLED_DataDealWithAndSend(r, g, b);//���͵ڶ���32bit�Ҷ�����
}
//RGB�Ƴ�ʼ������
void RGBLED_SHOW(void)
{
// RGBLED_config();
RGBLED_Show(255,0,0);//R
Delay_ms(100);
RGBLED_Show(0,255,0);//G
Delay_ms(100);
RGBLED_Show(0,0,255);//B
Delay_ms(100);
RGBLED_Show(255,255,255);//W
Delay_ms(100);
RGBLED_Show(0,0,0);//�ر�RGB��
//while(1);
}
|