lcd.c
#include "lcd.h"
unsigned char table[][16]={" "," "," "," "};
void write_lcd_zijie(unsigned char zijie)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(0x80&zijie)
RW_H;
else
RW_L;
E_H;
delay_us(10);
E_L;
delay_us(10);
zijie<<=1;
}
}
void write_lcd_cmd(unsigned char cmd)
{
write_lcd_zijie(0xf8);
write_lcd_zijie(0xf0&cmd);
write_lcd_zijie(cmd<<4);
}
void write_lcd_data(unsigned char data)
{
write_lcd_zijie(0xfa);
write_lcd_zijie(0xf0&data);
write_lcd_zijie(data<<4);
}
void lcd_xy(unsigned char x,unsigned char y)
{
switch(y)
{
case 0:write_lcd_cmd(0x80+x);break;
case 1:write_lcd_cmd(0x90+x);break;
case 2:write_lcd_cmd(0x88+x);break;
case 3:write_lcd_cmd(0x98+x);break;
}
}
void lcd_flushed()
{
unsigned char i,j;
for(i=0;i<4;i++)
{
lcd_xy(0,i);
for(j=0;j<16;j++)
{
if(table[i][j]!=0)
write_lcd_data(table[i][j]);
}
}
}
void lcd_init()
{
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0xFFFF0000;
GPIOA->CRL|=0x00003333;
RW_L;
RS_L;
E_L;
PSB_L;
RS_H;
delay_us(10);
write_lcd_cmd(0x01);
delay_us(10);
write_lcd_cmd(0x0c);
}
lcd.h
#ifndef __lcd_h
#define __lcd_h
#include "stm32f10x.h"
#include "delay.h"
#define RS_H GPIOA->ODR|=0x01
#define RW_H GPIOA->ODR|=0x02
#define E_H GPIOA->ODR|=0x04
#define PSB_H GPIOA->ODR|=0x08
#define RS_L GPIOA->BRR|=0x01
#define RW_L GPIOA->BRR|=0x02
#define E_L GPIOA->BRR|=0x04
#define PSB_L GPIOA->BRR|=0x08
void lcd_init(void);
void lcd_flushed(void);
void lcd_xy(unsigned char x,unsigned char y);
void write_lcd_data(unsigned char data);
void write_lcd_cmd(unsigned char cmd);
void write_lcd_zijie(unsigned char zijie);
extern unsigned char table[][16];
#endif