1 、概述
VK1640 是一款 2 线串口共阴极 8 段 16 位的 LED 驱动控制专用电路,内部集成有 MCU 数字接口、数据锁存器、LED 驱动等电路。本产品性能优良,质量可靠。兼容TM1640
其主要特点如下:
内置显示RAM
内置RC振荡
内置自动消隐电路
显示辉度软件可调
两线串行接口(CLK,DATA)
封装形式:SOP28/SSOP28(0.635mm)
应用领域:
LED显示面板场合,例如电磁炉显示、电饭煲显示、空调显示、电子秤等家电产品。
源程序如下:
- /**
- ******************************************************************************
- * @file vk1640_driver.h
- * @author kevin_guo
- * @version V1.0.0
- * @date 072-01-2019
- * @brief This file contains all files for vk1640_driver.
- ******************************************************************************
- * @attention
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "global.h"
- /* extern variables ----------------------------------------------------------*/
- //extern uint8_t ic_key;
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- uint8_t vk1640_write_buf[16];
- /* Private function prototypes -----------------------------------------------*/
- /* Private function ----------------------------------------------------------*/
- /*******************************************************************************
- * Function Name : cc_nopdelay
- * Description : 延时
- * Input : dur
- * Output : None
- * Return : None
- *******************************************************************************/
- void vk1640_nopdelay(uint32_t dur)
- {
- // uint32_t i;
- //
- // while(dur)
- // {
- // dur--;
- // i=1;
- // while(i--)
- // {
- // __nop();__nop();__nop();__nop();__nop();
- // }
- // }
- }
- /*******************************************************************************
- * Function Name : Set_testPara
- * Description : 在时钟的上升沿通过MCU向LED驱动IC写1个字节数据
- * Input : data8
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640Write1BytetoIC(uint8_t data8)
- {
- uint8_t i;
-
- for(i=0;i<8;i++)
- {
- VK1640_SLK_LOW; //先将“CLK”清零
- if((data8&0x01)!=0)
- {
- VK1640_DAT_HIGH;//需要传送的数据的低位为“1”,则把“DIO”置高
- }
- else
- {
- VK1640_DAT_LOW; //需要传送的数据的低位为“0”,则把“DIO”清零
- }
- vk1640_nopdelay(2);
- VK1640_SLK_HIGH; //送时钟的上升沿
- vk1640_nopdelay(2);
- data8=data8>>1; //准备送下一个BIT
-
- }//送完一个字节后退出循环
- }
- /*******************************************************************************
- * Function Name : VK1640_Start
- * Description :
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Start(void)
- {
- VK1640_DAT_HIGH;//通讯开始前通讯端口全部初始化为“1”
- VK1640_SLK_HIGH;
- vk1640_nopdelay(2);
- VK1640_DAT_LOW;
- VK1640_SLK_LOW;
- vk1640_nopdelay(1);
- }
- /*******************************************************************************
- * Function Name : VK1640_Stop
- * Description :
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Stop(void)
- {
- VK1640_SLK_LOW;
- vk1640_nopdelay(1);
- VK1640_DAT_LOW;
- VK1640_SLK_HIGH;
- vk1640_nopdelay(2);
- VK1640_DAT_HIGH;
- vk1640_nopdelay(1);
- }
- /*******************************************************************************
- * Function Name : Disp_AutoAdd1Addr
- * Description : 采用地址自动加一方式传输地址和数据
- * Input : cmdaddr 写入的地址
- * : databuf 数据缓存
- * : num 写入的数据个数
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Disp_AutoAdd1Addr(uint8_t addr,uint8_t* databuf, uint8_t num)
- {
- uint8_t i;//i——控制本次需要传多少个字节显示数据
-
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_WRDTA_AUTOADD1ADDR);//传数据设置命令,设置采用地址自动加1方式写显示数据,
- VK1640_Stop();
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//传起始地址
- //地址命令传完后,“STB”保持为“0”继续传需要显示的数据
- for(i=0;i<num;i++)
- {
- VK1640Write1BytetoIC(*databuf++);//在连续传显示的数据过程中,“STB”一直保持为”0“
- }
- VK1640_Stop();
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_DISP_ON|VK1640_PDUTY_14_16);//传显示控制命令
- VK1640_Stop();
- }
- /*******************************************************************************
- * Function Name : VK1640_Disp_FixedAddr
- * Description : 采用地址固定方式传输地址和数据
- * Input : disa
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Disp_FixedAddr(uint8_t addr, uint8_t data8)
- {
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_WRDTA_FIXEDADDR);//传数据设置命令,设置采用固定地址写显示数据,
- VK1640_Stop();
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//传显示数据对应的地址
- VK1640Write1BytetoIC(data8);//传1BYTE显示数据
- VK1640_Stop();
- VK1640_Start();
- VK1640Write1BytetoIC(VK1640_DISP_ON|VK1640_PDUTY_12_16);//传显示控制命令
- VK1640_Stop();
- }
-
- /*******************************************************************************
- * Function Name : Vk1640_Init
- * Description : 16240初始化
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Init(void)
- {
- GPIO_SetMode(VK1640_CLK_PORT, VK1640_CLK_PIN, GPIO_MODE_OUTPUT);
- GPIO_SetMode(VK1640_DIO_PORT, VK1640_DIO_PIN, GPIO_MODE_OUTPUT);
-
- VK1640_DAT_HIGH;
- VK1640_SLK_HIGH;
- }
- /*******************************************************************************
- * Function Name : VK1640_Main
- * Description : 1640测试程序
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- void VK1640_Main(void)
- {
- uint8_t i,j;
-
- VK1640_Init();
-
- for(i=0;i<16;i++)
- {
- vk1640_write_buf[i]=0x00;
- }
- VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16); //16个数码管全灭
- DelaymS(1000);
- while(1)
- {
- for(i=0;i<16;i++)
- {
- vk1640_write_buf[i]=0xff;
- }
- VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16); //16个数码管全亮
- DelaymS(1000);
- for(i=0;i<16;i++)
- {
- vk1640_write_buf[i]=0x00;
- }
- VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16); //全灭
- DelaymS(1000);
-
- for(j=0;j<16;j++)
- {
- for(i=0;i<16;i++)
- {
- vk1640_write_buf[i]=0x00;
- }
- vk1640_write_buf[j]=0xff;
- VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16); //全亮
- DelaymS(500);
- }
- for(j=0;j<8;j++)
- {
- for(i=0;i<16;i++)
- {
- vk1640_write_buf[i]=(1<<j);
- }
- VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16); //全亮
- DelaymS(1000);
- }
-
- __nop();
- }
- }
- /************************END OF FILE****/
复制代码
以上2个文件下载:
vk1640_driver.rar
(2.51 KB, 下载次数: 40)
|