#include "stm32f10x.h"
#include "delay.h"
#include "lcd12864.h"
#include "string.h"
//Ò»×Ö·ûÕ¼Ò»×Ö½Ú Ò»×Ö½ÚÕ¼8λ
//µ±Ê±ÖÓÏßΪµÍʱ Êý¾Ý¸Ä±ä²Å»áÓÐЧ Ϊ¸ßʱ Êý¾Ý±£³Ö²»±ä
//LCDµÄµØÖ·
u8 LCD_addr[4][8]={
{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87}, //µÚÒ»ÐÐ
{0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97}, //µÚ¶þÐÐ
{0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F}, //µÚÈýÐÐ
{0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F} //µÚËÄÐÐ
};
//Êý¾Ý´«Êä 8×Ö½Ú 1010 1110
void SendByte(u8 byte)
{
u8 i;
for(i = 0;i < 8;i++)
{
if((byte << i) & 0x80) //0x80(1000 0000) Ö»»á±£Áô×î¸ßλ
{
sid = 1; // Òý½ÅÊä³ö¸ßµçƽ£¬´ú±í·¢ËÍ1
}
else
{
sid = 0; // Òý½ÅÊä³öµÍµçƽ£¬´ú±í·¢ËÍ0
}
/*»ò
sid = (Dbyte << i) & 0x80;
ÉÏÃæÄÇÑùΪÁË·½±ãÀí½â
*/
sclk = 0; //ʱÖÓÏßÖÃµÍ ÔÊÐísid±ä»¯
delay_us(5); //ÑÓʱʹÊý¾ÝдÈë
sclk = 1; //À¸ßʱÖÓ£¬Èôӻú¶Ásid
}
}
//дÃüÁî
void Lcd_WriteCmd(u8 Cmd)
{
delay_ms(1); //ÓÉÓÚÎÒÃÇûÓÐдLCDÕýæµÄ¼ì²â£¬ËùÒÔÖ±½ÓÑÓʱ1ms£¬Ê¹Ã¿´ÎдÈëÊý¾Ý»òÖ¸Áî¼ä¸ô´óÓÚ1ms ±ã¿É²»ÓÃдæ״̬¼ì²â
SendByte(WRITE_CMD); //11111,RW(0),RS(0),0 дÁ¬Ðø5¸öÒ»²ÅÄÜʱÖÓͬ²
//¿ªÊ¼Êý¾Ý´«Êä»òÃüÁî´«Êä
//Êý¾Ý±»²ð·Ö³É2×Ö½Ú´«Êä
SendByte(0xf0&Cmd); //¸ßËÄλ 1111 0000
SendByte(Cmd<<4); //µÍËÄλ(ÏÈÖ´ÐÐ<<)ÏÈÓÒÒÆ4λ ºóÃæ4λ×Ô¶¯²¹0
}
//дÊý¾Ý
void Lcd_WriteData(u8 Dat)
{
delay_ms(1); //ÓÉÓÚÎÒÃÇûÓÐдLCDÕýæµÄ¼ì²â£¬ËùÒÔÖ±½ÓÑÓʱ1ms£¬Ê¹Ã¿´ÎдÈëÊý¾Ý»òÖ¸Áî¼ä¸ô´óÓÚ1ms ±ã¿É²»ÓÃдæ״̬¼ì²â
SendByte(WRITE_DAT); //11111,RW(0),RS(1),0
SendByte(0xf0&Dat); //¸ßËÄλ
SendByte(Dat<<4); //µÍËÄλ(ÏÈÖ´ÐÐ<<)
}
//LCD Êý¾Ý/ʱÖÓ Òý½Å¶¨Òå
void lcd_GPIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//Òý½Å½á¹¹Ì嶨Òå
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ʹÄÜGPIOEʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÆÕͨÊä³öģʽ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯
sid = 1;
sclk=1;
RS=1;
}
//LCD³õʼ»¯
void Lcd_Init(void)
{
delay_ms(50); //µÈ´ýÒº¾§×Լ죨ÑÓʱ>40ms£©
Lcd_WriteCmd(0x30); //¹¦ÄÜÉ趨:Ñ¡Ôñ»ù±¾Ö¸Á £¬Ñ¡Ôñ8bitÊý¾ÝÁ÷
delay_ms(1);//ÑÓʱ>137us
Lcd_WriteCmd(0x0c); //¿ªÏÔʾ
delay_ms(1); //ÑÓʱ>100us
Lcd_WriteCmd(0x01); //Çå³ýÏÔʾ£¬²¢ÇÒÉ趨µØÖ·Ö¸ÕëΪ00H
delay_ms(30); //ÑÓʱ>10ms
Lcd_WriteCmd(0x06); //ÿ´ÎµØÖ·×Ô¶¯+1£¬³õʼ»¯Íê³É
}
//lCD´«ÊäÏÔʾÊý¾Ý
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t *str)
{
Lcd_WriteCmd(LCD_addr[x][y]); //д³õʼ¹â±êλÖÃ
while(*str>0)//×Ö·ûһλһλµÄ´«Êä
{
Lcd_WriteData(*str); //дÊý¾Ý
str++;
}
}
void LCD_Clear(void)//ÇåÆÁº¯Êý
{
Lcd_WriteCmd(0x01); //ÇåÆÁÖ¸Áî
delay_ms(2); //ÑÓʱÒÔ´ýÒº¾§Îȶ¨¡¾ÖÁÉÙ1.6ms¡¿
}
#ifndef _LCD_H
#define _LCD_H
#include "stm32f10x.h"
#include "sys.h"
#define WRITE_CMD 0xF8//дÃüÁî ֮ǰÏÈд0x80 1111 1 RW/0 RS/0 0 д ÃüÁî
#define WRITE_DAT 0xFA//дÊý¾Ý ֮ǰÏÈд0xFA 1111 1 0 1 0 дÊý¾Ý
//R/WÊý¾Ý Ϊ¸ßʱºò ¶ÁÊý¾Ý ΪµÍµÄʱºòΪ дÊý¾Ý
//Rs ΪÊý¾ÝÃüÁîµÄѡͨ¶Ë¿Ú 1 ʱ Êý¾Ýλ 0 ʱ ÃüÁîλ
// En ʹÄÜÐźŠʱÖÓÏß
//Êý¾Ýλ²Ù×÷ÊÇRSΪ¸ßµçƵ RS=1 ²ÅÄܶÔÊý¾Ý¶Áд²Ù×÷²Ù×÷
// RS=1 µÄÌõ¼þÏ R/w =1 ½øÐжÁÊý¾Ý²Ù×÷
// R/w =0 дÊý¾Ý²Ù×÷
//PSBΪ´®ÐÐģʽ 0ʱºòΪ´®ÐÐģʽ
//Rst ¸´Î»
//vo Ϊ±³¹âÌõ¼þ Ò»°ãΪ¸ßµçƵ
//Vout ¸ºµçѹ
//´®ÐÐÖг䵱Êý¾ÝÏß R/W EN³äµ±Ê±ÖÓÏß
#define sid PAout(4)
#define sclk PAout(5)
#define RS PAout(6)
void SendByte(u8 byte);
void Lcd_WriteCmd(u8 Cmd);
void Lcd_WriteData(u8 Dat);
void lcd_GPIO_init(void);
void Lcd_Init(void);
void LCD_Display_Words(uint8_t x,uint8_t y,uint8_t *str);
void LCD_Clear(void);
#endif
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "lcd12864.h"
int main(void)
{
delay_init();
lcd_GPIO_init();
Lcd_Init();
LCD_Display_Words(2,0,"dj:");
LCD_Display_Words(3,0,"zj:");
Lcd_WriteCmd(0x03);
Lcd_WriteData(0x30);
while(1)
{
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话: