標題:
VK1056技術(shù)手冊與驅(qū)動程序下載
[打印本頁]
作者:
行百里
時間:
2020-6-5 17:36
標題:
VK1056技術(shù)手冊與驅(qū)動程序下載
VK1056驅(qū)動程序,在STM32F103下可以運行,51單片機可以自己小改,后面附上封裝和數(shù)據(jù)手冊
51hei.png
(5.7 KB, 下載次數(shù): 91)
下載附件
2020-6-6 01:57 上傳
單片機源程序如下:
#include "vk1056b.h"
#include "delay.h"
const u8 vk1056B_segtab[9]={14,15,16,17,18,19,20,21,22};
u8 vk1056B_addrbit=6;//驅(qū)動ic的ram地址線數(shù)A5-A0,
u8 vk1056B_segi,vk1056B_comi;
u8 vk1056B_dispram[14];//顯示RAM buffer只使用低4位,bit0->com0,bit1->com1,bit2->com2,bit3->com3
u8 vk1056B_myram[4]={0x00,0x00,0x00,0x00};
/**
* @brief 配置Vk1056B通信線GPIO.
* @param None
* @retval None
*/
void Vk1056B_Lowlevel_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;//通訊線電平不同,可設(shè)為開漏輸出,1056B有內(nèi)部上拉電?
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通信線電平一樣,可設(shè)為推挽輸出?
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Vk1056B_Init(void)
{
Vk1056B_Lowlevel_Init();
//基本配置
WriteCommandVk1056B(OSC_OFF); //00
WriteCommandVk1056B(OSC_ON); //01
WriteCommandVk1056B(DISP_ON); //03
WriteCommandVk1056B(0x04);
WriteCommandVk1056B(0x05);
WriteCommandVk1056B(0x08);
WriteCommandVk1056B(RC32K); //18
WriteCommandVk1056B(COM_1_3__4);//29
WriteCommandVk1056B(0x80);
// WriteCommandVk1056B(COM_1_3__3);vk1056B_maxcom=3; //1/3bias 3com
// WriteCommandVk1056B(COM_1_3__2);vk1056B_maxcom=2; //1/3bias 2com
// WriteCommandVk1056B(COM_1_2__4);vk1056B_maxcom=4; //1/2bias 4com
// WriteCommandVk1056B(COM_1_2__3);vk1056B_maxcom=3; //1/2bias 3com
// WriteCommandVk1056B(COM_1_2__2);vk1056B_maxcom=2; //1/2bias 2com
//上電默認配置(以下未用功能關(guān)閉降低功耗)
// WriteCommandVk1056B(TIMER_DIS);
// WriteCommandVk1056B(WDT_DIS);
// WriteCommandVk1056B(BUZZ_OFF);
// WriteCommandVk1056B(IRQ_DIS);
}
/**
* @brief Vk1056B clk
* @param None
* @retval None
*/
void WriteClockVk1056B(void)
{
WR=0;
delay_us(10);
WR=1;
delay_us(10);
}
/**
* @brief Write Vk1056B Command
* @param FunctonCode->功能/命令碼
* @retval None
*/
void WriteCommandVk1056B(unsigned char FunctonCode) //寫命令
{
u8 Shift = 0x80;
u8 i;
CS=0;
delay_us(5);
DATA=1;
WriteClockVk1056B();
DATA=0;
WriteClockVk1056B();
DATA=0;
WriteClockVk1056B();
for(i = 0; i < 8; i++)
{
if(Shift & FunctonCode) //與1000 0000
DATA=1;
else
DATA=0;
WriteClockVk1056B();
Shift = Shift >> 1;
}
DATA=0;
WriteClockVk1056B(); //發(fā)送一個 0 16xx中最后一位 X
CS=1;
delay_us(5);
DATA=1;
}
/**
* @brief Write 1 data to Vk1056B
* @param Addr->寫入ram的地址
* @param Databuf->寫入ram的數(shù)據(jù)
* @retval None
*/
void Write1DataVk1056B(unsigned char Addr,unsigned char Dat)
{
unsigned char i; //寫數(shù)據(jù)
unsigned char Shift;
Shift = 0x20; //屏蔽高3位 只用5位 0010 0000
CS=0;
delay_us(5);
DATA=1;
WriteClockVk1056B(); //101
DATA=0;
WriteClockVk1056B();
DATA=1;
WriteClockVk1056B();
for( i = 0; i < vk1056B_addrbit; i++) //6
{
if (Addr & Shift) //與0010 0000
DATA=1;
else
DATA=0;
WriteClockVk1056B();
Shift = Shift >> 1;
}
Shift = 0x01;
for (i = 0; i < 4; i++) //與0000 0001
{
if( Dat & Shift)
DATA=1;
else
DATA=0;
WriteClockVk1056B();
Shift = Shift << 1;
}
CS=1;
delay_us(5);
DATA=1;
}
/**
* @brief Write n data to Vk1056B
* @param Addr->寫入ram的起始地址
* @param Databuf->寫入ram的數(shù)據(jù)buffer
* @param Cnt->寫入ram的數(shù)據(jù)個數(shù)
* @retval None 連續(xù)寫模式
*/
void WritenDataVk1056B(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt)
{
unsigned char i,j;
unsigned char Shift;
unsigned char dataval;
CS=0;
delay_us(5);
DATA=1;
WriteClockVk1056B(); //101
DATA=0;
WriteClockVk1056B();
DATA=1;
WriteClockVk1056B();
Shift = 0x20; //0010 0000
for( i = 0; i < 6; i++)
{
if (Addr & Shift)
DATA=1;
else
DATA=0;
WriteClockVk1056B();
Shift = Shift >> 1;
}
for (j = 0; j < Cnt; j++)
{
Shift = 0x01;
dataval=*Databuf++;
for (i = 0; i < 4; i++)
{
if( dataval & Shift)
DATA=1;
else
DATA=0;
WriteClockVk1056B();
Shift = Shift << 1;
}
}
CS=1;
delay_us(5);
DATA=1;
}
/**
* @brief lcd全顯或全滅
* @param state=1->lcd全亮
* @param state=0->lcd全滅
* @retval None
*/
void Vk1056B_DisAll(unsigned char state)
{
unsigned char i;
for(i=0;i<14;i++)
{
if(state==1)
{
vk1056B_dispram[i]=0x0f;
}
else
{
vk1056B_dispram[i]=0x00;
}
}
WritenDataVk1056B(vk1056B_segtab[0],vk1056B_dispram,14);
}
//以下是根據(jù)段碼屏廠家給出的表格做的,不同廠家資料程序不同,此處可以跳過不看了
//A顯示
void Vk1056B_Display_A(u8 i)
{
switch(i)
{
case 0:
Vk1056B_On(0,1);
Vk1056B_On(0,2);
Vk1056B_On(0,4);
Vk1056B_On(0,8);
Vk1056B_On(1,2);
Vk1056B_OFF(1,4);
Vk1056B_On(1,8);
break;
case 1:
Vk1056B_OFF(0,1);
Vk1056B_OFF(0,2);
Vk1056B_OFF(0,4);
Vk1056B_OFF(0,8);
Vk1056B_On(1,2);
Vk1056B_OFF(1,4);
Vk1056B_On(1,8);
break;
case 2:
Vk1056B_On(0,1);
Vk1056B_On(0,2);
Vk1056B_OFF(0,4);
Vk1056B_On(0,8);
Vk1056B_OFF(1,2);
Vk1056B_On(1,4);
Vk1056B_On(1,8);
break;
case 3:
Vk1056B_On(0,1);
Vk1056B_OFF(0,2);
Vk1056B_OFF(0,4);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
VK1056驅(qū)動.zip
(3.66 KB, 下載次數(shù): 48)
2020-6-5 17:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
VK1056技術(shù)手冊.zip
(1.88 MB, 下載次數(shù): 35)
2020-6-5 17:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
liuhailan5757
時間:
2021-5-5 20:39
看官方的例程沒看懂,看了這個就看懂了。就是那個連續(xù)寫那個函數(shù)看不明白,官方的說明太含糊了。直接說連續(xù)發(fā)送數(shù)據(jù)不就得了,說的那么抽象。這個博主的一看就明白,點贊
作者:
CaptionDeng
時間:
2022-8-8 17:59
一看就明白,點贊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1