搜索
bottom↓
回复: 2

NCP5623驱动RGB LED

[复制链接]

出0入0汤圆

发表于 2013-8-13 18:28:05 | 显示全部楼层 |阅读模式
请问有谁做过NCP5623驱动RGB LED的吗?
我偷懒没有写单片机的程序,直接用软件驱动NCP5623,可以控制灯亮,灭;但是怎么也只有1种颜色的灯亮,不知道是怎么回事

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-8-14 11:59:28 | 显示全部楼层
请问谁知道这个时序是怎么样的吗?我用读取24C02的程序,读取,没有如何反应啊?器件地址是0x70,

出0入0汤圆

 楼主| 发表于 2013-8-18 17:17:50 | 显示全部楼层
IIC的程序搞的我很晕,一连试了好几款IIC的芯片,虽然搞出来了,不过理解的还是不够好。不同的IC和不同的编译环境下,代码互换老是出问题
现在上传我的NCP5623驱动RGB LED的程序,ICCAVR——M64
/************************************************
文件:iic.h
用途:延时函数头文件
注意:
************************************************/
#ifndef __IIC_h
#define __IIC_h
#include <macros.h>
#include "delay.h"
//I2C 状态定义
//MT 主方式传输 MR 主方式接受
#define START 0x08
#define RE_START 0x10
#define MT_SLA_ACK 0x18
#define MT_SLA_NOACK 0x20
#define MT_DATA_ACK 0x28
#define MT_DATA_NOACK 0x30
#define MR_SLA_ACK 0x40
#define MR_SLA_NOACK 0x48
#define MR_DATA_ACK 0x50
#define MR_DATA_NOACK 0x58
#define RD_DEVICE_ADDR 0xA1 //前4位器件固定,后三位看连线,最后1位是读写指令位
#define WD_DEVICE_ADDR 0xA0
//常用TWI操作(主模式写和读)
#define Start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)) //启动I2C
#define Stop() (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)) //停止I2C
#define Wait() {while(!(TWCR&(1<<TWINT)));} //等待中断发生
#define TestAck() (TWSR&0xf8) //观察返回状态
#define SetAck (TWCR|=(1<<TWEA)) //做出ACK应答
#define SetNoAck (TWCR&=~(1<<TWEA)) //做出Not Ack应答
#define Twi() (TWCR=(1<<TWINT)|(1<<TWEN)) //启动I2C
#define Write8Bit(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} //写数据到TWDR
unsigned char I2C_Write(unsigned char Wdata,unsigned char RegAddress);
unsigned char I2C_Read(unsigned RegAddress);
/*********************************************
I2C总线写一个字节
返回0:写成功
返回1:写失败
**********************************************/
unsigned char I2C_Write(unsigned char Wdata,unsigned char RegAddress)
{
Start(); //I2C启动
Wait();
if(TestAck()!=START)
return 1; //ACK

Write8Bit(WD_DEVICE_ADDR); //写I2C从器件地址和写方式
Wait();
if(TestAck()!=MT_SLA_ACK)
return 1; //ACK

Write8Bit(RegAddress); //写器件相应寄存器地址
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1; //ACK

Write8Bit(Wdata); //写数据到器件相应寄存器
Wait();
if(TestAck()!=MT_DATA_ACK)
return 1; //ACK

Stop(); //I2C停止
delay_nms(10); //延时
return 0;
}
/*********************************************
I2C总线读一个字节
返回0:读成功
返回1:读失败
**********************************************/
unsigned char I2C_Read(unsigned RegAddress)
{
unsigned char temp;
Start();//I2C启动
Wait();
if (TestAck()!=START)
return 1; //ACK

Write8Bit(WD_DEVICE_ADDR); //写I2C从器件地址和写方式
Wait();
if (TestAck()!=MT_SLA_ACK)
return 1; //ACK

Write8Bit(RegAddress); //写器件相应寄存器地址
Wait();
if (TestAck()!=MT_DATA_ACK)
return 1;

Start(); //I2C重新启动
Wait();
if (TestAck()!=RE_START)
return 1;

Write8Bit(RD_DEVICE_ADDR); //写I2C从器件地址和读方式
Wait();
if(TestAck()!=MR_SLA_ACK)
return 1; //ACK

Twi(); //启动主I2C读方式
Wait();
if(TestAck()!=MR_DATA_NOACK)
return 1; //ACK

temp=TWDR;//读取I2C接收数据
Stop();//I2C停止
return temp;
}
/*********************************************
I2C总线写RGB_LED
返回0:读成功
返回1:读失败
**********************************************/
unsigned char RGB_LED_writebyte(unsigned char data)
{
unsigned char temp;
Start();//I2C启动
Wait();
if (TestAck()!=START)
return 1; //ACK

Write8Bit(0x70); //写I2C从器件地址和写方式
Wait();
if (TestAck()!=MT_SLA_ACK)
return 1; //ACK

Write8Bit(data); //写器件相应寄存器地址
Wait();
if (TestAck()!=MT_DATA_ACK)
return 1;

temp=TWDR;//读取I2C接收数据
Stop();//I2C停止
return temp;
}
/*以上是IIC.h头文件部分,需要对照技术文档好好研究*/
#endif

/***************************************************************************/
/*串口1测试程序                                          */
/*目标器件:ATmega64                                  */
/*晶振: 7372800HZ                                       */
/*选用的波特率:9600(也可以另外设定),改了波特率后需要将电源拔了再插上方可使用*/
/*编译环境:ICCAVR 7.22                                        */
/*E-Mail:                                             */
/*时间:                                                     */
/***************************************************************************/
/*********************************包含头文件********************************/
#include<iom64v.h>
#include<macros.h>
#include "stdio.h"

#include "delay.h"
#include "com.h"
#include "iic.h"
#include "timer.h"
#include "eeprom.h"
//#include "keyscan.h"
/***********************************宏定义**********************************/
//#pragma interrupt_handler uart1_rx_isr:31


#define   uchar unsigned char
#define   uint unsigned int

#define     KEYPIN4               (PINE&(1<<3))
#define     KEYPIN5               (PINE&(1<<4))
#define     KEYPIN6               (PINE&(1<<5))
#define     KEYPIN7               (PINE&(1<<6))  
#define     KEYPIN8               (PINE&(1<<7))
/****************************************************************************
函数功能:IO口定义
入口参数:
出口参数:
****************************************************************************/
#define LED1CLR                PORTC &= 0XFE;      //低电平
#define LED1SET                PORTC |= 0X01;      //高电平
#define LED2CLR                PORTC &= 0XFD;
#define LED2SET                PORTC |= 0X02;
#define LED3CLR                PORTC &= 0XFB;
#define LED3SET                PORTC |= 0X04;
#define LED4CLR                PORTC &= 0XF7;
#define LED4SET                PORTC |= 0X08;
#define LED5CLR                PORTC &= 0XEF;
#define LED5SET                PORTC |= 0X10;
#define LED6CLR                PORTC &= 0XDF;
#define LED6SET                PORTC |= 0x20;
#define LED7CLR                PORTC &= 0XBF;
#define LED7SET                PORTC |= 0X40;
#define LED8CLR                PORTC &= 0X7F;
#define        LED8SET                PORTC |= 0X80;
#define        LED1                PORTC=(PORTC&0xfe)|((~PORTC)&0x1);
#define        LED2                PORTC=(PORTC&0xfd)|((~PORTC)&0x2);
#define        LED3                PORTC=(PORTC&0xfb)|((~PORTC)&0x4);
#define        LED4                PORTC=(PORTC&0xf7)|((~PORTC)&0x8);
#define        LED5                PORTC=(PORTC&0xef)|((~PORTC)&0x10);
#define        LED6                PORTC=(PORTC&0xdf)|((~PORTC)&0x20);
#define        LED7                PORTC=(PORTC&0xbf)|((~PORTC)&0x40);
#define        LED8                PORTC=(PORTC&0x7f)|((~PORTC)&0x80);

/****************************************************************************
函数功能:IO初始化
入口参数:
出口参数:
****************************************************************************/
void port_init(void)
{
        PORTA = 0x00;
        DDRA  = 0x00;
        PORTB = 0x00;
        DDRB  = 0x00;
        PORTC = 0x00; //m103 output only
        DDRC  = 0xFF;
        PORTD = 0x06;
        DDRD  = 0x0a;
        PORTE = 0xf8;
        DDRE  = 0x07;
        PORTF = 0x00;
        DDRF  = 0x00;
        PORTG = 0x00;
        DDRG  = 0x00;
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main(void)
{
        unsigned char i;
        CLI(); //disable all interrupts
        port_init();
        xflag = 0;
        delay_nms(100);
        SEI(); //re-enable interrupts
        while(1)
        {
                //delay_nms(100);
                for(i=0x9f;i>0x3f;i--)
                {
                         RGB_LED_writebyte(i);
                         delay_nms(5);
                         //LED1;
                 }
        }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 16:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表