📄 lcm1602avr动.c
字号:
/************************************************************
函数名:1602驱动函数。
编写:邓椿薪
日期:2006年4月29日
引脚定义:数据总线==>PORTB; En==>PD0; R/W==>PD1; RS==>PD2;
/***********************************************************/
#include<avr/io.h>
#define LCDPORT PORTB //数据总线接在PB口
#define LCDDDR DDRB
#define LCDPIN PINB
#define En_H PORTD|=(1<<PD0) //En接PD0
#define En_L PORTD&=~(1<<PD0)
#define RW_R PORTD|=(1<<PD1) //R/W接PD1
#define RW_W PORTD&=~(1<<PD1)
#define RS_H PORTD|=(1<<PD2) //RS接PD2
#define RS_L PORTD&=~(1<<PD2)
#define DelaytE Delay(10) //延时
/*****************延时程序**********************/
void Delay(unsigned char time)
{
while(time>0)
{time--;}
}
/****************产生一个使能脉冲****************/
void En_Toggle(void)
{
En_H;
DelaytE;
En_L;
DelaytE;
}
/*******************检查LCD忙标志****************/
void Wait_Until_Ready(void)
{
RW_R;
RS_L;
LCDDDR=0x00;
LCDPORT=0x00;
En_H;
DelaytE;
loop_until_bit_is_clear(LCDPIN,7); //不断循环检查忙标志。
En_L;
}
/***************写入命令字****************/
void Write_Command(unsigned char Command)
{
RW_W;
RS_L;
LCDDDR=0xFF;
LCDPORT=Command; //发送数据
En_Toggle(); //使能1602
Wait_Until_Ready(); //查忙
}
/****************写入数据(地址)************************/
void Write_Data(unsigned char Data)
{
RW_W;
RS_H;
LCDDDR=0xFF;
LCDPORT=Data; //发送地址
En_Toggle(); //使能1602
Wait_Until_Ready(); //查忙
}
/************************设置字符位置**********************/
void Write_Positlon(unsigned char row,unsigned char colum)
{
unsigned char p;
if(row==1)
{
p=colum-1; //上面一例
Write_Command(p); //写入命令
}
else
{
p=0xc0+colum-1; //下面一例
Write_Command(p);
}
}
/********************写字符串*******************************/
void Write_String(unsigned char *s)
{
for(; *s!='\0';s++) //
{
Write_Data(*s); //写入数据
}
}
/*********************lcd初始化*****************************/
void Initialize_LCD(void)
{
DDRD=0xff; //LCD的控制线接在PD口,所以将其设为输出
//此处可根据实际情况调整,或者在主程序中设置
Write_Command(0x38); //设为8位接口模式,显示2行字符
DelaytE;
Write_Command(0x38); //设为8位接口模式,显示2行字符
DelaytE;
Write_Command(0x38); //设为8位接口模式,显示2行字符
DelaytE;
Write_Command(0x06); //写入新数据后光标右移
DelaytE;
Write_Command(0x0c); //显示功能开,不显示光标
DelaytE;
Write_Command(0x01); //清屏
}
unsigned char uchar[]={"www.89s51DIY.com"};
unsigned char uchar1[]={"mcu-DIY web"};
int main (void)
{
DDRA=0xff;
PORTA=0x00;
DDRD=0xff; //设置为输出
PORTD=0x00;
DDRB=0xff;
PORTB=0x00;
DDRC=0x00; //设为输入
PORTC=0x0F; //低四位上拉有效
Initialize_LCD(); //LCD初始化
while(1)
{
Write_Positlon(1,0); //第一行,第一例
Write_String(uchar); //显示:
Write_Positlon(2,2); //第二行,第三例
Write_String(uchar1); //显示
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -