<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 128*64液晶采用“單片機內(nèi)部顯示緩沖“的程序

          128*64液晶采用“單片機內(nèi)部顯示緩沖“的程序

          作者: 時間:2016-11-17 來源:網(wǎng)絡 收藏
          /*

          *
          *文件名稱:
          *摘要:讀寫lcd顯示緩沖區(qū)
          *
          *當前版本:v1.0
          *作者:laoliu2008
          *完成日期:2008年4月12日

          */

          #i nclude
          #i nclude<全局變量.h>


          unsignedcharxx,yy;//全局插入點坐標

          externconstunsignedcharcharacter_tab[][17];//顯示數(shù)據(jù)庫
          externconstunsignedcharChinese_characters_tab[][34];//顯示數(shù)據(jù)庫

          unsignedcharlcd_bit_buffer[8][128];//顯示緩沖區(qū)

          //************************************
          //lcd初始化
          //7___________________________
          //|||
          //|||
          ///||||
          //||||
          //||||
          //||||
          //Y|_____________|_____________|
          //|
          //0----------->數(shù)學坐標:x127
          //
          //文字坐標:0_____
          //||
          //||
          //|-----|
          //||
          //|_____|
          //可以在任意點顯示漢字字符
          //首先調(diào)用w_xx_yy();寫入要顯示的字符在屏幕位置坐標(文字坐標為左上角)調(diào)用dis_buffer();顯示一個漢字或英文
          //dis_lcd_buffer()顯示字符串Y地址自動右移8或16顯示字符串可以自動保持一行
          //坐標自動循環(huán)例如你在右下角x=119y=7的地方顯示一個漢字這個漢字的3/4將會出現(xiàn)在屏幕的左上角
          //字庫16*16英文16*8文字的坐標參考點選則左上角即所說的在x=119y=7所說的是字符的左上角坐標
          //************************************
          //***********************************
          //初始化緩沖區(qū)
          //***********************************
          voidlcd_buffer_ini()
          {
          unsignedcharx,y;
          unsignedchartemp;


          for(y=8;y>0;y--)//清零緩沖區(qū)
          for(x=128;x>0;x--)
          lcd_bit_buffer[y-1][x-1]=0;

          xx=0;
          yy=0;

          }
          //*******************************
          //顯示輸出
          //*******************************
          voiddis_out_lcd()
          {

          unsignedcharx0,y0;
          unsignedchartemp;
          for(y0=8;y0>0;y0--)
          {
          w_lcd_address(y0-1,0);
          for(x0=128;x0>0;x0--)
          {

          w_lcd_data(lcd_bit_buffer[y0-1][x0-1]);//調(diào)用顯示函數(shù)
          }
          }

          }

          //********************************
          //到xxyy寫一點
          //********************************
          unsignedcharwb_lcd_bit_buffer()
          {
          unsignedchartemp;
          unsignedchary1,y2;
          //xxyy
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          temp|=(1<lcd_bit_buffer[y2][xx]=temp;
          }
          }
          //********************************
          //到xxyy擦一點
          //********************************
          unsignedcharn_wb_lcd_bit_buffer()
          {
          unsignedchartemp;
          unsignedchary1,y2;
          //xxyy
          if((yy>63))
          return0;
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          temp&=~(1<lcd_bit_buffer[y2][xx]=temp;

          }
          //********************************
          //寫顯示地址xxyy
          //********************************
          voidw_xx_yy(unsignedcharx,unsignedchary)
          {
          xx=x%128;
          yy=y%64;
          }

          //***********************************
          //取反一個點
          //***********************************
          voidcpl_dian()
          {

          unsignedchartemp;
          unsignedchary1,y2;
          //xxyy

          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          temp^=(1<lcd_bit_buffer[y2][xx]=temp;

          }
          //*******************************
          //取反一個英文字符
          //*******************************
          voidcpl_asc()
          {
          unsignedchari,j;
          unsignedcharx_x,y_y;
          unsignedchartemp_data,y;

          unsignedchartemp;
          unsignedchary1,y2;
          x_x=xx;
          y=y_y=yy;//保存y軸

          i=8;//顯示字模8*16
          while(i--)
          {

          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行

          temp=lcd_bit_buffer[y2][xx];//寫一個點不調(diào)用函數(shù)減少調(diào)用浪費的系統(tǒng)時間
          temp^=(1<lcd_bit_buffer[y2][xx]=temp;

          //yy=(yy+64-1)%64;//修正y地址
          yy=(yy+63)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;

          }

          y=yy;//顯示下半個字

          xx=x_x;//寫x_x到xx
          i=8;//顯示字模8*16
          while(i--)
          {

          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行

          temp=lcd_bit_buffer[y2][xx];
          temp^=(1<lcd_bit_buffer[y2][xx]=temp;

          //yy=(yy+64-1)%64;//修正y地址
          yy=(yy+63)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;
          }
          yy=y_y;//恢復原y軸

          }

          //********************************
          //顯示一個英文字符
          //********************************
          voiddis_char_buffer(constunsignedchar*sp)
          {
          unsignedchari,j;
          unsignedcharx_x,y_y;
          unsignedchartemp_data,y;

          unsignedchartemp;
          unsignedchary1,y2;
          x_x=xx;
          y=y_y=yy;//保存y軸

          i=8;//顯示字模8*16
          while(i--)
          {
          temp_data=*sp++;
          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          if(temp_data&0x80)//寫點
          temp|=(1<
          else
          temp&=~(1<lcd_bit_buffer[y2][xx]=temp;
          temp_data<<=1;
          yy=(yy+64-1)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;

          }

          y=yy;//顯示下半個字

          xx=x_x;//寫x_x到xx
          i=8;//顯示字模8*16
          while(i--)
          {
          temp_data=*sp++;
          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          if(temp_data&0x80)//寫點
          temp|=(1<
          else
          temp&=~(1<lcd_bit_buffer[y2][xx]=temp;
          temp_data<<=1;
          yy=(yy+64-1)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;
          }
          yy=y_y;//恢復原y軸

          }
          //********************************
          //顯示一個漢字
          //********************************
          voiddis_hz_buffer(constunsignedchar*sp)
          {
          unsignedchari,j;
          unsignedcharx_x,y_y;
          unsignedchartemp_data,y;

          unsignedchartemp;
          unsignedchary1,y2;
          x_x=xx;
          y=y_y=yy;//保存y軸

          i=16;//顯示字模8*16
          while(i--)
          {
          temp_data=*sp++;
          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie

          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          if(temp_data&0x80)
          temp|=(1<else
          temp&=~(1<lcd_bit_buffer[y2][xx]=temp;
          temp_data<<=1;
          yy=(yy+64-1)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;
          }

          y=yy;//顯示下半個字

          xx=x_x;//寫x_x到xx
          i=16;//顯示字模16*16
          while(i--)
          {
          temp_data=*sp++;
          yy=y;
          //------------寫一個字節(jié)---------------------------
          for(j=8;j>0;j--)
          {
          y1=yy%8;//0-7bie
          y2=yy>>3;//0-7行
          temp=lcd_bit_buffer[y2][xx];
          if(temp_data&0x80)//寫點
          temp|=(1<else
          temp&=~(1<lcd_bit_buffer[y2][xx]=temp;
          temp_data<<=1;
          yy=(yy+64-1)%64;//修正y地址
          }
          //-------------------------------------------------
          xx=(xx+1)%128;
          }
          yy=y_y;//恢復原y軸
          }
          //*********************************
          //顯示一個漢字字符
          //包含自動查字庫
          //*********************************
          voiddis_buffer(unsignedintdata)
          {
          unsignedchartemp,data_temp;
          unsignedchartemp_h,temp_l;
          unsignedchara_temp;
          unsignedchari;


          if((data>>8)>128)
          {
          //漢字

          i=0;
          temp_h=(unsignedchar)(data>>8);
          temp_l=(unsignedchar)(data&0x00ff);
          while(1)
          {
          WDR();
          if((Chinese_characters_tab[i][0]==0xff)&&(Chinese_characters_tab[i][1]==0xff))//查找失敗失敗顯示黑色方塊
          break;

          if((Chinese_characters_tab[i][0]==temp_h)&&(Chinese_characters_tab[i][1]==temp_l))//查找成功
          break;
          i++;
          }

          dis_hz_buffer(&Chinese_characters_tab[i][2]);

          }
          else//英文
          {
          i=0;
          data_temp=(unsignedchar)data;
          while(1)//查字庫
          {
          WDR();
          if(character_tab[i][0]==0xff)//查找失敗失敗顯示黑色方塊
          break;

          if(character_tab[i][0]==data_temp)//查找成功
          break;
          i++;
          }

          dis_char_buffer(&character_tab[i][1]);
          }

          }
          //****************************
          //顯示字符串ram中
          //****************************
          voiddis_lcd_buffer(unsignedchar*aa)
          {
          while(*aa)
          {

          if(*aa>128)
          {
          dis_buffer(((*aa<<8)|*(aa+1)));
          aa+=2;
          }
          else
          {
          dis_buffer(*aa);
          aa++;
          }
          }
          }
          //****************************
          //顯示字符串Rom中
          //****************************
          voiddis_lcd_buffer_rom(constunsignedchar*aa)
          {
          while(*aa)
          {

          if(*aa>128)
          {
          dis_buffer(((*aa<<8)|*(aa+1)));
          aa+=2;
          }
          else
          {
          dis_buffer(*aa);
          aa++;
          }
          }
          }
          //*********************************************************

          本文引用地址:http://www.ex-cimer.com/article/201611/315484.htm

          -----------------------------------------------------------------------------------------------------------

          //字庫結構

          //漢字
          typedefconststruct{

          constunsignedcharcha[2];
          constunsignedchardata[32];

          }character_struct;

          character_structChinese_characters_tab[]={
          {
          {"溫"},
          {0x08,0x84,0x61,0x0E,0x00,0x7E,0x52,0x52,0x52,0x52,0x52,0x7E,0x00,0x00,0x00,0x00,
          0x40,0x7F,0x80,0x02,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x02,0x00},
          },
          {
          {"度"},
          {0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
          0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00,},
          },
          //.......................
          //結束標志
          {
          {0xff,0xff},
          {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
          },

          };
          //英文
          constunsignedcharcharacter_tab[][17]={

          /*--文字:!--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          !,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x0C,0x00,0x00,0x00,
          //!,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          /*--文字:#--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          #,0x02,0x03,0x1E,0x02,0x03,0x1E,0x02,0x00,0x20,0xFC,0x20,0x20,0xFC,0x20,0x20,0x00,
          //#,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
          /*--文字:%--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          %,0x0F,0x10,0x0F,0x00,0x07,0x18,0x00,0x00,0x00,0x84,0x38,0xC0,0x78,0x84,0x78,0x00,

          /*--文字:*--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          *,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,

          /*--文字:---*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          -,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,

          /*--文字:+--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          +,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00,

          /*--文字:=--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          =,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

          /*--文字:[--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          [,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,

          /*--文字:]--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          ],0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,

          /*--文字:?--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          ?,0x00,0x0E,0x12,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,0x00,0x0C,0x6C,0x80,0x00,0x00,

          /*--文字:/--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          /,0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x20,0x00,0x06,0x18,0x60,0x80,0x00,0x00,0x00,

          /*--文字:--*/
          /*--宋體12;此字體下對應的點陣為:寬x高=8x16--*/
          0x5c,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x1C,0x03,0x00,


          /*--文字:空格--*/
          /*--NewCenturySchoolbook12;此字體下對應的點陣為:寬x高=8x16--*/
          ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          //攝氏度符號
          0xfe,0x18,0x18,0x03,0x04,0x08,0x08,0x08,0x04,0x00,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,
          //結束標志
          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

          };



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();