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)
2021-11-13 14:22 上傳
點擊文件名下載附件
|