WS1625/CS1625 LED芯片的驱动

1.驱动按照规格书写就行,主要是电路问题,规格书感觉有问题,规格书给出的电路不适用。

注意事项:

  1. SDA和SCL一定要直接连到MCU,不要串电阻,也不要并电容;(我是一直点不了,看案列发现直连才意识到的,把串联电阻短路,把并联电容拆了就好了)。

2.如果你还是想加电阻电容,请测通后自己再加,再测试,

以下是驱动

WS1625Driver.h

复制代码
#ifndef __WS1625_DRIVER_H
#define __WS1625_DRIVER_H

typedef unsigned char BYTE;
typedef unsigned int WORD;

//*********************SDA*********************************************
#define	WS1625_SDA_SET    	_pb6=1
#define	WS1625_SDA_CLR    	_pb6=0

//*********************SCL*********************************************
#define	WS1625_SCL_SET    	_pb4=1
#define	WS1625_SCL_CLR    	_pb4=0

////////////////////////////////////////
//如何控制
//1.模式指令+显示模式指令
//2.地址命令+数据   n个
//3.模式指令+显示控制指令
///////////////////////////////////////
#define MODE_CMD 0X48//模式命令

//显示模式指令
//#define SCAN_TIME_0_5_T (0X00)
#define SCAN_TIME_1_0_T (0X10)
//#define SCAN_TIME_1_5_T (0X20)
//#define SCAN_TIME_2_0_T (0X30)
#define SCAN_TIME_CHOOSE SCAN_TIME_1_0_T
#define DSP_MODE_11_SEG_12	((SCAN_TIME_CHOOSE)|(0X00))
#define DSP_MODE_11_SEG_11	((SCAN_TIME_CHOOSE)|(0X01))
#define DSP_MODE_11_SEG_10	((SCAN_TIME_CHOOSE)|(0X02))
#define DSP_MODE_11_SEG_9	((SCAN_TIME_CHOOSE)|(0X03))
#define DSP_MODE_11_SEG_8	((SCAN_TIME_CHOOSE)|(0X04))
#define DSP_MODE_11_SEG_7	((SCAN_TIME_CHOOSE)|(0X05))
#define DSP_MODE_11_SEG_6	((SCAN_TIME_CHOOSE)|(0X06))
#define DSP_MODE_11_SEG_5	((SCAN_TIME_CHOOSE)|(0X07))
#define DSP_MODE_11_SEG_4	((SCAN_TIME_CHOOSE)|(0X08))
#define DSP_MODE_11_SEG_3	((SCAN_TIME_CHOOSE)|(0X09))
#define DSP_MODE_11_SEG_2	((SCAN_TIME_CHOOSE)|(0X0A))
#define DSP_MODE_11_SEG_1	((SCAN_TIME_CHOOSE)|(0X0B))

//地址命令
#define ADDR_CMD_START_ADDR 0XC0//地址0XC0~0XD7,一共24个

//显示模式指令
#define DSP_CONTROL_BRIGHTNESS_1	(0X90)
#define DSP_CONTROL_BRIGHTNESS_2	(0X91)
#define DSP_CONTROL_BRIGHTNESS_3	(0X92)
#define DSP_CONTROL_BRIGHTNESS_4	(0X93)
#define DSP_CONTROL_BRIGHTNESS_5	(0X94)
#define DSP_CONTROL_BRIGHTNESS_6	(0X95)
#define DSP_CONTROL_BRIGHTNESS_7	(0X96)
#define DSP_CONTROL_BRIGHTNESS_8	(0X97)
#define DSP_CONTROL_BRIGHTNESS_9	(0X98)
#define DSP_CONTROL_BRIGHTNESS_10	(0X99)
#define DSP_CONTROL_BRIGHTNESS_11	(0X9A)
#define DSP_CONTROL_BRIGHTNESS_12	(0X9B)
#define DSP_CONTROL_BRIGHTNESS_13	(0X9C)
#define DSP_CONTROL_BRIGHTNESS_14	(0X9D)
#define DSP_CONTROL_BRIGHTNESS_15	(0X9E)
#define DSP_CONTROL_BRIGHTNESS_16	(0X9F)
#define DSP_CONTROL_SLEEP			(0X88)
#define DSP_CONTROL_CLOSE			(0X80)

extern WORD D_Ws1625Buf[12];

extern void WS1625_DRIVER();
#endif

WS1625Driver.c

复制代码
#include "WS1625Driver.h"
WORD D_Ws1625Buf[12];

void WS1625_DELAY()//延迟
{
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
}

void WS1625_START()
{
	WS1625_SCL_SET;
	WS1625_SDA_SET;
	WS1625_DELAY();
	WS1625_SDA_CLR;
	WS1625_DELAY();
	WS1625_SCL_CLR;
	WS1625_DELAY();
}

void WS1625_STOP()
{
	WS1625_SCL_SET;
	WS1625_DELAY();
	WS1625_SDA_SET;
	WS1625_DELAY();
}

void WS1625_ACK()
{
	WS1625_SDA_CLR;
	WS1625_DELAY();
	WS1625_SCL_SET;
	WS1625_DELAY();
	WS1625_SCL_CLR;
	WS1625_DELAY();
}

void WS1625_SND(BYTE  cmd,BYTE dat)
{	
	BYTE i;
	WS1625_START();
	for(i=0;i<8;i++)
	{
		if(cmd&0X80)WS1625_SDA_SET;
		else WS1625_SDA_CLR;
		WS1625_DELAY();
		WS1625_SCL_SET;
		WS1625_DELAY();
		WS1625_SCL_CLR;
		WS1625_DELAY();
		cmd<<=1;
	}
	WS1625_ACK();
	for(i=0;i<8;i++)
	{
		if(dat&0X80)WS1625_SDA_SET;
		else WS1625_SDA_CLR;
		WS1625_DELAY();
		WS1625_SCL_SET;
		WS1625_DELAY();
		WS1625_SCL_CLR;
		WS1625_DELAY();
		dat <<= 1;
	}
	WS1625_ACK();
	WS1625_STOP();
}

void WS1625_DRIVER()
{
	BYTE i;
	WS1625_SND(MODE_CMD,DSP_MODE_11_SEG_12);//11段12位
	for(i=0;i<12;i++)
	{
		WS1625_SND(ADDR_CMD_START_ADDR+(2*i),D_Ws1625Buf[i]&0X00FF);
		WS1625_SND(ADDR_CMD_START_ADDR+(2*i)+1,D_Ws1625Buf[i]>>8);
	}
	WS1625_SND(MODE_CMD,DSP_CONTROL_BRIGHTNESS_16);//亮度选择,可以根据休眠标志自己选择亮度
	
}
相关推荐
爱学习的大牛1232 天前
应用层的文件句柄传递给 驱动层 完成文件写入
驱动·文件写入·应用层句柄
染指111012 天前
28.实现MDL驱动读写-Windows驱动
windows·驱动开发·驱动·mdl
云卓SKYDROID21 天前
无人机舵机驱动模块技术解析
无人机·驱动·知识科普·高科技·云卓科技
少年、潜行25 天前
F1C100/200S学习笔记(3)-- 裸机开发
linux·笔记·学习·驱动·裸机·f1c200s
才鲸嵌入式1 个月前
STM32 USB协议栈源码分析
stm32·单片机·嵌入式·驱动·usb·硬件·phy
染指11101 个月前
7.Windows驱动-驱动lrp通信
驱动·windows驱动
hszmoran2 个月前
电脑关机重启时显示rundll32 内存不能为read解决方法
电脑·nvidia·驱动
sheepwjl4 个月前
《嵌入式驱动(二):驱动开发基本概念》
arm开发·驱动开发·单片机·嵌入式硬件·imx6ull·驱动·裸机
肖爱Kun4 个月前
LINUX中USB驱动架构—URB请求块
linux·驱动