久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
vk1072段碼驅動C語言程序,親測ok
[打印本頁]
作者:
hong19851024
時間:
2018-11-8 20:40
標題:
vk1072段碼驅動C語言程序,親測ok
vk1072段碼驅動C語言,親測
單片機源程序如下:
/**
******************************************************************************
* @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個nop指令實現100mS延時,根據單片機修改此常數
#define VK1072C_CLK 10 //WR信號線頻率 ,由Vk1072C_Delay實現, =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;//驅動ic的ram地址線數A5-A0,
unsigned char vk1072C_segi,vk1072C_comi;
unsigned char vk1072C_maxcom=4;//驅動的com數可以是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-> 延時時間
* @retval None
*/
void Vk1072C_Delay(unsigned int ucDat)
{//ucDat=10->100kHz ucDat=100->11.11kHz ucDat=226757->100mS
while(ucDat--)
{//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();__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(); //發送一個 0 16xx中最后一位 X
VK1072C_CS_H(); //CS 片選關
Vk1072C_Delay(VK1072C_CLK/2);
VK1072C_DATA_H();
}
/**
* @brief Write 1 data to Vk1072C
* @param Addr->寫入ram的地址
* @param Databuf->寫入ram的數據
* @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 片選關
Vk1072C_Delay(VK1072C_CLK/2);
VK1072C_DATA_H();
}
/**
* @brief Write n data to Vk1072C
* @param Addr->寫入ram的起始地址
* @param Databuf->寫入ram的數據buffer
* @param Cnt->寫入ram的數據個數
* @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 片選關
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顯示單個點(1comx1seg)
* @param Seg->點對應的seg
* @param Com->點對應的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關閉單個點(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)
{
//通信線電平不同,建議加電平轉換電路
//此函數根據客戶單片機做相應的修改
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;//通訊線電平不同,可設為開漏輸出,1072C有內部上拉電阻
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通信線電平一樣,可設為推挽輸出
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進入掉電低功耗模式
* @param None
* @retval None
*/
void Vk1072C_Enter_Standby(void)
{
//連續使用命令LCDOFF和SYSDIS,系統將處于掉電低功耗狀態。
//只有使用片內RC時鐘源時,才能使系統進入掉電低功耗狀態。
WriteCommandVk1072C(OSC_OFF);
WriteCommandVk1072C(DISP_OFF);
}
/**
* @brief Vk1072C退出掉電低功耗模式
* @param None
* @retval None
*/
void Vk1072C_Exit_Standby(void)
{
//退出掉電低功耗狀態重新配置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)
{
//管腳配置根據客戶單片機做相應的修改
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
//上電默認配置(以下未用功能關閉降低功耗)
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); //延時5S
Vk1072C_DisAll(0); //LCD全關
Vk1072C_Delay(50*VK1072C_BASE100MS); //延時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單個seg點亮
Vk1072C_Delay(3*VK1072C_BASE100MS); //延時300mS
Vk1072C_DisAll(0); //LCD全關
}
}
Vk1072C_DisAll(1); //LCD全顯
Vk1072C_Delay(10*VK1072C_BASE100MS); //延時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單個seg關閉
Vk1072C_Delay(3*VK1072C_BASE100MS); //延時300mS
Vk1072C_DisAll(1); //LCD全顯
}
}
Vk1072C_Delay(10*VK1072C_BASE100MS);//延時1S
Vk1072C_DisAll(0); //LCD全關
Vk1072C_Delay(10*VK1072C_BASE100MS);//延時1S
Vk1072C_Enter_Standby(); //Vk1072C進入掉電低功耗模式
Vk1072C_Delay(50*VK1072C_BASE100MS);//延時5S
Vk1072C_Exit_Standby(); //Vk1072C退出掉電低功耗模式
}
}
/************************END OF FILE****/
復制代碼
0.png
(5.71 KB, 下載次數: 64)
下載附件
2018-11-9 02:39 上傳
所有資料51hei提供下載:
vk1072.rar
(3.62 KB, 下載次數: 22)
2018-11-8 20:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99亚洲精品
|
成人免费视频网站在线观看
|
91一区二区
|
久久久青草婷婷精品综合日韩
|
成人高清在线
|
免费看淫片
|
影视先锋av资源噜噜
|
国产一级特黄真人毛片
|
在线一区视频
|
中文字幕日韩一区
|
色婷婷国产精品综合在线观看
|
欧美h
|
久久久精品一区
|
a视频在线观看
|
成人黄色a
|
天堂网中文字幕在线观看
|
日本特黄特色aaa大片免费
|
四虎成人精品永久免费av九九
|
欧美一级黄色片免费观看
|
中文av字幕
|
国产精品一区二区av
|
日本欧美在线
|
国产高清久久
|
亚洲一区二区久久
|
久久精品亚洲国产
|
欧美 日韩 国产 一区
|
黄色免费观看网站
|
亚洲 中文 欧美 日韩 在线观看
|
国产亚洲一区二区精品
|
一区精品在线观看
|
久久久噜噜噜久久中文字幕色伊伊
|
久久久久久久99
|
五月天婷婷激情
|
亚洲一二三区精品
|
国产女人与拘做受免费视频
|
男女网站免费
|
黄色a级一级片
|
亚洲韩国精品
|
九九热免费在线观看
|
成人在线视频网
|
精品一区二区三区91
|