📄 lcd_19264.c~
字号:
#include <avr/io.h>
#include <util/delay.h>
#define SET_BIT(BYTE, BIT) ((BYTE) |= (1<<(BIT)))
#define CLR_BIT(BYTE, BIT) ((BYTE) &= ~(1<<(BIT)))
#define LCD_CTRL_PORT PORTA
#define LCD_CTRL_PIN PINA
#define LCD_CTRL_DDR DDRA
#define RS PA0
#define RW PA1
#define EN PA2
#define LCD_DATA_PORT PORTB
#define LCD_DATA_PIN PINB
#define LCD_DATA_DDR DDRB
#define SET_LCD_DATA_INPUT() ((LCD_DATA_DDR) = 0)
#define SET_LCD_DATA_OUTPUT() ((LCD_DATA_DDR) = 0xff)
#define SET_LCD_RS() SET_BIT(LCD_CTRL_PORT, RS)
#define SET_LCD_RW() SET_BIT(LCD_CTRL_PORT, RW)
#define SET_LCD_EN() SET_BIT(LCD_CTRL_PORT, EN)
#define CLR_LCD_RS() CLR_BIT(LCD_CTRL_PORT, RS)
#define CLR_LCD_RW() CLR_BIT(LCD_CTRL_PORT, RW)
#define CLR_LCD_EN() CLR_BIT(LCD_CTRL_PORT, EN)
void LCD12864_Busy_Wait(void)
{
CLR_LCD_RS();
SET_LCD_RW();
SET_LCD_DATA_INPUT();
do{
SET_LCD_EN();
_delay_us(10);
CLR_LCD_EN();
}while(LCD_DATA_PIN & 0x80);
SET_LCD_DATA_OUTPUT();
}
void LCD12864_WriteCMD(unsigned char cmd)
{
LCD12864_Busy_Wait();
CLR_LCD_RS();
CLR_LCD_RW();
SET_LCD_EN();
LCD_DATA_PORT = cmd;
_delay_us(1);
CLR_LCD_EN();
}
void LCD12864_WriteData(unsigned char wdata)
{
LCD12864_Busy_Wait();
SET_LCD_RS();
CLR_LCD_RW();
SET_LCD_EN();
LCD_DATA_PORT = wdata;
_delay_us(1);
CLR_LCD_EN();
}
void LCD12864_Init(void)
{
// IO 初始化, rs,rw,en为输出
// DB7~DB0 输出 ,而且全部输出0
LCD_CTRL_PORT = 0;
LCD_DATA_PORT = 0;
LCD_DATA_DDR = 0xff;
LCD_CTRL_DDR |= (1<<RS) | (1<<RW) | (1<<EN);
_delay_ms(100);
LCD12864_WriteCMD(0x01);
LCD12864_WriteCMD(0x0c);
LCD12864_WriteCMD(0x06);
}
/* x: 第几列 y: 第几行 */
void LCD12864_Set_XY(unsigned char x, unsigned char y)
{
unsigned char address;
switch(y){
case 0:
address = 0x80 + x;
break;
case 1:
address = 0x90 + x;
break;
case 2:
address = 0x88 + x;
break;
case 3:
address = 0x98 + x;
break;
default:
address = 0x80 + x;
break;
}
LCD12864_WriteCMD(address);
return;
}
void LCD12864_PutChar(unsigned char x, unsigned char y,char c)
{
LCD12864_Set_XY(x, y);
LCD12864_WriteData(c);
return;
}
void LCD12864_PutString(unsigned char x, unsigned char y, char *str)
{
LCD12864_Set_XY(x,y);
while(*str){
LCD12864_WriteData(*str++);
_delay_ms(1);
}
return;
}
int main(void)
{
LCD12864_Init();
LCD12864_WriteCMD(0x01); // 清屏
LCD12864_PutString(1,0, "张家界航院");
while(1){
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -