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);
-
- }
- }
主函数
存在一个问题:
编译器里面不能写中文?也就无法显示中文信息了
效果:
LCD的源码
LCD.rar
(2.49 KB, 下载次数: 0)
接一个显示设备,在做其他的功能就比较方面了
|