16X2 LCD與PIC單片機的接口
在本節課中,我們將看到如何將16×2的LCD連接到PIC18F4550微控制器,PIC18F系列微控制器。你可以在 "如何將16X2 LCD與8051單片機連接 "一節中獲得關(guān)于16X2 LCD的信息。
本文引用地址:http://dyxdggzs.com/article/202305/447122.htmPIC18F4550的特點(diǎn):
PIC18F4550屬于PIC18F系列;PIC18F4550是一個(gè)8位微控制器,使用RISC架構。PIC18F4550在PDIP(雙列封裝)中有40個(gè)引腳,在TQFP(四列扁平封裝)中有44個(gè)引腳。
PIC18F4550中嵌入了32KB的閃存,2048字節的SRAM(同步隨機存取存儲器),256字節的EEPROM(電可擦除程序只讀存儲器)。
它有35個(gè)I/O引腳用于與其他外設的接口和通信,13個(gè)通道的10位模擬到數字轉換器用于與模擬外設(直流電動(dòng)機、LDR等)的接口和通信。
它有2個(gè)CCP和1個(gè)ECCP模塊,即增強型捕獲和比較模塊,主要用于調制和波形生成功能。CCP模塊由16位寄存器組成,作為16個(gè)捕獲位寄存器,16個(gè)比較位寄存器,以及PWM和占空比寄存器工作。
PIC18F4550具有SPI(串行外設接口)和i2c(集成電路間)的主從模式。它有SPP(流式并行端口)用于USB流式傳輸。
PIC18F4550嵌入了4個(gè)定時(shí)器模塊(定時(shí)器0至定時(shí)器3),2個(gè)比較器模塊和3個(gè)外部中斷。它有雙振蕩器選項,允許微控制器和USB模塊以不同的時(shí)鐘速度運行。它可以在2.0V到5.5V的電壓下運行。
16X2 LCD接口的PIC微控制器電路圖:
16X2 LCD與PIC單片機的連接 - 電路解析:
電阻器R1用于為L(cháng)CD提供對比度。12MHz的晶體振蕩器被連接到PIC微控制器PIC18F4550的OSC1和OSC2引腳,用于系統時(shí)鐘。電容器C2和C3將作為晶體振蕩器的過(guò)濾器。你可以使用不同的端口或引腳來(lái)連接LCD,在使用不同的端口之前,請檢查數據表,這些引腳是通用的還是特殊功能引腳。
對PIC進(jìn)行編程以連接16X2的LCD:
將LCD連接到PIC與連接到8051沒(méi)有區別。編程的基本概念和要點(diǎn)幾乎是一樣的。請訪(fǎng)問(wèn)以下鏈接了解更多信息:https://www.electronicshub.org/interfacing-16×2-lcd-8051/。
只有用于接口的引腳、寄存器和結構會(huì )有所不同。當我們看程序時(shí),像初始化、向LCD發(fā)送數據的功能幾乎是一樣的。
在pic編程中,為了初始化LCD,R/W引腳應該是低電平,用于寫(xiě)入數據,使能引腳應該是高電平,寄存器選擇引腳(RS)應該是高電平,用于寫(xiě)入數據。對于發(fā)送命令,RS應該是低電平,R/W引腳應該是低電平,使能引腳應該是高電平。
初始化LCD功能:
lcdcmd(0x38);//將LCD配置為8位模式,2行,5×7字體。
lcdcmd(0x0C);//開(kāi)啟顯示,關(guān)閉光標
lcdcmd(0x01);//清除顯示屏幕
lcdcmd(0x06);// 遞增光標
lcdcmd(0x80);//設置光標位置為第一行第一列
向LC發(fā)送命令:
rs=0; 寄存器選擇引腳為低電平。
rw=0;讀/寫(xiě)引腳也用于向LCD寫(xiě)命令。
en=1;使能引腳為高電平。
發(fā)送數據到LCD:
rs=1;寄存器選擇引腳為高電平。
rw=0;讀/寫(xiě)引腳也用于向LCD寫(xiě)入命令。
en=1;使能引腳為高電平。
編程的步驟:
在您的系統中安裝MPLAB并創(chuàng )建一個(gè)新的項目,在選擇設備和系列時(shí),選擇PIC18F系列并將PIC18F4550控制器添加到您的項目中。
選擇你已經(jīng)安裝的編譯器,并將文件添加到你的項目中。添加文件后,粘貼下面的代碼并運行它。因為它是一個(gè)預先編譯和測試過(guò)的程序,你不會(huì )發(fā)現任何錯誤。
在編譯程序沒(méi)有錯誤后,使用PICKIT2或PICKIT3編程器/調試器將程序轉入你的開(kāi)發(fā)板。
如果你沒(méi)有使用PICKIT,那么只需編譯代碼并制作HEX文件,使用這個(gè)HEX文件為PIC微控制器編程。
將LCD連接到PIC18F4550的程序:
#define rs LATA.F0
#define rw LATA.F1
#define en LATA.F2
//LCD Data pins
#define lcdport LATB
void lcd_init();
void lcdcmd(unsigned char);
void lcddata(unsigned char);
unsigned char data[20]=”hello world”;
unsigned int i=0;
void main(void)
{
TRISA=0; // Configure Port A as output port
LATA=0;
TRISB=0; // Configure Port B as output port
LATB=0;
lcd_init(); // LCD initialization
while(data[i]!=’国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放