[mw_shl_code=c,true]#include "stm32f10x.h"
//RS C9
//RW C10
//EN C11
//PSB C13
//ret 悬空
//数据口 A0~A7
#define lcd_rs_h GPIO_SetBits(GPIOC,GPIO_Pin_9);
#define lcd_rs_l GPIO_ResetBits(GPIOC,GPIO_Pin_9);
#define lcd_rw_h GPIO_SetBits(GPIOC,GPIO_Pin_10);
#define lcd_rw_l GPIO_ResetBits(GPIOC,GPIO_Pin_10);
#define lcd_en_h GPIO_SetBits(GPIOC,GPIO_Pin_11);
#define lcd_en_l GPIO_ResetBits(GPIOC,GPIO_Pin_11);
void RCC_Configuration(void);//时钟初始化
void GPIO_Configuration(void);//管脚初始化
void Timer_Delay_ms(u32 nus);
void LCD_position(u8 X,u8 Y);//位置函数
void write_com(u8 com);//写命令
void write_data(u8 data);//写数据
void init_LCD();//LCD初始化
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
init_LCD();
LCD_position(0,8);
Timer_Delay_ms(5);
write_data(0x34);
while(1);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_Init_Structure;
GPIO_Init_Structure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init_Structure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init_Structure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_Init_Structure);
GPIO_Init_Structure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13;
GPIO_Init_Structure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init_Structure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOC,&GPIO_Init_Structure);
}
void Timer_Delay_ms(u32 nus)
{
u32 temp;
SysTick->LOAD=9000*nus;
SysTick->VAL=0x00;
SysTick->CTRL=0x01;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&(!(temp&(1<<16))));
SysTick->CTRL=0x00;
SysTick->VAL=0X00;
}
void write_com(u8 com)
{
Timer_Delay_ms(100);
lcd_rs_l;
lcd_rw_l;
GPIO_Write(GPIOA,com);
lcd_en_h;
Timer_Delay_ms(5);
lcd_en_l;
}
void write_data(u8 data)
{
Timer_Delay_ms(100);
lcd_rs_h;
lcd_rw_l;
GPIO_Write(GPIOA,data);
Timer_Delay_ms(5);
lcd_en_h;
Timer_Delay_ms(5);
lcd_en_l;
}
void init_LCD()
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);//开并口输入
Timer_Delay_ms(5);
write_com(0x30);//基本指令操作
Timer_Delay_ms(5);
write_com(0x0c);//开显示,关光标
Timer_Delay_ms(5);
write_com(0x01);//清除LCD
Timer_Delay_ms(5);
}
void LCD_position(u8 X,u8 Y)
{
u8 pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_com(pos);
}[/mw_shl_code]
|