将16x2 LCD接口到AVR微控制器

本届会议完全处理了与16x2 LCD的接口AVR微控制器(ATMEGA 16)。ATMEGA16属于AVR微控制器家族。

接口16x2 LCD的电路图与AVR微控制器:

接口16x2 LCD到AVR微控制器电路图

电路说明:

  • 好吧,这与将LCD接口的方式没有什么不同8051或PIC微控制器。晶体振荡器将为微控制器提供时钟。连接到晶体的电容器将充当过滤器,并帮助晶体谐振并振荡其平行共振模式。
  • 连接到LCD的引脚3和PIN2的电位计将有助于调整LCD的对比度。LCD的4、5和6引脚选择,读取/写入和启用引脚已连接到ATMEGA16的PD0,PD1和PD2引脚。LCD的数据引脚连接到33至40个ATMEGA16的引脚。

编程Atmega16与16x2 LCD接口:

您可以从帖子中获取LCD的简短信息从8051微控制器接口16×2。正如我之前说的那样,使用微控制器的引脚和寄存器,基本的基础都是相同的期望。

数据如何发送到LCD以及如何将命令发送到LCD非常重要,假设如果您将数据发送到LCD,则必须将16×2 LCD PIN的启用引脚置于低调之前数据,当您认为要发送的数据准备就绪时,将启用引脚再次高出编码语言。如果您使启用销较高,则只有LCD可以工作。

仅通过使启用引脚高就无法正常工作,您就可以使用寄存器选择PIN(RS PIN)也很高,因此LCD会接受它是正常数据,如果您忘了制作RS,则必须在LCD屏幕上显示它PIN HIGH最终认为用户正在向其发送命令,并使其自我准备根据命令行动,例如使光标移动,清除LCD上的数据,更改光标位置等。

最后但并非最不重要的一点是您需要担心读/写引脚,我们都知道,对于任何设备,基本功能从读取,读取数据和编写数据开始,数据是任何外围或系统的主要功能。在LCD中发送用于显示的数据时,您必须将R/W引脚低点,以便LCD在lcd下,该数据应将数据写在LCD屏幕上并采取相应的作用。

仅发送数据并显示其将无法完成任务;对于程序员而言,以可理解的方式安排数据是重要的至关重要的任务。您可以将数据排列在LCD中或使LCD根据您的愿望工作,可以通过将命令或特殊功能发送到LCD来完成,您可能会认为需要哪种类型的命令用于LCD,命令光标位置,增加或减少对比度,使光标变为从第一行到第二行等更改线等。将命令发送到LCD,您需要将销钉高高和低点,就像发送数据一样。对于发送命令,您需要使启用引脚高,请登记为“ PIN销”(RS PIN)低为0中的PIN(RS PIN),然后读/写PIN(R/W PIN)高,您需要记住此配置以发送命令。

在显示数据时,程序员通常使用不同的命令和十六进制代码。

sno
LCD的说明
十六进制代码
1
如果要在5x7矩阵中的一行中显示内容
0x30
2
如果要在5x7矩阵中以两行中的两行显示内容
0x38
3
如果您在5x7矩阵中的一行中显示4位数据
0x20
4
如果您在5x7矩阵中的两行中显示4位数据
0x28
5
进入模式
0x06
6
在不清除RAM内容的情况下清除显示屏
0x08
7
使光标打开并显示
0x0e
8
使光标关闭并显示
0x0c
9
显示光标闪烁的数据
0x0f
10
将完整的显示数据转移到左侧
0x18
11
将完整的显示数据转移到右侧
0x1c
12
将光标移到一个地方或一个角色
0x10
13
将光标移至一个地方或一个字符
0x14
14
清除包括RAM数据的完整显示
0x01
15
将DDRAM地址设置在光标位置
0x80+添加

如果我们想简要介绍以在LCD中显示数据

  • E = 1;启用针应高
  • Rs = 1;注册选择应该很高
  • r/w = 0;读/写别针应该很低。

用于将命令发送到LCD

  • E = 1;启用针应高
  • rs = 0;注册选择应低
  • r/w = 1;读/写别针应该很高。

当您传递字符串时,它可以更好地使用字符串指针并递增指针,如果您要递增指针,它将自动获取变量的下一个地址,您可以在其中存储要显示的字符。请参阅下面的示例。

void write_string(unsigned char *str)//指针中的字符串的商店地址值 *str

{

int i = 0;

while(strng [i]!=’\ 0')//循环将继续进行直到字符串中的空字符

{
lcd_write(strng [i]); //通过字节发送LCD字节上的数据
i ++;
}
返回;

}

将LCD连接到ATMEGA16的代码:

LCD数据端口----端口B
信号端口------端口D
RS ------- PD0
RW ------- PD1
EN ------- PD2
*/

#define lcd_data portb // LCD数据端口
#define ctrl portd
#define en pd2 //启用信号
#Define RW PD1 //读/写信号
#Define RS PD0 //注册选择信号

void lcd_cmd(unsigned char cmd);
void init_lcd(void);
void lcd_write(无符号char数据);

int main()
{
ddrb = 0xff;//设置端口B
DDRD = 0x07;//设置端口D
init_lcd();// LCD的初始化
_delay_ms(50);//延迟50 mili秒
lcd_write_string(“ Hello World”);//函数要在LCD上打印字符串
返回0;
}

void init_lcd(void)
{
LCD_CMD(0x38);//在8位模式下16x2 LCD的初始化
_delay_ms(1);
LCD_CMD(0x01);//清除LCD
_delay_ms(1);
lcd_cmd(0x0e);//光标启动
_delay_ms(1);
LCD_CMD(0x80);// - 8转到第一行,–0是0位置
_delay_ms(1);
返回;
}

void lcd_cmd(未签名的char cmd)
{
lcd_data = cmd;
ctrl =(0 << rs)|(0 << rw)|(1 << en);
_delay_ms(1);
ctrl =(0 << rs)|(0 << rw)|(0 << en);
_delay_ms(50);
返回;
}

void lcd_write(无符号炭数据)
{
lcd_data = data;
ctrl =(1 << rs)|(0 << rw)|(1 << en);
_delay_ms(1);
ctrl =(1 << rs)|(0 << rw)|(0 << en);
_delay_ms(50);
返回 ;
}

void lcd_write_string(unsigned char *str)//指针中的字符串的商店地址值 *str
{
int i = 0;
while(str [i]!=’\ 0')//循环将继续进行直至字符串中的null字符
{
lcd_write(str [i]);//通过字节发送有关LCD字节的数据
i ++;
}
返回;
}

3个回应

  1. 说得好!- 我在Wiki中读到了这个概念,我觉得与Wiki相比,这篇文章中提供的信息具有很好的内容。谢谢!

  2. 和代码…

    #包括
    #包括

    #define f_cpu 1000000uul

    #define lcd_data portd //数据端口
    #define ctrl portc //控制端口
    #define en pc3 //启用端口和销钉
    #Define RW PC2 //读/写端口和销钉
    #Define RS PC1 //注册选择端口和PIN

    void lcd_cmd(unsigned char cmd);
    void init_lcd(void);
    void lcd_write(无符号char数据);
    void lcd_write_string(char *str);

    int main()
    {
    ddrd = 0xff;//设置输出端口D
    DDRC = 0B00001110;//设置端口C的输出

    init_lcd();// LCD的初始化
    _delay_ms(100);//延迟50 mili秒
    lcd_write_string(“ Andrej !!! 111”);//函数要在LCD上打印字符串

    而(1)
    {
    }
    返回0;
    }

    void init_lcd(void)
    {
    LCD_CMD(0x01);//清除LCD
    _delay_ms(1);
    LCD_CMD(0x38);//在8位模式下16x2 LCD的初始化
    _delay_ms(1);
    lcd_cmd(0x0e);//光标启动
    _delay_ms(1);
    LCD_CMD(0x80);// - 8转到第一行,–0是0位置
    _delay_ms(1);
    返回;
    }

    void lcd_cmd(未签名的char cmd)
    {
    lcd_data = cmd;
    ctrl =(0 << rs)|(0 << rw)|(1 << en);
    _delay_ms(1);
    ctrl =(0 << rs)|(0 << rw)|(0 << en);
    _delay_ms(50);
    返回;
    }

    void lcd_write(无符号炭数据)
    {
    lcd_data = data;
    ctrl =(1 << rs)|(0 << rw)|(1 << en);
    _delay_ms(1);
    ctrl =(1 << rs)|(0 << rw)|(0 << en);
    _delay_ms(50);
    返回 ;
    }

    void lcd_write_string(char *str)
    {
    int i = 0;
    while(str [i]!='')//循环将继续进行直到字符串中的null字符
    {
    lcd_write(str [i]);//通过字节发送有关LCD字节的数据
    i ++;
    }
    返回;
    }

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map