______________________________________12864.h___________________________________________________
#ifndef __LCD12864_H__
#define __LCD12864_H__
#include"sys.h"
/////////////// lcd12864端口定义 /////////////
// 复位脚直接接到vcc
#define lcd_rs PCout(10)
#define lcd_rw PCout(11)
#define lcd_e PCout(12) //psb接5v选择并行
#define DATAOUT(x) GPIOD->ODR=(GPIOD->ODR&0XFF00)|(x&0x00FF)//输出 相当于pb各口与data相接 x是8位,位与前面补零
/////////////// lcd12864对应控制函数 /////////////
void lcd_w_com(u8 com);
void lcd_w_dat(u8 dat);
void Init(void);
void lcd_init(void);
void lcd_display(void);
#endif
———————————————————————————12864.c________________________________________________
#include<stm32f10x_lib.h>
#include"lcd12864.h"
#include"sys.h"
#include"usart.h"
#include"delay.h"
void lcd_w_com(u8 com)
{
lcd_rw=0;
lcd_rs=0;
delay_us(50);
DATAOUT(com);
lcd_e=1;
delay_us(500);
lcd_e=0;
delay_us(100);
}
void lcd_w_dat(u8 dat)
{
lcd_rw=0;
lcd_rs=1;
DATAOUT(dat);
lcd_e=1;
delay_us(500);
lcd_e=0;
delay_us(100);
}
void Init(void)
{
RCC->APB2ENR|=1<<4; //使能PORTC时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
GPIOC->CRH&=0XFFF000FF; //将PORTD的10-12置零 初始化该位
GPIOC->CRH|=0X00077700; //设置10-12为开漏输出模式
GPIOC->ODR|=1<<10;
GPIOC->ODR|=1<<11; //端口数据输出寄存器,向该就寄存器写数据可以控制IO的输出电平
GPIOC->ODR|=1<<12; //输出高电平 /上拉
GPIOD->CRL|=0X77777777; //0-7 开漏输出
GPIOD->ODR|=0X0000FFFF; //上拉
}
void lcd_init(void)
{
delay_ms(100);
lcd_w_com(0x30);
delay_us(200);
lcd_w_com(0x30);
delay_us(200);
lcd_w_com(0x0f);
delay_us(200);
lcd_w_com(0x01);
delay_ms(12);
lcd_w_com(0x06);
delay_us(500);
}
void lcd_display(void)
{
unsigned char i;
unsigned char a;
a=0x10;
lcd_w_com(0x80);
delay_us(50);
for(i=0;i<16;i++)
{
lcd_w_dat(a);
delay_us(50);
a++;
}
}
______________________________主程序————————————————————————————————————————————
#include <stm32f10x_lib.h>
#include"sys.h"
#include"usart.h"
#include"delay.h"
#include"lcd12864.h"
int main(void)
{
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
Init(); //i/o口设置初始化
lcd_init(); //液晶初始化
JTAG_Set(JTAG_SWD_DISABLE);
while(1)
{
JTAG_Set(SWD_ENABLE);
lcd_display();
while(1);
}
}
|