MM32 eMiniBoard 接入LCD12864
采用并行接口方式
.h 文件
#define LCD_CS GPIO_Pin_13
#define LCD_SID GPIO_Pin_14
#define LCD_SCK GPIO_Pin_15
#define LCD_GPIO GPIOC
#define SET_CS do {GPIO_SetBits(LCD_GPIO ,LCD_CS );} while (0)
#define SET_SID do {GPIO_SetBits(LCD_GPIO ,LCD_SID);} while (0)
#define SET_SCK do {GPIO_SetBits(LCD_GPIO ,LCD_SCK);} while (0)
#define CLR_CS do {GPIO_ResetBits(LCD_GPIO ,LCD_CS );} while (0)
#define CLR_SID do {GPIO_ResetBits(LCD_GPIO ,LCD_SID );} while (0)
#define CLR_SCK do {GPIO_ResetBits(LCD_GPIO ,LCD_SCK );} while (0)
void LCD_GPIO_Init(void);
extern void delay_s(unsigned int i);
extern void w_bit(char en);
extern void w_byte(char byt);
extern void init_lcd(void);
extern void Lcd_w_com(char data);
extern void Lcd_w_dat(char data);
extern void lcd_pos(char x,char y);
extern void clr_screen(void);
extern void photodis(char *bmp);
extern void lcdflag(void);
.c 文件
#include "LCD12864.h"
extern void delay_ms(__IO uint32_t nTime);
/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £ºLED_Init(void)
**¹¦ÄÜÃèÊö £ºLED³õʼ»¯
**ÊäÈë²ÎÊý £ºÎÞ
**Êä³ö²ÎÊý £ºÎÞ
********************************************************************************************************/
void LCD_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); //¿ªÆôGPIOA,GPIOBʱÖÓ
GPIO_InitStructure.GPIO_Pin = LCD_CS|LCD_SID|LCD_SCK;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_GPIO, &GPIO_InitStructure);
}
#if 0
void delay_us(unsigned int i)
{
char j = 0;
for(j=50;j>0;j--)
for( ;i>0;i--);
//hile(i--);
}
void delay_ms(unsigned int i)
{
for( ;i>0;i--)
{
delay_us(1000);
}
}
#endif
void delay_s(unsigned int i)
{
for( ;i>0;i--)
{
delay_ms(1000);
}
}
void w_bit(char en)
{
if(en==1)
{
SET_SID;
SET_SCK;
delay_ms(1);
CLR_SCK;
}
else
{
CLR_SID;
SET_SCK;
delay_ms(1);
CLR_SCK;
}
}
void w_byte(char byt)
{
char j1 = 0;
for(j1=0;j1<8;j1++)
{
w_bit(((byt)>>(7-j1))&0x01);
delay_ms(1);
}
}
void init_lcd(void)
{
delay_ms(1);
Lcd_w_com(0x34);
delay_ms(5);
Lcd_w_com(0x30);
delay_ms(5);
Lcd_w_com(0x0c);
delay_ms(5);
Lcd_w_com(0x01);
delay_ms(5);
}
void Lcd_w_com(char data)
{
CLR_CS;
SET_CS;
CLR_SCK;
SET_SID;
delay_ms(1);
w_byte(0xf8);
w_byte(data&0xf0);
w_byte(data<<4);
delay_ms(1);
CLR_CS;
}
void Lcd_w_dat(char data)
{
CLR_CS;
SET_CS;
CLR_SCK;
SET_SID;
delay_ms(1);
w_byte(0xfa);
w_byte(data&0xf0);
w_byte(data<<4);
delay_ms(1);
CLR_CS;
}
/*char readbyte(void)
{
char data;
CLR_CS;
SET_CS;
CLR_SCK;
SET_SID;
delay_us(10);
w_byte(0xfe);
}*/
void lcd_pos(char x,char y)
{
char pos;
if(x==1)
{
x=0x80;
}
else if(x==2)
{
x=0x90;
}
else if(x==3)
{
x=0x88;
}
else if(x==4)
{
x=0x98;
}
pos=x+y;
Lcd_w_com(pos);
}
void clr_screen(void)
{
Lcd_w_com(0x34);
delay_ms(5);
Lcd_w_com(0x30);
delay_ms(5);
Lcd_w_com(0x01);
delay_ms(5);
}
void photodis(char *bmp)
{
char x1,y1;
Lcd_w_com(0x34);
for(x1=0;x1<32;x1++)
{
Lcd_w_com(0x80+x1); //ÏÈдÈëˮƽ×ø±êÖµ
Lcd_w_com(0x80); //дÈë´¹Ö±×ø±êÖµ
for(y1=0;y1<16;y1++) //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
Lcd_w_dat(*bmp++);
delay_ms(1);
}
for(x1=0;x1<32;x1++)
{
Lcd_w_com(0x80+x1); //ÏÈдÈëˮƽ×ø±êÖµ
Lcd_w_com(0x88); //дÈë´¹Ö±×ø±êÖµ
for(y1=0;y1<16;y1++) //ÔÙдÈëÁ½¸ö8λԪµÄÊý¾Ý
Lcd_w_dat(*bmp++);
delay_ms(1);
}
Lcd_w_com(0x36); //дÍêÊý¾Ý,¿ªÍ¼ÐÎÏÔʾ
}
void hdis(char data,char x,char y)
{
}
void lcdflag(void)
{
Lcd_w_com(0x08);
delay_ms(5);
Lcd_w_com(0x0c);
delay_ms(5);
Lcd_w_com(0x08);
delay_ms(5);
Lcd_w_com(0x0c);
delay_ms(5);
Lcd_w_com(0x08);
delay_ms(5);
Lcd_w_com(0x0c);
delay_ms(5);
Lcd_w_com(0x01);
delay_ms(5);
}
/*
void draw_dots(char x0,char y0,char color)
{
char row,xlab,xlab_bit;
//char read_h,read_l;
Lcd_w_com(0x34);
Lcd_w_com(0x36);
xlab=x0>>4;
xlab_bit=x0&0x0f;
if(y0<32)
{
row=y0;
}
else
{
row=y0-32;
xlab+=8;
}
Lcd_w_com(row+0x80);
Lcd_w_com(xlab+0x80);
// readbyte();
//read_h=readbyte();
// read_l=readbyte();
Lcd_w_com(row+0x80);
Lcd_w_com(xlab+0x80);
if(xlab_bit<8)
{
switch(color)
{
case 0:read_h&=(~(0x01<<(7-xlab_bit)));break;
case 1:read_h|=(0x01<<(7-xlab_bit));break;
case 2:read_h^=(0x01<<(7-xlab_bit));break;
default:break;
}
// Lcd_w_dat(read_h);
// Lcd_w_dat(read_l);
}
else
{
switch(color)
{
case 0:read_h&=(~(0x01<<(15-xlab_bit)));break;
case 1:read_h|=(0x01<<(15-xlab_bit));break;
case 2:read_h^=(0x01<<(15-xlab_bit));break;
default:break;
}
// Lcd_w_dat(read_h);
// Lcd_w_dat(read_l);
}
}
主函数
#include "delay.h"
#include "sys.h"
#include "led.h"
#include "LCD12864.h"
const char dis1[]={" eMiniBoard "};
const char dis2[]={"MB-023 MM32L073 "};
const char dis3[]={" INSIGHT "};
const char dis4[]={" 21IC : YUFENG "};
const char dis5[]={" THANK YOU! "};
/********************************************************************************************************
**º¯ÊýÐÅÏ¢ £ºmain(void)
**¹¦ÄÜÃèÊö £º
**ÊäÈë²ÎÊý £ºÎÞ
**Êä³ö²ÎÊý £ºÎÞ
********************************************************************************************************/
int main(void)
{
unsigned char s;
delay_init();
LED_Init();
LCD_GPIO_Init();
init_lcd();
clr_screen();
while(1) //ÎÞÏÞÑ»·
{
//LED1_TOGGLE();
//LED2_TOGGLE();
//LED3_TOGGLE();
//LED4_TOGGLE();
//delay_ms(300);
clr_screen();
Lcd_w_com(0x80);
for(s=0;s<16;s++)
{
Lcd_w_dat(dis1[s]);
}
Lcd_w_com(0x34);
delay_ms(1);
Lcd_w_com(0x04);
Lcd_w_com(0x30);
Lcd_w_com(0x90);
for(s=0;s<16;s++)
{
Lcd_w_dat(dis2[s]);
}
Lcd_w_com(0x88);
for(s=0;s<16;s++)
{
Lcd_w_dat(dis3[s]);
}
Lcd_w_com(0x98);
for(s=0;s<16;s++)
{
Lcd_w_dat(dis4[s]);
}
delay_s(5);
lcdflag();
//clr_screen();
//Lcd_w_com(0x34);
//Lcd_w_com(0x04);
//Lcd_w_com(0x05);
//Lcd_w_com(0x06);
//Lcd_w_com(0x07);
//delay_s(5);
clr_screen();
Lcd_w_com(0x80);
for(s=0;s<16;s++)
{
Lcd_w_dat(0x30+s);
}
Lcd_w_com(0x90);
for(s=0;s<16;s++)
{
Lcd_w_dat(0x40+s);
}
Lcd_w_com(0x88);
for(s=0;s<16;s++)
{
Lcd_w_dat(0x50+s);
}
Lcd_w_com(0x98);
for(s=0;s<16;s++)
{
Lcd_w_dat(0x60+s);
}
delay_s(5);
lcdflag();
clr_screen();
}
}
存在一个问题:
编译器里面不能写中文?也就无法显示中文信息了
效果:
LCD的源码
LCD.rar
(2.49 KB)
接一个显示设备,在做其他的功能就比较方面了
|