找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2249|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

vk1640兼容TM1640的參考驅(qū)動(dòng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:380108 發(fā)表于 2021-11-13 14:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1 、概述
VK1640 是一款 2 線串口共陰極 8 段 16 位的 LED 驅(qū)動(dòng)控制專用電路,內(nèi)部集成有 MCU 數(shù)字接口、數(shù)據(jù)鎖存器、LED 驅(qū)動(dòng)等電路。本產(chǎn)品性能優(yōu)良,質(zhì)量可靠。兼容TM1640
其主要特點(diǎn)如下:
內(nèi)置顯示RAM
內(nèi)置RC振蕩
內(nèi)置自動(dòng)消隱電路
顯示輝度軟件可調(diào)
兩線串行接口(CLK,DATA)
封裝形式:SOP28/SSOP28(0.635mm)
應(yīng)用領(lǐng)域:
LED顯示面板場(chǎng)合,例如電磁爐顯示、電飯煲顯示、空調(diào)顯示、電子秤等家電產(chǎn)品。

源程序如下:
  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    : 延時(shí)
  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    : 在時(shí)鐘的上升沿通過(guò)MCU向LED驅(qū)動(dòng)IC寫1個(gè)字節(jié)數(shù)據(jù)
  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;//需要傳送的數(shù)據(jù)的低位為“1”,則把“DIO”置高
  61.                 }
  62.                 else
  63.                 {
  64.                         VK1640_DAT_LOW;        //需要傳送的數(shù)據(jù)的低位為“0”,則把“DIO”清零
  65.                 }
  66.                 vk1640_nopdelay(2);
  67.                 VK1640_SLK_HIGH;        //送時(shí)鐘的上升沿
  68.                 vk1640_nopdelay(2);
  69.                 data8=data8>>1;                //準(zhǔn)備送下一個(gè)BIT
  70.        
  71.         }//送完一個(gè)字節(jié)后退出循環(huán)
  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    : 采用地址自動(dòng)加一方式傳輸?shù)刂泛蛿?shù)據(jù)
  109. * Input          : cmdaddr   寫入的地址
  110. *                                                                  : databuf   數(shù)據(jù)緩存
  111. *                : num       寫入的數(shù)據(jù)個(gè)數(shù)
  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——控制本次需要傳多少個(gè)字節(jié)顯示數(shù)據(jù)       
  118.        
  119.         VK1640_Start();
  120.         VK1640Write1BytetoIC(VK1640_WRDTA_AUTOADD1ADDR);//傳數(shù)據(jù)設(shè)置命令,設(shè)置采用地址自動(dòng)加1方式寫顯示數(shù)據(jù),
  121.         VK1640_Stop();
  122.         VK1640_Start();       
  123.         VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//傳起始地址
  124.         //地址命令傳完后,“STB”保持為“0”繼續(xù)傳需要顯示的數(shù)據(jù)
  125.         for(i=0;i<num;i++)
  126.         {
  127.                 VK1640Write1BytetoIC(*databuf++);//在連續(xù)傳顯示的數(shù)據(jù)過(guò)程中,“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    : 采用地址固定方式傳輸?shù)刂泛蛿?shù)據(jù)
  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);//傳數(shù)據(jù)設(shè)置命令,設(shè)置采用固定地址寫顯示數(shù)據(jù),
  145.         VK1640_Stop();
  146.         VK1640_Start();       
  147.         VK1640Write1BytetoIC(VK1640_STARTADDR+addr);//傳顯示數(shù)據(jù)對(duì)應(yīng)的地址
  148.         VK1640Write1BytetoIC(data8);//傳1BYTE顯示數(shù)據(jù)
  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測(cè)試程序
  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個(gè)數(shù)碼管全滅
  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個(gè)數(shù)碼管全亮
  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****/
復(fù)制代碼

以上2個(gè)文件下載: vk1640_driver.rar (2.51 KB, 下載次數(shù): 40)

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:37023 發(fā)表于 2022-4-26 00:02 | 只看該作者
global.h"
這個(gè)里面是啥
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表