LCD12864三点式串行输入//=========================
#ifndef __12864_H
#define __12864_H
#include "sys.h"
#define uchar unsigned char
#define uint unsigned int
#define CLEAR_SCREEN 0x01
#define AC_INIT 0x02
#define CURSE_ADD 0x06
#define FUN_MODE 0x30
#define DISPLAY_ON 0x0c
#define DISPLAY_OFF 0x08
#define CURSE_DIR 0x14
#define SET_CG_AC 0x40
#define SET_DD_AC 0x80
#define LCD_CS GPIOB, GPIO_Pin_6 //PA0
#define LCD_DATA GPIOB, GPIO_Pin_7 //PA1
#define LCD_CLK GPIOB, GPIO_Pin_8 //PA2
// #define LCD_PSB GPIOA, GPIO_Pin_3
#define LCD_RST GPIOB, GPIO_Pin_9
void SendByte(uchar Dbyte);
void WriteCommand(uchar Cbyte );
void WriteData(uchar Dbyte );
uchar ReceiveByte(void);
void CheckBusy(void);
void LCD_GPIO_Config(void);
void lcd_init(void);
void LcmClearTXT( void );
void LcmClearBMP( void );
void LCD_ShowString(uchar row,uchar col,uchar *puts);
void PutBMP(uchar *puts);
void DisplayDots(uchar DotByte);
#endif
#include "12864.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
uchar const TABLE[]=
{
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,
};
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i<8;i++)
{
GPIO_ResetBits(LCD_CLK);
if(Dbyte&0x80)
GPIO_SetBits(LCD_DATA);
else
GPIO_ResetBits(LCD_DATA);
Dbyte=Dbyte<<1;
delay_us(10);
GPIO_SetBits(LCD_CLK);
delay_us(10);
GPIO_ResetBits(LCD_CLK);
delay_us(10);
}
}
uchar ReceiveByte(void)
{
uchar i,temp1,temp2;
temp1 = 0;
temp2 = 0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
GPIO_ResetBits(LCD_CLK);
delay_us(10);
GPIO_SetBits(LCD_CLK);
delay_us(10);
GPIO_ResetBits(LCD_CLK);
if(GPIO_ReadInputDataBit(LCD_DATA)) temp1++;
}
for(i=0;i<8;i++)
{
temp2=temp2<<1;
GPIO_ResetBits(LCD_CLK);
delay_us(5);
GPIO_SetBits(LCD_CLK);
delay_us(5);
GPIO_ResetBits(LCD_CLK);
if(GPIO_ReadInputDataBit(LCD_DATA)) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}
void CheckBusy(void)
{
do SendByte(0xfc);
while(0x80&ReceiveByte());
}
void WriteCommand(uchar Cbyte )
{
GPIO_SetBits(LCD_CS);
delay_ms(1);
SendByte(0xf8);
SendByte(0xf0&Cbyte);
SendByte(0xf0&Cbyte<<4);
GPIO_ResetBits(LCD_CS);
delay_ms(2);
}
void WriteData(uchar Dbyte )
{
GPIO_SetBits(LCD_CS);
delay_ms(1);
SendByte(0xfa);
SendByte(0xf0&Dbyte);
SendByte(0xf0&Dbyte<<4);
GPIO_ResetBits(LCD_CS);
delay_ms(2);
}
void LCD_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //对结构体的GPIO_Pin对象赋值,声明要操作的是1,2,3,4端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//对结构体的GPIO_Mode对象赋值,声明IO口的模式是输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
}
void lcd_init(void)
{
LCD_GPIO_Config();
delay_ms(5);
// GPIO_ResetBits(LCD_PSB); //L 串口方式
GPIO_ResetBits(LCD_RST); // 复位端,低电位有效
delay_ms(100);
GPIO_SetBits(LCD_RST);
delay_ms(5);
WriteCommand(0x30);
WriteCommand(0x30);
WriteCommand(0x0C);
WriteCommand(0x01);
delay_ms(20);
WriteCommand(0x06);
}
void LcmClearTXT( void )
{
uchar i;
WriteCommand(0x30);
WriteCommand(0x80);
for(i=0;i<64;i++)
WriteData(0x20);
}
void LcmClearBMP( void )
{
uchar i,j;
WriteCommand(0x34);
WriteCommand(0x36);
for(i=0;i<32;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80);
for(j=0;j<32;j++)
WriteData(0);
}
}
void LCD_ShowString(uchar row,uchar col,uchar *puts)
{
WriteCommand(0x30);
WriteCommand(TABLE[8*row+col]);
while(*puts != ' ')
{
if(col==8)
{
col=0;
row++;
}
if(row==4) row=0;
WriteCommand(TABLE[8*row+col]);
WriteData(*puts);
puts++;
WriteData(*puts);
puts++;
col++;
}
}
void PutBMP(uchar *puts)
{
uint x=0;
uchar i,j;
WriteCommand(0x34);
WriteCommand(0x36);
for(i=0;i<32;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80);
for(j=0;j<32;j++)
{
WriteData(puts[x]);
x++;
}
}
}
void DisplayDots(uchar DotByte)
{
uchar i,j;
WriteCommand(0x34);
WriteCommand(0x36);
for(i=0;i<32;i++)
{
WriteCommand(0x80|i);
WriteCommand(0x80);
for(j=0;j<32;j++)
{
WriteData(DotByte);
}
DotByte=~DotByte;
}
}
一周热门 更多>