天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234

如何使用pic16f877單片機在16×2字符LCD上顯示ASCII字符?

更新時間: 2019-11-07
閱讀量:3110

在單片機應用方案中開發中,想要在LCD顯示ASCII字符并不難。下面英銳恩單片機開發工程師們分享了一個使用pic16f877單片機在16×2字符LCD上顯示ASCII字符的方法。

QQ截圖20191107182807.png


在本文中,將使用pic16f877單片機在16×2 LCD上打印/顯示ASCII字符。Lcd以8位模式與pic單片機接口。代碼是用C語言編寫的。高科技C編譯器用于編譯代碼,并且代碼是在Mp-lab ide中編寫的。將16×2 LCD與pic單片機接口并在LCD上顯示字符非常容易。只有一點點復雜的部分是如何在LCD上生成/顯示ASCII字符。好了,你無需生成16×2 LCD控制器(HD44780)Ram中已經存在的ASCII字符,就像其他字符和數字一樣。你只需要知道如何調用將在LCD屏幕上顯示的ASCII字符。

一、該方案所需材料

(1)Microchip的pic16f877單片機;
(2)16×2字符LCD;
(3)20MHz晶振;
(4)電源供應;
(5)面包板或設計PCB(印刷電路板);
(6)電位器/可變電阻器(用于設置LCD對比度)。

如果你是單片機和LCD領域的新手,并且不了解LCD引腳輸出,LCD的工作原理和內部結構,那么請閱讀以下教程。他們會讓你了解16×2 LCD的工作原理。將學習如何在LCD上顯示字符?命令和發送到LCD的數據之間的區別?它還將說明如何在4位和8位模式下使用LCD。

該項目的電路圖如下。pic16f877單片機的端口B與16×2 LCD的數據引腳連接。這意味著端口B用于將命令和數據發送到16×2 LCD。使用端口D的各個位提供LCD控制信號(讀/寫,使能,寄存器選擇)。所有其他連接均為對單片機和LCD施加+5伏特的正常連接。你可以看到下面給出的電路圖。Rs(寄存器選擇)連接到端口D的引腳6。En(啟用)連接到端口D的針腳#7。讀/寫引腳接地。由于我們將R/W引腳接地,因此Lcd始終保持寫狀態。

ascii-characters-displayed.png


在代碼部分,我首先包含頭文件htc.h。如果你使用的是高科技C編譯器,則始終包含此庫,則此庫必須包含在將要使用高科技c編譯器進行編譯的每個項目中。它包含編譯器指令等。然后定義振蕩器的頻率為20 MHz。然后定義端口D的各個引腳。這些引腳用于向LCD提供控制信號。delay()函數用于在必要時生成一些任意延遲。lcdcmd()函數正在通過控制信號向lcd發送命令。display()函數正在使用控制信號將數據發送到LCD。lcdint()函數正在初始化我們的lcd(8位模式,顯示為開,光標關閉等)。

在主要功能中,有兩個指令正在調用ascii字符。指令i = j/10; 其中j是integer(int),而i是character(char)。現在,當我們將兩個整數相除并將結果保存在character(char)變量中時。結果以ascii格式存儲。由于j為0并用0除以10得到0。所以i包含0,ASCII值為零。

hd44780-ascii-characters-address.jpg

ASCII字符0存在于地址0x30。要轉到地址0x00,請從0x30取反0x30。指令i = i-0x30; 在做同樣的工作。在執行i = i-0x30之后,我首先包含0x30,而我包含0x00。因此,我們處于ASCII字符的起始地址。現在將地址一一遞增,并在LCD屏幕上顯示與該地址關聯的ascii字符。

值得注意的是,HD44780控制器的ASCII字符與標準ASCII字符不同。HD44780控制器包含右側給出的格式的ASCII字符。一些地址也無效。因此,當你在LCD屏幕上看到如下所示的字符時,請不要感到困惑。
RAM的16×2 LCD的總位數是256。所以我決定全部顯示。它包含ASCII、數字、字母和中文。如果地址無效,這些地址在LCD屏幕上將不會顯示任何內容。  

二、源代碼部分

#include <htc.h>
#define _XTAL_FREQ 20000000    //Oscillator frequency
#define en RD7                 //Lcd Controlling Pins
#define rs RD6
#define rw RD5

void delay(unsigned int time)  //Time delay function
{
unsigned int i,j;
for(i=0;i< time;i++)
for(j=0;j< 5;j++);
}

             //Function for sending values to the command register of LCD
void lcdcmd(unsigned char value)  
{
PORTB=value;
rs= 0;           //register select-rs 
rw = 0;          //read-write-rd
en = 1;          //enable-e
delay(50);
en=0;            //enable-e
delay(50);

}
             //Function for sending values to the data register of LCD
void display(unsigned char value)  
{
PORTB=value;
rs= 1;       //register select-rs 
rw= 0;       //read-write-rd
en= 1;       //enable-e
delay(500);
en=0;        //enable-e
delay(50);

}
             //function to initialize the registers and pins of LCD
             //always use with every lcd of hitachi
void lcdint(void)         
{
TRISB=0x00;    //Port 1 is used as output port             
TRISD5=0;      //Lcd Controlling pins as output
TRISD6=0;
TRISD7=0; 
delay(15000);
display(0x30);
delay(4500);
display(0x30);
delay(300);
display(0x30);
delay(650);
lcdcmd(0x38);
delay(50);
lcdcmd(0x0C);
delay(50);
lcdcmd(0x01);
delay(50);
lcdcmd(0x06);
delay(50);
lcdcmd(0x80);
delay(50);
}

void main()
{
char i;
unsigned int j,k;
j=0;k=0;
i=j/10;
i=i-0x30;
lcdint();

while(j!=255){
display(i);
j++;i++;k++;

if(k==15){         //Displaying characters on first line of lcd
lcdcmd(0xC0);
}

if(k==31){        //Displaying characters on second line of lcd
lcdcmd(0x80);
k=0;
lcdcmd(0x01);     //Clear Lcd
}

delay(12000);
}//End While

}


以上就是英銳恩單片機開發工程師分享的使用pic16f877單片機在16×2字符LCD上顯示ASCII字符的方法。英銳恩專注單片機應用方案設計與開發,提供8位單片機、16位單片機、32位單片機。

联系我们: 清新县| 丹江口市| 乡城县| 莫力| 菏泽市| 黄冈市| 休宁县| 衢州市| 宝清县| 共和县| 太康县| 汝城县| 上栗县| 鄄城县| 太和县| 府谷县| 呼图壁县| 宿迁市| 临猗县| 天水市| 高阳县| 凭祥市| 隆化县| 盘锦市| 上高县| 新营市| 蕉岭县| 宜阳县| 霍邱县| 七台河市| 宜兰县| 阿荣旗| 温州市| 合川市| 遂平县| 麻阳| 太康县| 扶风县| 遂平县| 新干县| 隆尧县|