新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC18F4521602簡單顯示規(guī)律

        PIC18F4521602簡單顯示規(guī)律

        作者: 時間:2018-07-31 來源:網(wǎng)絡(luò) 收藏

        本文主要介紹了PIC18F4521602簡單顯示規(guī)律的問題。

        本文引用地址:http://www.104case.com/article/201807/384692.htm

        1602液晶顯示器資料

        所謂1602是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。

        1. 1602液晶的正面(綠色背光,黑色字體)   2.1602液晶背面(綠色背光,黑色字體)   3.另一種1602液晶模塊,顯示屏是藍(lán)色背光白色字體

        字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,引腳定義。

        HD44780內(nèi)置了DDRAM、CGROM和CGRAM。

        A. DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個字節(jié).那么一行可有40個地址呀?是的,在1602中我們就用前16個就行了。第二行也一樣用前16個地址。

        若想要在LCD1602屏幕的第一行第一列顯示一個A字,就要向DDRAM的00H地址寫入“A”字的代碼就行了。這是一個令初學(xué)者很容易出錯的地方,原因就是如果你要想在DDRAM的00H地址處顯示數(shù)據(jù),則必須將00H加上80H,即80H,若要在DDRAM的01H處顯示數(shù)據(jù),則必須將01H加上80H即81H。依次類推。

        B. 1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形。字符代碼0x00~0x0F為用戶自定義的字符圖形RAM(對于5X8點陣的字符,可以存放8組,5X10點陣的字符,存放4組),就是CGRAM了。后面我會詳細(xì)說的。 0x20~0x7F為標(biāo)準(zhǔn)的ASCII碼,0xA0~0xFF為日文字符和希臘文字符,其余字符碼(0x10~0x1F及0x80~0x9F)沒有定義。

        D44780的指令集及其設(shè)置說明,共11條指令:

        1.清屏指令;2.光標(biāo)歸位指令;3.進(jìn)入模式設(shè)置指令;4.顯示開關(guān)控制指令;5.設(shè)定顯示屏或光標(biāo)移動方向指令;6.功能設(shè)定指令;7.設(shè)定CGRAM地址指令;8.設(shè)定DDRAM地址指令;9.讀取忙信號或AC地址指令;10.數(shù)據(jù)寫入DDRAM或CGRAM指令一覽;11.從CGRAM或DDRAM讀出數(shù)據(jù)的指令一覽

        程序編寫:1.初始化設(shè)置指令;2.寫指令帶忙檢測函數(shù);3.寫數(shù)據(jù)帶忙檢測函數(shù);4.寫地址坐標(biāo)函數(shù)。

        #include //調(diào)用頭文件,可以去PICC18軟件下去查找PIC18FXX2.H

        __CONFIG(1,XT) ; //晶振為外部4M

        __CONFIG(2,WDTDIS) ; //看門狗關(guān)閉

        __CONFIG(4,LVPDIS) ; //禁止低電壓編程

        #define RSPIN RB5 //0 input instrument;1 input data

        #define RWPIN RB4 //0 give LCD write instrument or data;1 read LCD information

        #define EPIN RB3 //1 read infor;1-0 action instrument

        //名稱: 1602檢測到忙

        void lcd_wait_busy(void)//RS R/W DB7 DB6~DB0

        {//讀取忙信號或AC地址信號:0 1 FB AC內(nèi)容7位

        //BF=1 表示液晶顯示忙,暫無法接受數(shù)據(jù)或指令

        TRISD7=1;//為讀狀態(tài)做準(zhǔn)備

        RSPIN=0;//選擇指令寄存器

        RWPIN=1;//選擇讀

        EPIN=1; //使能電平,1,讀信息

        while(RD7==1);//,BF=1表示液晶顯示器忙

        EPIN=0;

        TRISD7=0;

        }

        //名稱: 1602寫命令函數(shù)(帶忙檢測)

        void lcd_write_com_busy(unsigned char combuf)

        {

        lcd_wait_busy(); //調(diào)用忙檢測函數(shù)

        RSPIN=0;//input instrument

        RWPIN=0;//give LCD writing instrument or data

        PORTD=combuf;//command to PD

        EPIN=1;

        asm(NOP);

        EPIN=0;//1 to 0 action instrument

        }

        //名稱: 1602寫數(shù)據(jù)函數(shù)(帶忙檢測)

        void lcd_write_data_busy(unsigned char combuf)

        {

        lcd_wait_busy(); //調(diào)用忙檢測函數(shù)

        RSPIN=1;

        RWPIN=0;

        PORTD=combuf;

        EPIN=1;

        asm(NOP);

        EPIN=0;

        }

        //名稱: 1602寫給顯示地址函數(shù)

        void lcd_write_address(unsigned char x,unsigned char y)

        {

        x=0x0f; //列地址限制在0-15

        y=0x01; //行地址限制在0-1

        if(y==0x00)//送地址的時候應(yīng)該是0x80+Address

        lcd_write_com_busy(x|0x80); //第一行的列地址寫入

        else//second row 0x40

        lcd_write_com_busy((x+0x40)|0x80); //第二行的列地址寫入

        }

        //名稱: 指定地址寫入函數(shù)

        void lcd_write_char(unsigned char x,unsigned char y,unsigned char buf)

        {

        lcd_write_address(x,y); //寫入地址

        lcd_write_data_busy(buf); //寫入顯示數(shù)據(jù)

        }

        //初始化開始

        void lcdreset(void)

        {

        lcd_write_com_busy(0x38); //功能設(shè)定指令,設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。

        lcd_write_com_busy(0x08); //顯示開關(guān)控制指令,顯示功能關(guān),無光標(biāo)

        lcd_write_com_busy(0x01); //清屏指令

        lcd_write_com_busy(0x06); //進(jìn)入模式,每次定入1位數(shù)據(jù)后光標(biāo)右移,屏不移動

        lcd_write_com_busy(0x14); //設(shè)定顯示屏或光標(biāo)移動方向指令,寫入新的數(shù)據(jù)后,光標(biāo)右移,顯示屏不移動

        lcd_write_com_busy(0x0c); //顯示功能開,無光標(biāo),不閃爍

        }

        void main()

        {

        ADCON1=0X06; //所有IO均為數(shù)字口,模擬量輸入禁止

        TRISB=0B11000111; //RB3-5設(shè)置為輸出

        TRISD=0B00000000; //RD設(shè)置為輸出

        lcdreset();

        lcd_write_char(0,0,0x41); //A

        lcd_write_char(1,0,0x42); //B

        lcd_write_char(2,0,0x43); //C

        lcd_write_char(3,0,0x44); //D

        lcd_write_char(4,0,0x45); //E

        lcd_write_char(5,0,0x46); //F

        lcd_write_char(6,0,0x47); //G

        lcd_write_char(7,0,0x48); //H

        lcd_write_char(8,0,0x49); //I

        lcd_write_char(9,0,0x4A); //J

        lcd_write_char(10,0,0x4B); //K

        lcd_write_char(11,0,0x4C); //L

        lcd_write_char(12,0,0x4D); //M

        lcd_write_char(13,0,0x4E); //N

        while(1)

        {

        }

        }



        關(guān)鍵詞: 單片機

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 东丰县| 柳林县| 新蔡县| 米林县| 澄城县| 甘南县| 陇南市| 大连市| 乐平市| 同心县| 科技| 嵊州市| 福贡县| 陕西省| 绥德县| 米林县| 乡城县| 高要市| 公安县| 河曲县| 论坛| 刚察县| 璧山县| 温州市| 武夷山市| 游戏| 临高县| 苏尼特左旗| 虹口区| 图木舒克市| 伊金霍洛旗| 台东县| 全南县| 吴旗县| 二连浩特市| 荣昌县| 昭觉县| 景宁| 邮箱| 达拉特旗| 炉霍县|