找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3704|回复: 2
打印 上一主题 下一主题
收起左侧

VK1056技术手册与驱动程序下载

[复制链接]
跳转到指定楼层
楼主
VK1056驱动程序,在STM32F103下可以运行,51单片机可以自己小改,后面附上封装和数据手册


单片机源程序如下:
  1. #include "vk1056b.h"
  2. #include "delay.h"
  3.   

  4. const u8 vk1056B_segtab[9]={14,15,16,17,18,19,20,21,22};
  5. u8 vk1056B_addrbit=6;//驱动ic的ram地址线数A5-A0,
  6. u8 vk1056B_segi,vk1056B_comi;
  7. u8 vk1056B_dispram[14];//显示RAM buffer只使用低4位,bit0->com0,bit1->com1,bit2->com2,bit3->com3
  8. u8 vk1056B_myram[4]={0x00,0x00,0x00,0x00};



  9. /**
  10.   * @brief  配置Vk1056B通信线GPIO.
  11.   * @param  None
  12.   * @retval None
  13.   */
  14. void Vk1056B_Lowlevel_Init(void)
  15. {
  16.         GPIO_InitTypeDef  GPIO_InitStructure;
  17.        
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);

  19.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;//通讯线电平不同,可设为开漏输出,1056B有内部上拉电?                                                                                                       
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //通信线电平一样,可设为推挽输出?
  21.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  23.         GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;       
  24.         GPIO_Init(GPIOA, &GPIO_InitStructure);  
  25. }
  26. void Vk1056B_Init(void)
  27. {       
  28.         Vk1056B_Lowlevel_Init();
  29.         //基本配置
  30.         WriteCommandVk1056B(OSC_OFF);                //00
  31.         WriteCommandVk1056B(OSC_ON);                //01
  32.         WriteCommandVk1056B(DISP_ON);                //03
  33.        
  34.         WriteCommandVk1056B(0x04);
  35.         WriteCommandVk1056B(0x05);
  36.         WriteCommandVk1056B(0x08);

  37.        
  38.         WriteCommandVk1056B(RC32K);     //18
  39.         WriteCommandVk1056B(COM_1_3__4);//29
  40.        
  41.         WriteCommandVk1056B(0x80);
  42.        
  43. //        WriteCommandVk1056B(COM_1_3__3);vk1056B_maxcom=3;        //1/3bias 3com
  44. //        WriteCommandVk1056B(COM_1_3__2);vk1056B_maxcom=2;        //1/3bias 2com
  45. //        WriteCommandVk1056B(COM_1_2__4);vk1056B_maxcom=4;        //1/2bias 4com
  46. //        WriteCommandVk1056B(COM_1_2__3);vk1056B_maxcom=3;        //1/2bias 3com
  47. //        WriteCommandVk1056B(COM_1_2__2);vk1056B_maxcom=2;        //1/2bias 2com
  48.         //上电默认配置(以下未用功能关闭降低功耗)
  49. //        WriteCommandVk1056B(TIMER_DIS);
  50. //        WriteCommandVk1056B(WDT_DIS);
  51. //        WriteCommandVk1056B(BUZZ_OFF);
  52. //        WriteCommandVk1056B(IRQ_DIS);
  53. }
  54. /**
  55.   * @brief  Vk1056B clk
  56.   * @param  None
  57.   * @retval None
  58.   */
  59. void WriteClockVk1056B(void)
  60. {
  61.         WR=0;
  62.         delay_us(10);
  63.         WR=1;
  64.         delay_us(10);
  65. }
  66. /**
  67.   * @brief  Write Vk1056B Command
  68.   * @param  FunctonCode->功能/命令码
  69.   * @retval None
  70.   */
  71. void WriteCommandVk1056B(unsigned char FunctonCode) //写命令
  72. {
  73.         u8 Shift = 0x80;
  74.         u8 i;
  75.          
  76.         CS=0;
  77.         delay_us(5);
  78.        
  79.         DATA=1;
  80.         WriteClockVk1056B();
  81.         DATA=0;
  82.         WriteClockVk1056B();
  83.         DATA=0;
  84.         WriteClockVk1056B();

  85.         for(i = 0; i < 8; i++)
  86.         {
  87.          if(Shift & FunctonCode)         //与1000 0000
  88.                 DATA=1;         
  89.          else           
  90.                 DATA=0;
  91.          WriteClockVk1056B();
  92.          Shift = Shift >> 1;
  93.         }
  94.         DATA=0;
  95.         WriteClockVk1056B();        //发送一个 0 16xx中最后一位 X
  96.         CS=1;
  97.         delay_us(5);
  98.         DATA=1;
  99. }
  100. /**
  101.   * @brief  Write 1 data to Vk1056B
  102.   * @param  Addr->写入ram的地址
  103.   * @param  Databuf->写入ram的数据
  104.   * @retval None
  105.   */
  106. void Write1DataVk1056B(unsigned char Addr,unsigned char Dat)
  107. {
  108.         unsigned char i;                         //写数据
  109.         unsigned char Shift;
  110.        
  111.         Shift = 0x20; //屏蔽高3位 只用5位  0010 0000
  112.        
  113.         CS=0;
  114.         delay_us(5);
  115.         DATA=1;
  116.         WriteClockVk1056B();  //101  
  117.         DATA=0;
  118.         WriteClockVk1056B();
  119.         DATA=1;
  120.         WriteClockVk1056B();

  121.         for( i = 0; i < vk1056B_addrbit; i++) //6
  122.         {                    
  123.                 if (Addr & Shift) //与0010 0000
  124.                         DATA=1;
  125.                 else  
  126.                 DATA=0;
  127.                 WriteClockVk1056B();               
  128.                 Shift = Shift >> 1;
  129.         }
  130.   Shift = 0x01;
  131.   for (i = 0; i < 4; i++)   //与0000 0001
  132.         {

  133.                 if( Dat & Shift)
  134.                         DATA=1;
  135.            else  
  136.                 DATA=0;
  137.                 WriteClockVk1056B();
  138.                 Shift = Shift << 1;
  139.         }   
  140.         CS=1;
  141.         delay_us(5);
  142.         DATA=1;
  143. }

  144. /**
  145.   * @brief  Write n data to Vk1056B
  146.   * @param  Addr->写入ram的起始地址
  147.   * @param  Databuf->写入ram的数据buffer
  148.   * @param  Cnt->写入ram的数据个数
  149.   * @retval None                             连续写模式
  150.   */
  151. void WritenDataVk1056B(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt)
  152. {
  153.         unsigned char i,j;
  154.         unsigned char Shift;
  155.         unsigned char dataval;
  156.        
  157.         CS=0;
  158.         delay_us(5);

  159.         DATA=1;       
  160.         WriteClockVk1056B();  //101
  161.         DATA=0;
  162.         WriteClockVk1056B();  
  163.         DATA=1;
  164.         WriteClockVk1056B();

  165.         Shift = 0x20;    //0010 0000
  166.         for( i = 0; i < 6; i++)
  167.         {                    
  168.                 if (Addr & Shift)
  169.                         DATA=1;               
  170.                 else  
  171.                         DATA=0;
  172.                 WriteClockVk1056B();               
  173.                 Shift = Shift >> 1;
  174.         }
  175.         for (j = 0; j < Cnt; j++)
  176.         {
  177.                 Shift = 0x01;
  178.                 dataval=*Databuf++;
  179.                 for (i = 0; i < 4; i++)
  180.                 {
  181.                         if( dataval & Shift)
  182.                                 DATA=1;                       
  183.                         else  
  184.                                 DATA=0;
  185.                         WriteClockVk1056B();
  186.                         Shift = Shift << 1;
  187.                 }   
  188.         }
  189.         CS=1;       
  190.         delay_us(5);
  191.         DATA=1;
  192. }
  193. /**
  194.   * @brief  lcd全显或全灭
  195.   * @param  state=1->lcd全亮
  196.   * @param  state=0->lcd全灭
  197.   * @retval None
  198.   */
  199. void Vk1056B_DisAll(unsigned char state)
  200. {
  201.         unsigned char i;
  202.        
  203.         for(i=0;i<14;i++)
  204.         {
  205.                 if(state==1)
  206.                 {
  207.                         vk1056B_dispram[i]=0x0f;
  208.                 }
  209.                 else
  210.                 {
  211.                         vk1056B_dispram[i]=0x00;
  212.                 }
  213.         }
  214.         WritenDataVk1056B(vk1056B_segtab[0],vk1056B_dispram,14);
  215. }


  216. //以下是根据段码屏厂家给出的表格做的,不同厂家资料程序不同,此处可以跳过不看了
  217. //A显示
  218. void Vk1056B_Display_A(u8 i)
  219. {
  220.         switch(i)
  221.         {
  222.                 case 0:
  223.                         Vk1056B_On(0,1);
  224.                         Vk1056B_On(0,2);
  225.                         Vk1056B_On(0,4);
  226.                         Vk1056B_On(0,8);

  227.                         Vk1056B_On(1,2);
  228.                         Vk1056B_OFF(1,4);
  229.                         Vk1056B_On(1,8);                               
  230.                         break;
  231.                 case 1:
  232.                         Vk1056B_OFF(0,1);
  233.                         Vk1056B_OFF(0,2);
  234.                         Vk1056B_OFF(0,4);
  235.                         Vk1056B_OFF(0,8);
  236.          
  237.                         Vk1056B_On(1,2);
  238.                         Vk1056B_OFF(1,4);
  239.                         Vk1056B_On(1,8);
  240.                         break;
  241.                 case 2:
  242.                         Vk1056B_On(0,1);
  243.                         Vk1056B_On(0,2);
  244.                         Vk1056B_OFF(0,4);
  245.                         Vk1056B_On(0,8);
  246.                
  247.                         Vk1056B_OFF(1,2);
  248.                         Vk1056B_On(1,4);
  249.                         Vk1056B_On(1,8);
  250.                         break;
  251.                 case 3:
  252.                         Vk1056B_On(0,1);
  253.                         Vk1056B_OFF(0,2);
  254.                         Vk1056B_OFF(0,4);
  255. ……………………

  256. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
VK1056驱动.zip (3.66 KB, 下载次数: 48)
VK1056技术手册.zip (1.88 MB, 下载次数: 35)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:387856 发表于 2021-5-5 20:39 | 只看该作者
看官方的例程没看懂,看了这个就看懂了。就是那个连续写那个函数看不明白,官方的说明太含糊了。直接说连续发送数据不就得了,说的那么抽象。这个博主的一看就明白,点赞
回复

使用道具 举报

板凳
ID:1041650 发表于 2022-8-8 17:59 | 只看该作者
一看就明白,点赞
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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