|
vk1072段碼驅(qū)動(dòng)C語言,親測
單片機(jī)源程序如下:
- /**
- ******************************************************************************
- * @file vk1072C.c
- * @author kevin_guo
- * @version V1.0.0
- * @date 05-17-2018
- * @brief This file contains all the vk1072C functions.
- * 此文件適用于 VK1072C
- ******************************************************************************
- * @attention
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "vk1072C.h"
-
- /* Private typedef -----------------------------------------------------------*/
- /* Private define ------------------------------------------------------------*/
- #define VK1072C_BASE100MS 226757 //通過n個(gè)nop指令實(shí)現(xiàn)100mS延時(shí),根據(jù)單片機(jī)修改此常數(shù)
- #define VK1072C_CLK 10 //WR信號線頻率 ,由Vk1072C_Delay實(shí)現(xiàn), =10->100kHz =100->11.11kHz
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- const unsigned char vk1072C_segtab[VK1072C_SEGNUM]={
- 0,1,2,3,4,5,13,14,15,16,17,18,19,26,27,28,29,30
- };
- unsigned char vk1072C_addrbit=6;//驅(qū)動(dòng)ic的ram地址線數(shù)A5-A0,
- unsigned char vk1072C_segi,vk1072C_comi;
- unsigned char vk1072C_maxcom=4;//驅(qū)動(dòng)的com數(shù)可以是4com,3com,2com
- unsigned char vk1072C_dispram[VK1072C_SEGNUM];//顯示RAM buffer只使用低4位,bit0->com0,bit1->com1,bit2->com2,bit3->com3
- /* Private function prototypes -----------------------------------------------*/
- /**
- * @brief Inserts a delay time.
- * @param ucDat-> 延時(shí)時(shí)間
- * @retval None
- */
- void Vk1072C_Delay(unsigned int ucDat)
- {//ucDat=10->100kHz ucDat=100->11.11kHz ucDat=226757->100mS
- while(ucDat--)
- {//nop指令根據(jù)單片機(jī)做相應(yīng)的修改
- __nop();__nop();__nop();__nop();__nop();
- __nop();__nop();__nop();__nop();__nop();
- __nop();__nop();__nop();__nop();__nop();
- __nop();__nop();__nop();__nop();__nop();
- __nop();__nop();//__nop();__nop();__nop();
- }
- }
- /**
- * @brief Vk1072C clk
- * @param None
- * @retval None
- */
- void WriteClockVk1072C(void)
- {
- VK1072C_WR_L();
- Vk1072C_Delay(VK1072C_CLK);
- VK1072C_WR_H();
- Vk1072C_Delay(VK1072C_CLK);
- }
- /**
- * @brief Write Vk1072C Command
- * @param FunctonCode->功能/命令碼
- * @retval None
- */
- void WriteCommandVk1072C(unsigned char FunctonCode)
- {
- unsigned char Shift = 0x80;
- unsigned char i;
-
- VK1072C_CS_L(); //CS 片選開
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- WriteClockVk1072C();
- VK1072C_DATA_L();
- WriteClockVk1072C();
- VK1072C_DATA_L();
- WriteClockVk1072C();
- for(i = 0; i < 8; i++)
- {
- if(Shift & FunctonCode)
- VK1072C_DATA_H();
- else
- VK1072C_DATA_L();
- WriteClockVk1072C();
- Shift = Shift >> 1;
- }
- VK1072C_DATA_L();
- WriteClockVk1072C(); //發(fā)送一個(gè) 0 16xx中最后一位 X
- VK1072C_CS_H(); //CS 片選關(guān)
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- }
- /**
- * @brief Write 1 data to Vk1072C
- * @param Addr->寫入ram的地址
- * @param Databuf->寫入ram的數(shù)據(jù)
- * @retval None
- */
- void Write1DataVk1072C(unsigned char Addr,unsigned char Dat)
- {
- unsigned char i;
- unsigned char Shift;
-
- Shift = 0x20; //屏蔽高3位 只用5位
-
- VK1072C_CS_L(); //CS 片選開
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- WriteClockVk1072C(); //101
- VK1072C_DATA_L();
- WriteClockVk1072C();
- VK1072C_DATA_H();
- WriteClockVk1072C();
- for( i = 0; i < vk1072C_addrbit; i++)
- {
- if (Addr & Shift)
- VK1072C_DATA_H();
- else
- VK1072C_DATA_L();
- WriteClockVk1072C();
- Shift = Shift >> 1;
- }
- Shift = 0x01;
- for (i = 0; i < 4; i++)
- {
- if( Dat & Shift)
- VK1072C_DATA_H();
- else
- VK1072C_DATA_L();
- WriteClockVk1072C();
- Shift = Shift << 1;
- }
- VK1072C_CS_H(); //CS 片選關(guān)
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- }
- /**
- * @brief Write n data to Vk1072C
- * @param Addr->寫入ram的起始地址
- * @param Databuf->寫入ram的數(shù)據(jù)buffer
- * @param Cnt->寫入ram的數(shù)據(jù)個(gè)數(shù)
- * @retval None
- */
- void WritenDataVk1072C(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt)
- {
- unsigned char i,j;
- unsigned char Shift;
- unsigned char dataval;
-
- VK1072C_CS_L(); //CS 片選開
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- WriteClockVk1072C(); //101
- VK1072C_DATA_L();
- WriteClockVk1072C();
- VK1072C_DATA_H();
- WriteClockVk1072C();
- Shift = 0x20;
- for( i = 0; i < vk1072C_addrbit; i++)
- {
- if (Addr & Shift)
- VK1072C_DATA_H();
- else
- VK1072C_DATA_L();
- WriteClockVk1072C();
- Shift = Shift >> 1;
- }
- for (j = 0; j < Cnt; j++)
- {
- Shift = 0x01;
- dataval=*Databuf++;
- for (i = 0; i < 4; i++)
- {
- if( dataval & Shift)
- VK1072C_DATA_H();
- else
- VK1072C_DATA_L();
- WriteClockVk1072C();
- Shift = Shift << 1;
- }
- }
- VK1072C_CS_H(); //CS 片選關(guān)
- Vk1072C_Delay(VK1072C_CLK/2);
- VK1072C_DATA_H();
- }
- /**
- * @brief lcd全顯或全滅
- * @param state=1->lcd全亮
- * @param state=0->lcd全滅
- * @retval None
- */
- void Vk1072C_DisAll(unsigned char state)
- {
- unsigned char segi;
- unsigned char dispram[31];
-
- for(segi=0;segi<VK1072C_SEGNUM;segi++)
- {
- dispram[segi]=0;
- }
- for(segi=0;segi<VK1072C_SEGNUM;segi++)
- {
- if(state==1)
- {
- if(vk1072C_maxcom==2)
- vk1072C_dispram[segi]=0x03;
- else if(vk1072C_maxcom==3)
- vk1072C_dispram[segi]=0x07;
- else//maxcom==4
- vk1072C_dispram[segi]=0x0f;
- }
- else
- {
- vk1072C_dispram[segi]=0x00;
- }
- dispram[vk1072C_segtab[segi]]=vk1072C_dispram[segi];
- }
- WritenDataVk1072C(0,dispram,31);
- }
- /**
- * @brief lcd顯示單個(gè)點(diǎn)(1comx1seg)
- * @param Seg->點(diǎn)對應(yīng)的seg
- * @param Com->點(diǎn)對應(yīng)的com
- * @retval None
- */
- void Vk1072C_DisSegOn(unsigned char Seg,unsigned char Com)
- {
- vk1072C_dispram[Seg-vk1072C_segtab[0]]|=(1<<Com);
- Write1DataVk1072C(Seg,vk1072C_dispram[Seg-vk1072C_segtab[0]]);
- }
- /**
- * @brief lcd關(guān)閉單個(gè)點(diǎn)(1comx1seg)
- * @param None
- * @retval None
- */
- void Vk1072C_DisSegOff(unsigned char Seg,unsigned char Com)
- {
- vk1072C_dispram[Seg-vk1072C_segtab[0]]&=~(1<<Com);
- Write1DataVk1072C(Seg,vk1072C_dispram[Seg-vk1072C_segtab[0]]);
- }
- /**
- * @brief 配置Vk1072C通信線GPIO.
- * @param None
- * @retval None
- */
- void Vk1072C_Lowlevel_Init(void)
- {
- //通信線電平不同,建議加電平轉(zhuǎn)換電路
- //此函數(shù)根據(jù)客戶單片機(jī)做相應(yīng)的修改
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the Vk1072C GPIO Clock */
- RCC_APB2PeriphClockCmd(VK1072C_CS_GPIO_CLK , ENABLE);
- RCC_APB2PeriphClockCmd(VK1072C_WR_GPIO_CLK , ENABLE);
- RCC_APB2PeriphClockCmd(VK1072C_DAT_GPIO_CLK , ENABLE);
- /* Configure the GPIO pin */
- GPIO_InitStructure.GPIO_Pin = VK1072C_CS_PIN;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//通訊線電平不同,可設(shè)為開漏輸出,1072C有內(nèi)部上拉電阻
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通信線電平一樣,可設(shè)為推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(VK1072C_CS_GPIO_PORT, &GPIO_InitStructure);
- /* Configure the GPIO pin */
- GPIO_InitStructure.GPIO_Pin =VK1072C_WR_PIN;
- GPIO_Init(VK1072C_WR_GPIO_PORT, &GPIO_InitStructure);
- /* Configure the GPIO pin */
- GPIO_InitStructure.GPIO_Pin =VK1072C_DAT_PIN;
- GPIO_Init(VK1072C_WR_GPIO_PORT, &GPIO_InitStructure);
- }
- /**
- * @brief Vk1072C進(jìn)入掉電低功耗模式
- * @param None
- * @retval None
- */
- void Vk1072C_Enter_Standby(void)
- {
- //連續(xù)使用命令LCDOFF和SYSDIS,系統(tǒng)將處于掉電低功耗狀態(tài)。
- //只有使用片內(nèi)RC時(shí)鐘源時(shí),才能使系統(tǒng)進(jìn)入掉電低功耗狀態(tài)。
- WriteCommandVk1072C(OSC_OFF);
- WriteCommandVk1072C(DISP_OFF);
- }
- /**
- * @brief Vk1072C退出掉電低功耗模式
- * @param None
- * @retval None
- */
- void Vk1072C_Exit_Standby(void)
- {
- //退出掉電低功耗狀態(tài)重新配置vk1072C
- WriteCommandVk1072C(OSC_ON);
- WriteCommandVk1072C(DISP_ON);
- WriteCommandVk1072C(COM_1_3__4);vk1072C_maxcom=4; //1/3bias 4com
- // WriteCommandVk1072C(COM_1_3__3);vk1072C_maxcom=3; //1/3bias 3com
- // WriteCommandVk1072C(COM_1_3__2);vk1072C_maxcom=2; //1/3bias 2com
- // WriteCommandVk1072C(COM_1_2__4);vk1072C_maxcom=4; //1/2bias 4com
- // WriteCommandVk1072C(COM_1_2__3);vk1072C_maxcom=3; //1/2bias 3com
- // WriteCommandVk1072C(COM_1_2__2);vk1072C_maxcom=2; //1/2bias 2com
- }
- /**
- * @brief Vk1072C Init
- * @param None
- * @retval None
- */
- void Vk1072C_Init(void)
- {
- //管腳配置根據(jù)客戶單片機(jī)做相應(yīng)的修改
- Vk1072C_Lowlevel_Init();
- //基本配置
- WriteCommandVk1072C(OSC_ON);
- WriteCommandVk1072C(DISP_ON);
- WriteCommandVk1072C(COM_1_3__4);vk1072C_maxcom=4; //1/3bias 4com
- // WriteCommandVk1072C(COM_1_3__3);vk1072C_maxcom=3; //1/3bias 3com
- // WriteCommandVk1072C(COM_1_3__2);vk1072C_maxcom=2; //1/3bias 2com
- // WriteCommandVk1072C(COM_1_2__4);vk1072C_maxcom=4; //1/2bias 4com
- // WriteCommandVk1072C(COM_1_2__3);vk1072C_maxcom=3; //1/2bias 3com
- // WriteCommandVk1072C(COM_1_2__2);vk1072C_maxcom=2; //1/2bias 2com
- //上電默認(rèn)配置(以下未用功能關(guān)閉降低功耗)
- WriteCommandVk1072C(TIMER_DIS);
- WriteCommandVk1072C(WDT_DIS);
- WriteCommandVk1072C(BUZZ_OFF);
- WriteCommandVk1072C(IRQ_DIS);
- }
- /**
- * @brief Vk1072C測試主程序
- * @param None
- * @retval None
- */
- void Vk1072C_Main(void)
- {
- Vk1072C_Init();
- Vk1072C_DisAll(0);
- while(1)
- {
- Vk1072C_DisAll(1); //LCD全顯
- Vk1072C_Delay(50*VK1072C_BASE100MS); //延時(shí)5S
- Vk1072C_DisAll(0); //LCD全關(guān)
- Vk1072C_Delay(50*VK1072C_BASE100MS); //延時(shí)5S
- for(vk1072C_segi=0;vk1072C_segi<VK1072C_SEGNUM;vk1072C_segi++)//seg
- {
- for(vk1072C_comi=0;vk1072C_comi<vk1072C_maxcom;vk1072C_comi++)//com
- {
- Vk1072C_DisSegOn(vk1072C_segtab[vk1072C_segi],vk1072C_comi); //LCD單個(gè)seg點(diǎn)亮
- Vk1072C_Delay(3*VK1072C_BASE100MS); //延時(shí)300mS
- Vk1072C_DisAll(0); //LCD全關(guān)
- }
- }
- Vk1072C_DisAll(1); //LCD全顯
- Vk1072C_Delay(10*VK1072C_BASE100MS); //延時(shí)1S
- for(vk1072C_segi=0;vk1072C_segi<VK1072C_SEGNUM;vk1072C_segi++)//seg
- {
- for(vk1072C_comi=0;vk1072C_comi<vk1072C_maxcom;vk1072C_comi++)//com
- {
- Vk1072C_DisSegOff(vk1072C_segtab[vk1072C_segi],vk1072C_comi); //LCD單個(gè)seg關(guān)閉
- Vk1072C_Delay(3*VK1072C_BASE100MS); //延時(shí)300mS
- Vk1072C_DisAll(1); //LCD全顯
- }
- }
- Vk1072C_Delay(10*VK1072C_BASE100MS);//延時(shí)1S
- Vk1072C_DisAll(0); //LCD全關(guān)
- Vk1072C_Delay(10*VK1072C_BASE100MS);//延時(shí)1S
- Vk1072C_Enter_Standby(); //Vk1072C進(jìn)入掉電低功耗模式
- Vk1072C_Delay(50*VK1072C_BASE100MS);//延時(shí)5S
- Vk1072C_Exit_Standby(); //Vk1072C退出掉電低功耗模式
- }
- }
- /************************END OF FILE****/
復(fù)制代碼
0.png (5.71 KB, 下載次數(shù): 64)
下載附件
2018-11-9 02:39 上傳
所有資料51hei提供下載:
vk1072.rar
(3.62 KB, 下載次數(shù): 22)
2018-11-8 20:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|