📄 rt12232_avr.c
字号:
/*******************************************/
/* RT12232液晶在AVR单片机的驱动程序 */
/* 作者:匡炎 华南理工大学电信学院 */
/********************************************/
#include"iom16v.h"
#include"macros.h"
#define LCD_DATA PORTC
#define DATA_ATTR DDRC
#define LCD_CTRL PORTB
#define CTRL_ATTR DDRB
#define DATA_PIN PINC
#define RS 1
#define RW 2
#define E 3
void delayXms(int x)
{
unsigned char i;
while(x--)
{
for(i=0;i<250;i++);
}
}
void read_busy(void)
{ unsigned char busy;
DATA_ATTR=0X00;
do
{LCD_CTRL|=(1<<RW);//RW置1
LCD_CTRL&=~(1<<RS);//RS=0,写数据
LCD_CTRL|=(1<<E);
busy=DATA_PIN;
_NOP();
_NOP();
}
while(busy&0x80);
}
void write_data(unsigned char data)
{
read_busy();
DATA_ATTR=0xFF;
LCD_CTRL|=(1<<RS);//RS置1
LCD_CTRL&=~(1<<RW);//RW=0,写数据
LCD_DATA=data;
LCD_CTRL|=(1<<E);
_NOP();
_NOP();
_NOP();
_NOP();
LCD_CTRL&=~(1<<E);
}
void write_command(unsigned command)
{
read_busy();
DATA_ATTR=0xFF;
LCD_CTRL&=~(1<<RS);//RS置0
LCD_CTRL&=~(1<<RW);//RW=0,写命令
LCD_DATA=command;
LCD_CTRL|=(1<<E);
LCD_CTRL&=~(1<<E);
}
char read_data(void)
{
char data;
LCD_CTRL|=(1<<RS);//RS置1
LCD_CTRL|=(1<<RW);//RW=1,读数据
LCD_CTRL|=(1<<E);
data=LCD_DATA;
return data;
}
void display_HZ(unsigned char address,unsigned char data1,unsigned char data2)
//x_data--RAM地址,data1--汉字编码高8位,data2--汉字编码低8位
{
write_command(address);//指定显示地址
write_data(data1);//汉字编码高8位
write_data(data2);//汉字编码低8位
}
////发送一串字符数据//////
///set one string///
void write_string(unsigned char *temp)
{
while((*temp)!='\0' )
{
write_data(*temp);
temp++;
}
}
void clear(void)
{ write_command(0x01);
}
void disp_on(void)
{write_data(0x0d);
}
void lcd_initial()
{ DATA_ATTR=0xFF;
CTRL_ATTR=0XFF;
write_command(0x30);//功能设定:8位数据,基本指令30
//write_command(0x34);//扩充指令
//write_command(0x03);//允许卷动
write_command(0x06);//点设定:画面右移
write_command(0x0d);//lcd开,光标关
write_command(0x01);//清屏
write_command(0x02);//地址归位
write_string("欢迎使用");
delayXms(5000);
write_data('.');
delayXms(5000);
write_data('.');
delayXms(5000);
write_data('.');
delayXms(5000);
write_data('.');
delayXms(5000);
write_data('.');
delayXms(5000);
write_data('.');
clear();
}
void main()
{ unsigned char i;
CTRL_ATTR=0XFF;
DDRD=0XFF;
delayXms(5000);//延时
lcd_initial();
//write_command(0x80);//设定DDRAM起始地址
while(1) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -