一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:Abhimanyu Pandit ? 2022-11-11 17:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

所需組件

阿特梅加16

16x2液晶模塊

運(yùn)動(dòng)員

面包板

poYBAGNuFgCAPtxzAAApmrSZMRU395.png

電路圖

poYBAGNuFgKAMsfuAABRYjVSthU814.png

poYBAGNuFgeAFMPNAAE4hBZh9uI552.jpg

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

編程不需要任何外部庫(kù)。在這里,

Atmega16使用USBASP和Atmel Studio7.0進(jìn)行編程

。項(xiàng)目結(jié)束時(shí)會(huì)給出

完整的程序和工作視頻

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

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

#include

#include

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

#define en PA3

#define rs PA2

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

#define lcdDirection DDRA

#define lcdPort PORTA

下一步是構(gòu)造一個(gè)函數(shù),該函數(shù)將通過(guò)傳遞參數(shù)來(lái)接受命令。有許多液晶屏十六進(jìn)制命令。十六進(jìn)制命令用于定義LCD的功能。由于我們使用LCD的4位模式,因此字節(jié)(8位)將以?xún)蓚€(gè)數(shù)據(jù)包發(fā)送。一個(gè)數(shù)據(jù)包將是上半字節(jié)(4位),另一個(gè)數(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端口。接收到的字符然后通過(guò)半字節(jié)發(fā)送到液晶屏半字節(jié)。該函數(shù)使用傳遞參數(shù)獲取字符,然后獲取上下半字節(jié)。對(duì)于數(shù)據(jù)寄存器,“rs”引腳設(shè)置為高電平,然后發(fā)送一個(gè)上升脈沖以鎖存數(shù)據(jù)。類(lèi)似地,通過(guò)更改使能值并發(fā)送使能的上升脈沖來(lái)發(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)換為字符串,以后可以在需要寫(xiě)入字符串的程序中使用。

void lcdString (char *str)

{

int j;

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

{

lcdChar (str[j]);

}

}

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

void lcdClear()

{

lcdCommand (0x01);

_delay_ms(2);

lcdCommand (0x80);

}

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

lcdDirection = 0xFF;

_delay_ms(20)

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

lcdCommand(0x02);

lcdCommand(0x28);

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

lcdCommand(0x0c);

lcdCommand(0x06);

lcdCommand(0x01);

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

lcdString("Interfacing LCD");

然后通過(guò)發(fā)送十六進(jìn)制命令 c0 將光標(biāo)移動(dòng)到下一行。最后在這個(gè)位置上,寫(xiě)下字符串“With Atmega16”。

lcdCommand(0xC0);

lcdString("With Atmega16");

pYYBAGNuFgmAFENKAACLRmO1FOo452.jpg

關(guān)于將16x2 LCD與Atmega16接口的完整教程到此結(jié)束。請(qǐng)注意,如果您沒(méi)有得到任何圖像或像素,請(qǐng)根據(jù)代碼和電路圖檢查接線(xiàn),或者更改連接到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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7953

    瀏覽量

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

    關(guān)注

    34

    文章

    4520

    瀏覽量

    171587
  • ATmega16
    +關(guān)注

    關(guān)注

    5

    文章

    154

    瀏覽量

    46496
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

    在本教程中,我們將了解如何將 16x2 LCD 與 ARM7-LPC2148 微控制器連接,顯示
    的頭像 發(fā)表于 10-28 17:12 ?2387次閱讀
    <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連接實(shí)現(xiàn)發(fā)送和接收消息

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

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

    在本教程中,我們學(xué)習(xí)如何將流行的DHT11傳感器與Raspberry Pi連接,并在16x2 LCD屏幕上
    的頭像 發(fā)表于 11-14 16:53 ?5996次閱讀
    <b class='flag-5'>如何將</b>DHT11與樹(shù)莓派<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 ?4330次閱讀
    <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)視器這是一個(gè)小項(xiàng)目,我需要能夠通過(guò)串行將簡(jiǎn)單文本顯示到便宜的 LCD
    發(fā)表于 08-19 06:16

    基于ATmega16的簡(jiǎn)易示波器設(shè)計(jì)

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

    AVR atmega16各功能程序

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

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

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

    ATmega16教程:DA,AD (2

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

    ATmega16教程:UART(2

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

    ATmega16教程(AVR單片機(jī)概述)

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

    基于ATMEGA16單片機(jī)實(shí)現(xiàn)LCD128x64顯示程序的資料合集免費(fèi)下載

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

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

    電子發(fā)燒友網(wǎng)站提供《如何連接和使用16x2 I2C LCD的教程.zip》資料免費(fèi)下載
    發(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èi)下載
    發(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èi)下載
    發(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>器