找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1602|回复: 1
收起左侧

vk1640兼容TM1640的参考驱动程序

[复制链接]
ID:380108 发表于 2021-11-13 14:24 | 显示全部楼层 |阅读模式
1 、概述
VK1640 是一款 2 线串口共阴极 8 段 16 位的 LED 驱动控制专用电路,内部集成有 MCU 数字接口、数据锁存器、LED 驱动等电路。本产品性能优良,质量可靠。兼容TM1640
其主要特点如下:
内置显示RAM
内置RC振荡
内置自动消隐电路
显示辉度软件可调
两线串行接口(CLK,DATA)
封装形式:SOP28/SSOP28(0.635mm)
应用领域:
LED显示面板场合,例如电磁炉显示、电饭煲显示、空调显示、电子秤等家电产品。

源程序如下:
  1. /**
  2.   ******************************************************************************
  3.   * @file    vk1640_driver.h
  4.   * @author  kevin_guo
  5.   * @version V1.0.0
  6.   * @date    072-01-2019
  7.   * @brief   This file contains all files for vk1640_driver.
  8.   ******************************************************************************
  9.   * @attention
  10.   ******************************************************************************
  11.   */
  12. /* Includes ------------------------------------------------------------------*/
  13. #include "global.h"

  14. /* extern variables ----------------------------------------------------------*/
  15. //extern uint8_t ic_key;
  16. /* Private typedef -----------------------------------------------------------*/
  17. /* Private define ------------------------------------------------------------*/
  18. /* Private macro -------------------------------------------------------------*/
  19. /* Private variables ---------------------------------------------------------*/
  20. uint8_t vk1640_write_buf[16];
  21. /* Private function prototypes -----------------------------------------------*/
  22. /* Private function ----------------------------------------------------------*/
  23. /*******************************************************************************
  24. * Function Name  : cc_nopdelay
  25. * Description    : 延时
  26. * Input          : dur
  27. * Output         : None
  28. * Return         : None
  29. *******************************************************************************/
  30. void vk1640_nopdelay(uint32_t dur)
  31. {
  32. //        uint32_t        i;
  33. //       
  34. //        while(dur)
  35. //        {
  36. //                dur--;
  37. //                i=1;
  38. //                while(i--)
  39. //                {       
  40. //                        __nop();__nop();__nop();__nop();__nop();
  41. //                }
  42. //        }
  43. }
  44. /*******************************************************************************
  45. * Function Name  : Set_testPara
  46. * Description    : 在时钟的上升沿通过MCU向LED驱动IC写1个字节数据
  47. * Input          : data8
  48. * Output         : None
  49. * Return         : None
  50. *******************************************************************************/
  51. void VK1640Write1BytetoIC(uint8_t data8)
  52. {
  53.         uint8_t i;
  54.        
  55.         for(i=0;i<8;i++)
  56.         {
  57.                 VK1640_SLK_LOW;                //先将“CLK”清零
  58.                 if((data8&0x01)!=0)
  59.                 {
  60.                         VK1640_DAT_HIGH;//需要传送的数据的低位为“1”,则把“DIO”置高
  61.                 }
  62.                 else
  63.                 {
  64.                         VK1640_DAT_LOW;        //需要传送的数据的低位为“0”,则把“DIO”清零
  65.                 }
  66.                 vk1640_nopdelay(2);
  67.                 VK1640_SLK_HIGH;        //送时钟的上升沿
  68.                 vk1640_nopdelay(2);
  69.                 data8=data8>>1;                //准备送下一个BIT
  70.        
  71.         }//送完一个字节后退出循环
  72. }

  73. /*******************************************************************************
  74. * Function Name  : VK1640_Start
  75. * Description    :
  76. * Input          : None
  77. * Output         : None
  78. * Return         : None
  79. *******************************************************************************/
  80. void VK1640_Start(void)
  81. {
  82.         VK1640_DAT_HIGH;//通讯开始前通讯端口全部初始化为“1”       
  83.         VK1640_SLK_HIGH;
  84.         vk1640_nopdelay(2);
  85.         VK1640_DAT_LOW;
  86.         VK1640_SLK_LOW;
  87.         vk1640_nopdelay(1);
  88. }
  89. /*******************************************************************************
  90. * Function Name  : VK1640_Stop
  91. * Description    :
  92. * Input          : None
  93. * Output         : None
  94. * Return         : None
  95. *******************************************************************************/
  96. void VK1640_Stop(void)
  97. {
  98.         VK1640_SLK_LOW;
  99.         vk1640_nopdelay(1);
  100.         VK1640_DAT_LOW;
  101.         VK1640_SLK_HIGH;
  102.         vk1640_nopdelay(2);
  103.         VK1640_DAT_HIGH;
  104.         vk1640_nopdelay(1);
  105. }
  106. /*******************************************************************************
  107. * Function Name  : Disp_AutoAdd1Addr
  108. * Description    : 采用地址自动加一方式传输地址和数据
  109. * Input          : cmdaddr   写入的地址
  110. *                                                                  : databuf   数据缓存
  111. *                : num       写入的数据个数
  112. * Output         : None
  113. * Return         : None
  114. *******************************************************************************/
  115. void VK1640_Disp_AutoAdd1Addr(uint8_t addr,uint8_t* databuf, uint8_t num)
  116. {
  117.         uint8_t i;//i——控制本次需要传多少个字节显示数据       
  118.        
  119.         VK1640_Start();
  120.         VK1640Write1BytetoIC(VK1640_WRDTA_AUTOADD1ADDR);//传数据设置命令,设置采用地址自动加1方式写显示数据,
  121.         VK1640_Stop();
  122.         VK1640_Start();       
  123.         VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//传起始地址
  124.         //地址命令传完后,“STB”保持为“0”继续传需要显示的数据
  125.         for(i=0;i<num;i++)
  126.         {
  127.                 VK1640Write1BytetoIC(*databuf++);//在连续传显示的数据过程中,“STB”一直保持为”0“
  128.         }
  129.         VK1640_Stop();
  130.         VK1640_Start();       
  131.         VK1640Write1BytetoIC(VK1640_DISP_ON|VK1640_PDUTY_14_16);//传显示控制命令
  132.         VK1640_Stop();
  133. }

  134. /*******************************************************************************
  135. * Function Name  : VK1640_Disp_FixedAddr
  136. * Description    : 采用地址固定方式传输地址和数据
  137. * Input          : disa
  138. * Output         : None
  139. * Return         : None
  140. *******************************************************************************/
  141. void VK1640_Disp_FixedAddr(uint8_t addr, uint8_t data8)
  142. {
  143.         VK1640_Start();
  144.         VK1640Write1BytetoIC(VK1640_WRDTA_FIXEDADDR);//传数据设置命令,设置采用固定地址写显示数据,
  145.         VK1640_Stop();
  146.         VK1640_Start();       
  147.         VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//传显示数据对应的地址
  148.         VK1640Write1BytetoIC(data8);//传1BYTE显示数据
  149.         VK1640_Stop();
  150.         VK1640_Start();       
  151.         VK1640Write1BytetoIC(VK1640_DISP_ON|VK1640_PDUTY_12_16);//传显示控制命令
  152.         VK1640_Stop();
  153. }
  154.        
  155. /*******************************************************************************
  156. * Function Name  : Vk1640_Init
  157. * Description    : 16240初始化
  158. * Input          : None
  159. * Output         : None
  160. * Return         : None
  161. *******************************************************************************/
  162. void VK1640_Init(void)   
  163. {   
  164.         GPIO_SetMode(VK1640_CLK_PORT, VK1640_CLK_PIN, GPIO_MODE_OUTPUT);
  165.         GPIO_SetMode(VK1640_DIO_PORT, VK1640_DIO_PIN, GPIO_MODE_OUTPUT);
  166.        
  167.         VK1640_DAT_HIGH;               
  168.         VK1640_SLK_HIGH;
  169. }  

  170. /*******************************************************************************
  171. * Function Name  : VK1640_Main
  172. * Description    : 1640测试程序
  173. * Input          : None
  174. * Output         : None
  175. * Return         : None
  176. *******************************************************************************/
  177. void VK1640_Main(void)
  178. {   
  179.         uint8_t i,j;
  180.        
  181.         VK1640_Init();
  182.          
  183.         for(i=0;i<16;i++)
  184.         {
  185.                 vk1640_write_buf[i]=0x00;
  186.         }
  187.         VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16);   //16个数码管全灭
  188.         DelaymS(1000);
  189.         while(1)
  190.         {
  191.                 for(i=0;i<16;i++)
  192.                 {
  193.                         vk1640_write_buf[i]=0xff;
  194.                 }
  195.                 VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16);   //16个数码管全亮
  196.                 DelaymS(1000);
  197.                 for(i=0;i<16;i++)
  198.                 {
  199.                         vk1640_write_buf[i]=0x00;
  200.                 }
  201.                 VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16);   //全灭
  202.                 DelaymS(1000);
  203.                
  204.                 for(j=0;j<16;j++)
  205.                 {
  206.                         for(i=0;i<16;i++)
  207.                         {
  208.                                 vk1640_write_buf[i]=0x00;
  209.                         }
  210.                         vk1640_write_buf[j]=0xff;
  211.                         VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16);   //全亮
  212.                         DelaymS(500);
  213.                 }
  214.                 for(j=0;j<8;j++)
  215.                 {
  216.                         for(i=0;i<16;i++)
  217.                         {
  218.                                 vk1640_write_buf[i]=(1<<j);
  219.                         }
  220.                         VK1640_Disp_AutoAdd1Addr(0,vk1640_write_buf,16);   //全亮
  221.                         DelaymS(1000);
  222.                 }
  223.                
  224.                 __nop();
  225.         }
  226. }   
  227. /************************END OF FILE****/
复制代码
51hei.png
以上2个文件下载: vk1640_driver.rar (2.51 KB, 下载次数: 37)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:37023 发表于 2022-4-26 00:02 | 显示全部楼层
global.h"
这个里面是啥
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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