新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 1602自定義字符顯示攝氏度符號

        1602自定義字符顯示攝氏度符號

        作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
        LCD1602的數(shù)據(jù)寫入及CGRAM的使用
        1.當使能端E由1變?yōu)?時,執(zhí)行寫指令,數(shù)據(jù)被寫入。
        例如,欲寫入數(shù)據(jù)i到DDRAM:
        void WDR(uchar i)
        {
        CheckBusy();//檢忙
        LCD_RS=1;
        LCD_RW=0;
        LCD_EN=0;
        Delay();
        LCD_DATA=i;//數(shù)據(jù)輸出到定義端口
        Delay();
        LCD_EN=1;
        Delay();
        LCD_EN=0;//這一步才開始寫入到LCD
        Delay();
        }
        2.CGRAM
        1602能存儲8個自定義字符,這8個自定義字符存儲空間的首地址分別是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。
        以0x40來說,它的存儲空間如圖所示:

        如果使用5*7字符的話,那么最左3位和最后一行的數(shù)據(jù)實際上是沒用的,通常置0。如果要自定義一個℃符號,那么先填框,如圖(紅1白0):
        這樣我們就得到每個地址需要寫入的數(shù)據(jù):
        地址:數(shù)據(jù)
        0x40:0x16
        0x41:0x09
        0x42:0x08
        其他類推。將這8個數(shù)據(jù)寫入到對應地址即可。
        使用時,先確定顯示的位置,例如0X80,然后向DDRAM寫入自定義字符的使用代碼。0X40-0X78對應為0X00-0X07。
        本例中,先寫入指令寄存器0X80確定顯示位置為第一行第一個,然后寫入數(shù)據(jù)寄存器0X00,這樣就會在第一行第一個位置顯示出℃符號。


        以下是源程序如果網(wǎng)頁格式導致部分字符丟失請下載c程序源文件:http://www.51hei.com/f/avr1602c.rar
        #include
        #include
        #define u8 uchar unsigned char
        #define u16 uchar unsigned int
        #define uchar unsigned char
        #define uint unsigned int
        uchar zi[]={0x16,0x09,0x08,0x08,0x08,0x09,0x06,0x00}; //自定義字符攝氏度

        #include"1602.h"
        #include"18b20.h"

        void port_init()
        {
        PORTA=0xff;
        DDRA=0xff;
        PORTB=0xff;
        DDRB=0xff;
        PORTC=0xff;
        DDRC=0xff;
        PORTD=0xff;
        DDRD=0x00;
        }
        void setzi() //把設(shè)定字存入CGRAM
        {
        uchar i;
        writecmd(0x40); //設(shè)置第一個字的起始地址
        for(i=0;i<8;i++)
        {
        writedata(zi[i]);
        }
        }

        void show_temp(uint k)
        {
        displayonechar(1,1,(k/100)+48);
        displayonechar(2,1,(k%100/10)+48);
        displayonechar(3,1,.);
        displayonechar(4,1,(k%10)+48);
        }
        void main()
        {
        uint TT; //顯示的溫度值
        port_init();
        delay(1000);
        init1602();
        displaychar(0,0,"Set zi Test");
        setzi();
        displayonechar(5,1,0x00); //0x00表示 0x40地址的值
        while(1)
        {
        TT=read_temper();
        show_temp(TT);
        }
        }
        //---------------1602.h----------------
        #define RS PORTB_Bit0
        #define RW PORTB_Bit1
        #define EN PORTB_Bit2
        #define DATA PORTA
        #define busy 0x80
        void delay(uint k)
        {
        uint i,j;
        for(i=0;ifor(j=0;j<1140;j++);

        }

        void wait()
        {
        uchar val;
        DATA=0xff;
        RS=0;
        RW=1;
        __no_operation();
        __no_operation();
        EN=1;
        __no_operation();
        __no_operation();
        DDRA=0x00;
        val=PINA;
        while(val&busy)
        {
        val=PINA;
        }
        EN=0;
        DDRA=0xff;
        }

        上一頁 1 2 下一頁

        關(guān)鍵詞: 1602自定義字符攝氏度符

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 贵阳市| 通州区| 呈贡县| 乾安县| 友谊县| 兴安县| 沙河市| 布尔津县| 禹州市| 嘉禾县| 原阳县| 蓝山县| 罗田县| 灵川县| 犍为县| 巫溪县| 仙居县| 行唐县| 屏东市| 色达县| 阳江市| 当涂县| 桑日县| 淮阳县| 新河县| 赤水市| 庆安县| 林芝县| 兴国县| 贵阳市| 曲周县| 胶州市| 康乐县| 杨浦区| 大邑县| 习水县| 高台县| 定兴县| 苏尼特左旗| 泾川县| 桂林市|