0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將16x2 LCD與Atmega16 AVR連接并顯示簡單的歡迎消息

科技觀察員 ? 來源:circuitdigest ? 作者:Abhimanyu Pandit ? 2022-11-11 17:29 ? 次閱讀

顯示器是任何機器的必要部分,無論是任何家用電器還是工業(yè)機器。顯示屏不僅顯示操作機器的控制選項,還顯示該機器執(zhí)行的任務(wù)的狀態(tài)和輸出。電子產(chǎn)品中使用的顯示器類型很多,如 7 段顯示器、16x2 LCD 顯示器、TFT 觸摸屏顯示器、OLED 顯示器等。

16x2 LCD顯示器是最基本的顯示模塊,也用于一些小型電子設(shè)備,如計算器,數(shù)字儀表等。

在本教程中,我們將了解如何將16x2 LCD 與 Atmega16 AVR 微控制器連接并顯示簡單的歡迎消息。

所需組件

阿特梅加16

16x2液晶模塊

運動員

面包板

poYBAGNuFgCAPtxzAAApmrSZMRU395.png

電路圖

poYBAGNuFgKAMsfuAABRYjVSthU814.png

poYBAGNuFgeAFMPNAAE4hBZh9uI552.jpg

用于 16x2 LCD 顯示器的 Atmega16 編程

編程不需要任何外部庫。在這里,

Atmega16使用USBASP和Atmel Studio7.0進行編程

。項目結(jié)束時會給出

完整的程序和工作視頻

,只需在 Atmega16 中上傳程序并旋轉(zhuǎn) 10k POT 即可調(diào)整 LCD 的亮度。

首先定義 CPU 頻率,并包含 Atmel Studio 軟件包附帶的必要庫,例如用于訪問 IO 引腳的 和用于在程序中生成延遲的 。

#include

#include

在程序中定義LCD的RS和EN引腳。RS 引腳用于選擇數(shù)據(jù)和命令寄存器。使能引腳鎖存數(shù)據(jù)。

#define en PA3

#define rs PA2

還要定義Atmega16的哪個端口將用于連接LCD。這里,使用了PORTA。

#define lcdDirection DDRA

#define lcdPort PORTA

下一步是構(gòu)造一個函數(shù),該函數(shù)將通過傳遞參數(shù)來接受命令。有許多液晶屏十六進制命令。十六進制命令用于定義LCD的功能。由于我們使用LCD的4位模式,因此字節(jié)(8位)將以兩個數(shù)據(jù)包發(fā)送。一個數(shù)據(jù)包將是上半字節(jié)(4位),另一個數(shù)據(jù)包將是下半字節(jié)(4位)。

void lcdCommand( unsigned char commands )

{

lcdPort = (lcdPort & 0x0F) | (commands & 0xF0);

lcdPort &= ~ (1<

lcdPort |= (1<

_delay_us(1);

lcdPort &= ~ (1<

_delay_us(200);

lcdPort = (lcdPort & 0x0F) | (commands << 4);

lcdPort |= (1<

_delay_us(1);

lcdPort &= ~ (1<

_delay_ms(2);

}

下一步是接受字符并將其鎖定到LCD端口。接收到的字符然后通過半字節(jié)發(fā)送到液晶屏半字節(jié)。該函數(shù)使用傳遞參數(shù)獲取字符,然后獲取上下半字節(jié)。對于數(shù)據(jù)寄存器,“rs”引腳設(shè)置為高電平,然后發(fā)送一個上升脈沖以鎖存數(shù)據(jù)。類似地,通過更改使能值并發(fā)送使能的上升脈沖來發(fā)送較低的半字節(jié)。

void lcdChar( unsigned char string )

{

lcdPort = (lcdPort & 0x0F) | (string & 0xF0);

lcdPort |= (1<

lcdPort|= (1<

_delay_us(1);

lcdPort &= ~ (1<

_delay_us(200);

lcdPort = (lcdPort & 0x0F) | (string << 4); ??

lcdPort |= (1<

_delay_us(1);

lcdPort &= ~ (1<

_delay_ms(2);

}

此函數(shù)只是將字符轉(zhuǎn)換為字符串,以后可以在需要寫入字符串的程序中使用。

void lcdString (char *str)

{

int j;

for(j=0;str[j]!=0;j++)

{

lcdChar (str[j]);

}

}

現(xiàn)在編寫一個函數(shù)只是為了清除屏幕。您只需要在十六進制中發(fā)送命令 01,然后將光標設(shè)置為初始位置即可。

void lcdClear()

{

lcdCommand (0x01);

_delay_ms(2);

lcdCommand (0x80);

}

現(xiàn)在在主功能中,LCD已初始化。最初將液晶屏的端口方向設(shè)置為接口。在這里,端口設(shè)置為輸出,因此設(shè)置 FF。

lcdDirection = 0xFF;

_delay_ms(20)

然后通過以十六進制發(fā)送 02 將 LCD 設(shè)置為 4 位模式。同時以十六進制發(fā)送 28,以將其設(shè)置為 4 位模式下的 2 行 15x7 矩陣像素。

lcdCommand(0x02);

lcdCommand(0x28);

命令 0c 和 06 用于控制光標位置。最后只需通過發(fā)送十六進制 01 來清除屏幕。這將完成LCD的初始化。

lcdCommand(0x0c);

lcdCommand(0x06);

lcdCommand(0x01);

初始化完成后,只需發(fā)送字符串來測試液晶屏。在這里,我們在 1 中發(fā)送一個字符串“接口 LCD”圣排。

lcdString("Interfacing LCD");

然后通過發(fā)送十六進制命令 c0 將光標移動到下一行。最后在這個位置上,寫下字符串“With Atmega16”。

lcdCommand(0xC0);

lcdString("With Atmega16");

pYYBAGNuFgmAFENKAACLRmO1FOo452.jpg

關(guān)于將16x2 LCD與Atmega16接口的完整教程到此結(jié)束。請注意,如果您沒有得到任何圖像或像素,請根據(jù)代碼和電路圖檢查接線,或者更改連接到LCDV0引腳的POT的值。

/*

LCD16x2 4 bit ATmega16 interface

CircuitDigest(www.circuitdigest.com)

*/



#define F_CPU 16000000UL // Define CPU Frequency here it 16MHz

#include // Include AVR std. library file

#include // Include Delay header file



#define en PA3 // Define Enable pin

#define rs PA2 // Define Register Select pin

#define lcdDirection DDRA // Define LCD data direction port

#define lcdPort PORTA //Define LCD data port







void lcdCommand( unsigned char commands ) // commands will be sent from this function

{

lcdPort = (lcdPort & 0x0F) | (commands & 0xF0); // send upper nibble of 8 bit

lcdPort &= ~ (1<
lcdPort |= (1<
_delay_us(1);

lcdPort &= ~ (1<


_delay_us(200);



lcdPort = (lcdPort & 0x0F) | (commands << 4); // sending lower nibble of 8 bit i.e 1byte

lcdPort |= (1<
_delay_us(1);

lcdPort &= ~ (1<
_delay_ms(2);

}



void lcdChar( unsigned char string )

{

lcdPort = (lcdPort & 0x0F) | (string & 0xF0); // send upper nibble

lcdPort |= (1<
lcdPort|= (1<
_delay_us(1);

lcdPort &= ~ (1<


_delay_us(200);



lcdPort = (lcdPort & 0x0F) | (string << 4); //send lower nibble?

lcdPort |= (1<
_delay_us(1);

lcdPort &= ~ (1<
_delay_ms(2);

}





void lcdString (char *str) // convert char to string fucntion

{

int j;

for(j=0;str[j]!=0;j++)

{

lcdChar (str[j]);

}

}



void lcdClear()

{

lcdCommand (0x01); // send hex 01 to Clear display

_delay_ms(2);

lcdCommand (0x80); // send hex 80 to Cursor at home position

}



int main()

{

// start Initializing 16x2 LCD

lcdDirection = 0xFF; // set LCD port direction in output

_delay_ms(20); // keep LCD Power ON delay >15ms always



lcdCommand(0x02); // send for 4 bit initialization of LCD

lcdCommand(0x28); // 2 line, 5*7 matrix in 4-bit mode

lcdCommand(0x0c); // Display on cursor off

lcdCommand(0x06); // take curson to next position (shift cursor to right)

lcdCommand(0x01); // Clear display screen

_delay_ms(2); //little delay



lcdString("Interfacing LCD"); // Write string on 1st row of 16x2 LCD

lcdCommand(0xC0); // move to 2nd row

lcdString("With Atmega16"); // write string on second line

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7454

    瀏覽量

    150850
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4405

    瀏覽量

    166930
  • ATmega16
    +關(guān)注

    關(guān)注

    5

    文章

    154

    瀏覽量

    45750
收藏 人收藏

    評論

    相關(guān)推薦

    16x2 LCD與ARM7-LPC2148連接顯示文字

    在本教程中,我們將了解如何將 16x2 LCD 與 ARM7-LPC2148 微控制器連接,顯示
    的頭像 發(fā)表于 10-28 17:12 ?1895次閱讀
    <b class='flag-5'>將</b><b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b>與ARM7-LPC2148<b class='flag-5'>連接</b><b class='flag-5'>并</b><b class='flag-5'>顯示</b>文字

    如何將GSM模與ATmega16連接實現(xiàn)發(fā)送和接收消息

    在本教程中,我們學(xué)習(xí)如何將GSM模塊(SIM900A)與AVR微控制器ATmega16連接,
    的頭像 發(fā)表于 11-10 15:57 ?2178次閱讀
    <b class='flag-5'>如何將</b>GSM模與<b class='flag-5'>ATmega16</b><b class='flag-5'>連接</b>實現(xiàn)發(fā)送和接收消息

    如何將DHT11與樹莓派連接16x2 LCD屏幕上顯示溫度和濕度的值

    在本教程中,我們學(xué)習(xí)如何將流行的DHT11傳感器與Raspberry Pi連接,并在16x2 LCD屏幕上
    的頭像 發(fā)表于 11-14 16:53 ?4126次閱讀
    <b class='flag-5'>如何將</b>DHT11與樹莓派<b class='flag-5'>連接</b>在<b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b>屏幕上<b class='flag-5'>顯示</b>溫度和濕度的值

    MPU6050與Raspberry Pi連接顯示16x2 LCD值的步驟

    今天在本文中,我們將將此MPU6050與Raspberry Pi連接,顯示16x2 LCD上的值。
    的頭像 發(fā)表于 11-17 16:42 ?3349次閱讀
    <b class='flag-5'>將</b>MPU6050與Raspberry Pi<b class='flag-5'>連接</b><b class='flag-5'>并</b><b class='flag-5'>顯示</b><b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b>值的步驟

    串行顯示LCD 16x2監(jiān)視器

    描述串行顯示 LCD 16x2 監(jiān)視器這是一個小項目,我需要能夠通過串行將簡單文本顯示到便宜的 LCD
    發(fā)表于 08-19 06:16

    基于ATmega16的簡易示波器設(shè)計

    介紹了以AVR單片機ATmega16為核心,采用前端信號調(diào)理電路、程控增益放大器以及波形顯示LCD(GDM12864A)實現(xiàn)的一個簡易示波器。
    發(fā)表于 12-25 16:12 ?275次下載

    AVR atmega16各功能程序

    AVR單片機中atmega16各功能程序,大家可以借鑒,都是自己積累的 希望可以幫助到大家
    發(fā)表于 07-29 15:32 ?17次下載

    ATmega16教程:鍵盤原理與應(yīng)用(2)

    ATmega16教程5-2
    的頭像 發(fā)表于 07-11 00:18 ?3275次閱讀

    ATmega16教程:DA,AD (2

    ATmega16教程8-2
    的頭像 發(fā)表于 07-11 00:49 ?3932次閱讀

    ATmega16教程:UART(2

    ATmega16教程10-2
    的頭像 發(fā)表于 07-11 00:29 ?4019次閱讀

    ATmega16教程(AVR單片機概述)

    ATmega16教程2
    的頭像 發(fā)表于 07-10 04:16 ?1.5w次閱讀

    基于ATMEGA16單片機實現(xiàn)LCD128x64顯示程序的資料合集免費下載

    本文檔的主要內(nèi)容詳細介紹的是基于ATMEGA16LCD128x64顯示程序資料合集免費下載。
    發(fā)表于 10-16 09:29 ?8次下載
    基于<b class='flag-5'>ATMEGA16</b>單片機實現(xiàn)<b class='flag-5'>LCD128x</b>64<b class='flag-5'>顯示</b>程序的資料合集免費下載

    如何連接和使用16x2 I2C LCD的教程

    電子發(fā)燒友網(wǎng)站提供《如何連接和使用16x2 I2C LCD的教程.zip》資料免費下載
    發(fā)表于 11-22 14:36 ?0次下載
    如何<b class='flag-5'>連接</b>和使用<b class='flag-5'>16x2</b> I<b class='flag-5'>2</b>C <b class='flag-5'>LCD</b>的教程

    如何將16x2 LCD與Raspberry pi4連接

    電子發(fā)燒友網(wǎng)站提供《如何將16x2 LCD與Raspberry pi4連接.zip》資料免費下載
    發(fā)表于 06-19 11:45 ?0次下載
    <b class='flag-5'>如何將</b><b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b>與Raspberry pi4<b class='flag-5'>連接</b>

    如何連接16x2 LCD顯示

    電子發(fā)燒友網(wǎng)站提供《如何連接16x2 LCD顯示器.zip》資料免費下載
    發(fā)表于 07-12 09:21 ?0次下載
    如何<b class='flag-5'>連接</b><b class='flag-5'>16x2</b> <b class='flag-5'>LCD</b><b class='flag-5'>顯示</b>器