色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          1602自定義字符顯示攝氏度符號(hào)

          作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
          LCD1602的數(shù)據(jù)寫(xiě)入及CGRAM的使用
          1.當(dāng)使能端E由1變?yōu)?時(shí),執(zhí)行寫(xiě)指令,數(shù)據(jù)被寫(xiě)入。
          例如,欲寫(xiě)入數(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;//這一步才開(kāi)始寫(xiě)入到LCD
          Delay();
          }
          2.CGRAM
          1602能存儲(chǔ)8個(gè)自定義字符,這8個(gè)自定義字符存儲(chǔ)空間的首地址分別是:0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。
          以0x40來(lái)說(shuō),它的存儲(chǔ)空間如圖所示:

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


          以下是源程序如果網(wǎng)頁(yè)格式導(dǎo)致部分字符丟失請(qǐ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è)置第一個(gè)字的起始地址
          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;
          }

          上一頁(yè) 1 2 下一頁(yè)

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

          評(píng)論


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

          關(guān)閉