⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_19264.c~

📁 按键是比较复杂。可以用状态机表示。 每10mS执行一次键盘扫描任务 0、无键
💻 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 + -