VK1056技术手册与驱动程序源码

[复制链接]
查看79 | 回复0 | 2020-6-6 23:21:18 | 显示全部楼层 |阅读模式
VK1056驱动程序,在STM32F103下可以运行,51单片机可以自己小改,后面附上封装和数据手册
VK1056技术手册和驱动源码.zip (1.88 MB, 售价: 1 工控币)
1.png
部分源码:
  1. #include "vk1056b.h"
  2. #include "delay.h"

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

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

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

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

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

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

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

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

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

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

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


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

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

  255. …………限于本文篇幅 余下代码请下载附件…………
复制代码
回复

使用道具 举报

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

本版积分规则