STM32的LCD1926412864经典程序.docx

上传人:b****3 文档编号:3709664 上传时间:2022-11-24 格式:DOCX 页数:14 大小:17.93KB
下载 相关 举报
STM32的LCD1926412864经典程序.docx_第1页
第1页 / 共14页
STM32的LCD1926412864经典程序.docx_第2页
第2页 / 共14页
STM32的LCD1926412864经典程序.docx_第3页
第3页 / 共14页
STM32的LCD1926412864经典程序.docx_第4页
第4页 / 共14页
STM32的LCD1926412864经典程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

STM32的LCD1926412864经典程序.docx

《STM32的LCD1926412864经典程序.docx》由会员分享,可在线阅读,更多相关《STM32的LCD1926412864经典程序.docx(14页珍藏版)》请在冰豆网上搜索。

STM32的LCD1926412864经典程序.docx

STM32的LCD1926412864经典程序

现在STM32越来越流行,在学校搞的很火,本人最近也在学习,做了一个LCD19264的程序,先与大家分享,多谢关注!

本程序是有LCD12864该进的,液晶驱动为ST7920。

可以稍微改动即可用于12864

一、以下是LCD19264头文件

////////////////////////////////////////////////////////////////////////////////

/*******************************************************************************

*函数功能:

STM32F103VET619264-1液晶显示,串---并口19264

*编写时间:

2012.07.22

*作者:

ZhouGanJin

*版本:

V1.1

*液晶19264-1简介:

并口不多说;串口引脚4根RW(SID),E1(CLK1),E2(CLK2),PSB=0,RS(CS)=1,

*通过预编译选择串并口方式

*******************************************************************************/

#ifndef_LCD19264_H

#define_LCD19264_H

/*端口定义---------------------------

本程序只用了GPIOA

-----------------------------------*/

/*函数申明---------------------

STM32配置和19264函数声明

-------------------------------*/

#defineLCD_RS_HGPIO_SetBits(GPIOA,GPIO_Pin_0)//GPIOA->BSRR=GIOP_pin_0

#defineLCD_RS_LGPIO_ResetBits(GPIOA,GPIO_Pin_0)//GPIOA->BRR=GIOP_pin_0

#defineLCD_RW_HGPIO_SetBits(GPIOA,GPIO_Pin_1)

#defineLCD_RW_LGPIO_ResetBits(GPIOA,GPIO_Pin_1)

#defineLCD_E1_HGPIO_SetBits(GPIOA,GPIO_Pin_2)

#defineLCD_E1_LGPIO_ResetBits(GPIOA,GPIO_Pin_2)

#defineLCD_E2_HGPIO_SetBits(GPIOA,GPIO_Pin_3)

#defineLCD_E2_LGPIO_ResetBits(GPIOA,GPIO_Pin_3)

#defineLCD_PSB_HGPIO_SetBits(GPIOA,GPIO_Pin_4)

#defineLCD_PSB_LGPIO_ResetBits(GPIOA,GPIO_Pin_4)

#defineLCD_DATA_PORTGPIOD

#defineLCD_DATAGPIOD->BSRR//BSRR高十六位是复位,低十六位是置位

voidLcm_Wr_Dat(u8wrdata,u8enable);//写数据

voidLcm_Wr_Com(u8wrcommand,u8enable);//写指令

voidLcm_Rd_Status(u8enable);//读忙状态

voidLcm_Init(u8enable);//液晶初始化

voidLcm_GotoXY(u8pos_X,u8pos_y);//设定坐标

voidLcm_SETXY(u8pos_X,u8pos_y,u8enable);

voidLcm_Disp_Char(u8onechar,u8enable);//显示单个字符

voidLcm_Disp_Char_setxy(u8x,u8y,u8ch,u8enable);//定坐标显示单个字符

voidLcm_Disp_Str(u8*string,u8enable);//显示字符串

voidLcm_Disp_Str_setxy(u8x,u8y,u8*strings,u8enable);//定坐标显示字符串

voidDelay_ms(u32m);//1ms延时

voidLcm_Delay(void);

/*functionall------函数定义-------------

以下函数包含19264液晶的串并行方式

----------------------------------------*/

#definePSB_SERIAL0

#ifdefPSB_SERIAL

//-------以下为串口函数--------serialtransmission------///

//-----------传送8bits数据----

voidSend_byte(u8bbyte,u8enable)

{

u8i;

for(i=0;i<8;i++)

{

LCD_E1_L;LCD_E2_L;

if(0x80&bbyte)LCD_RW_H;//SID=1;

elseLCD_RW_L;

if(!

enable)//CLK=01;串行用下降沿

{

LCD_E1_H;

Lcm_Delay();

LCD_E1_L;

}

else

{

LCD_E2_H;

Lcm_Delay();

LCD_E2_L;

}

bbyte<<=1;

Lcm_Delay();//?

}

}

//-----------写指令函数----

voidLcm_Wr_Com(u8wcomd,u8enable)

{

Lcm_Delay();

Send_byte(0xf8,enable);//1111_1,RW(0),RS(0),0-----------指令

Send_byte(0xf0&wcomd,enable);//high4bits

Send_byte(0xf8&(wcomd<<4),enable);//low4bits

}

//-----------写数据函数----

voidLcm_Wr_Dat(u8wdata,u8enable)

{

Lcm_Delay();

Send_byte(0xfa,enable);//1111_1,RW(0),RS

(1),0---------数据

Send_byte(0xf0&wdata,enable);//high4bits

Send_byte(0xf8&(wdata<<4),enable);//low4bits

}

#else

//-------以下为并口函数--------parallelTransmission-------///

//---------读忙函数----------------

voidLcm_Rd_Status(u8enable)

{

u16getd;

while

(1)

{

Lcm_Delay();

LCD_RS_L;//命令

LCD_RW_H;//读取

Lcm_Delay();

//LCD_DATA=0xFFFF0000;//LCD_DATA=0xFF;高16位为复位,即写入0使其不忙

GPIO_Write(LCD_DATA_PORT,0XFFFF);//准备读取数据,写0x0000则与上相同

Lcm_Delay();

if(!

enable)

{

LCD_E1_L;

Lcm_Delay();

LCD_E1_H;

getd=GPIO_ReadInputData(LCD_DATA_PORT);

if((getd&0x0080)==0)

break;

}

else

{

LCD_E2_L;

Lcm_Delay();

LCD_E2_H;

if((getd&0x0080)==0)

break;

}

}

}

//-----写指令----------------

voidLcm_Wr_Com(u8wcomd,u8enable)

{

Lcm_Rd_Status(enable);

Lcm_Delay();

LCD_RS_L;

Lcm_Delay();

LCD_RW_L;

Lcm_Delay();

LCD_DATA=wcomd|(~wcomd<<16);//

Lcm_Delay();

if(!

enable)

{

LCD_E1_H;

Lcm_Delay();

LCD_E1_L;

}

else

{

LCD_E2_H;

Lcm_Delay();

LCD_E2_L;

}

//Lcm_Delay();

}

//------写数据----------------

voidLcm_Wr_Dat(u8wdata,u8enable)

{

Lcm_Rd_Status(enable);

Lcm_Delay();

LCD_RS_H;

Lcm_Delay();

LCD_RW_L;

Lcm_Delay();

LCD_DATA=wdata|(~wdata<<16);

Lcm_Delay();

if(!

enable)

{

LCD_E1_H;

Lcm_Delay();

LCD_E1_L;

}

else

{

LCD_E2_H;

Lcm_Delay();

LCD_E2_L;

}

}

#endif

//----选定坐标,全屏选择----------

voidLcm_GotoXY(u8pos_x,u8pos_y)

{

u8addr;

if((pos_x>11)||(pos_y>1))

return;

if(pos_y==0)

addr=0x80+pos_x;

elseif(pos_y==1)

addr=0x90+pos_x;

Lcm_Wr_Com(addr,0);//设定DDRAM地址

Lcm_Wr_Com(addr,1);//设定DDRAM地址

}

//---选定坐标,分屏选择------------

voidLcm_SETXY(u8pos_x,u8pos_y,u8enable)

{

u8addr;

if((pos_x>11)||(pos_y>1))

return;

if(pos_y==0)

addr=0x80+pos_x;

elseif(pos_y==1)

addr=0x90+pos_x;

if(enable==0)

Lcm_Wr_Com(addr,0);//设定DDRAM地址

else

Lcm_Wr_Com(addr,1);//设定DDRAM地址

}

//----------初始化----------------

voidLcm_Init(u8enable)

{

#ifdefPSB_SERIAL

LCD_PSB_L;//选择串口

#else

LCD_PSB_H;//选择并口

#endif

Lcm_Wr_Com(0x30,enable);

Delay_ms

(2);

Lcm_Wr_Com(0x30,enable);

Delay_ms

(2);

Lcm_Wr_Com(0x0c,enable);//开显示及光标设置

Delay_ms

(2);

Lcm_Wr_Com(0x01,enable);//显示清屏

Delay_ms(3);

Lcm_Wr_Com(0x06,enable);//显示光标移动设置

Delay_ms(3);

}

/*---------displayfunction----------

以下为各种显示函数

---------------------------------------*/

voidLcm_Disp_Char(u8onechar,u8enable)//显示单个字符

{

Lcm_Wr_Dat(onechar,enable);

}

voidLcm_Disp_Str(u8*strings,u8enable)//显示字符串

{

while(*strings!

='\0')

Lcm_Wr_Dat(*strings++,enable);

Lcm_Wr_Dat('\0',enable);

}

voidLcm_Disp_Char_setxy(u8x,u8y,u8ch,u8enable)//指定坐标显示字符

{

Lcm_GotoXY(x,y);

Lcm_Wr_Dat(ch,enable);

}

voidLcm_Disp_Str_setxy(u8x,u8y,u8*strings,u8enable)//指定坐标显示字符串

{

Lcm_GotoXY(x,y);

while(*strings!

='\0')

Lcm_Wr_Dat(*strings++,enable);

Lcm_Wr_Dat('\0',enable);

}

二、以下是STM32配置函数

/*函数申明---------------------

STM32配置和19264函数声明

-------------------------------*/

voidRCC_Configuration(void);

voidGPIO_Configuration(void);

voidNVIC_Configuration(void);

voidWWDG_Configuration(void);

/*

********************************************************************************

**函数名称:

RCC_Configuration(void)

**函数功能:

时钟初始化

**输入:

**输出:

**返回:

********************************************************************************

*/

GPIO_InitTypeDefGPIO_InitStructure;

ErrorStatusHSEStartUpStatus;

voidRCC_Configuration(void)

{

/*RCCsystemreset(fordebugpurpose)*/

RCC_DeInit();

/*EnableHSE*/

RCC_HSEConfig(RCC_HSE_ON);

/*WaittillHSEisready*/

HSEStartUpStatus=RCC_WaitForHSEStartUp();

if(HSEStartUpStatus==SUCCESS)

{

/*HCLK=SYSCLK*/

RCC_HCLKConfig(RCC_SYSCLK_Div1);

/*PCLK2=HCLK*/

RCC_PCLK2Config(RCC_HCLK_Div1);

/*PCLK1=HCLK/2*/

RCC_PCLK1Config(RCC_HCLK_Div2);

/*Flash2waitstate*/

FLASH_SetLatency(FLASH_Latency_2);

/*EnablePrefetchBuffer*/

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

/*PLLCLK=8MHz*9=72MHz*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

/*EnablePLL*/

RCC_PLLCmd(ENABLE);

/*WaittillPLLisready*/

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

{

}

/*SelectPLLassystemclocksource*/

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

/*WaittillPLLisusedassystemclocksource*/

while(RCC_GetSYSCLKSource()!

=0x08)

{

}

}

}

/*

********************************************************************************

**函数名称:

GPIO_Configuration(void)

**函数功能:

端口初始化

**输入:

**输出:

**返回:

********************************************************************************

*/

voidGPIO_Configuration(void)

{

//定义端口结构体

GPIO_InitTypeDefGPIO_InitStructure;

//将GPIOA端口使能有效

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|//GPIOA

GPIO_Pin_1|

GPIO_Pin_2|

GPIO_Pin_3|

GPIO_Pin_4|

GPIO_Pin_5|

GPIO_Pin_6|

GPIO_Pin_7|

GPIO_Pin_8|

GPIO_Pin_9|

GPIO_Pin_10|

GPIO_Pin_11|

GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHz

GPIO_Init(GPIOA,&GPIO_InitStructure);//选择A端口

}

/*

********************************************************************************

**函数名称:

NVIC_Configuration(void)

**函数功能:

中断初始化

**输入:

**输出:

**返回:

********************************************************************************

*/

voidNVIC_Configuration(void)

{

NVIC_InitTypeDefNVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_Init(&NVIC_InitStructure);

}

/*

********************************************************************************

函数功能:

延时函数

/*---Delayfunction-----------------

延时函数定义

********************************************************************************

*/

//------1ms延时------------

voidDelay_ms(u32m)

{

u32i;

for(;m!

=0;m--)

for(i=0;i<25000;i++);//clk=50MHz,25_000000分频得1s,25000分频得1ms

}

//---------液晶延时----------

voidLcm_Delay(void)

{

u8j,i=100;

while(i--)

{

for(j=0;j<100;j++)

{;}

}

}

#endif

/*************结束***************/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1