電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>lcd12864中文資料大合集(arduino lcd12864+lcd12864程序)

lcd12864中文資料大合集(arduino lcd12864+lcd12864程序)

2018-01-11 | rar | 7100KB | 次下載 | 1積分

資料介紹

lcd12864液晶屏相關(guān)資料,包括arduino lcd12864,以及相關(guān)的設(shè)計(jì)方案,還有包括lcd12864中文資料數(shù)據(jù)使用手冊,lcd12864程序,lcd12864串行時(shí)序的實(shí)現(xiàn),lcd12864顯示漢字程序,lcd12864引腳說明。

  lcd12864點(diǎn)陣的液晶屏主控芯片一般是ST7920及KS0107+KS0108及KS0086等IC,今天介紹一款我最新發(fā)現(xiàn)的一款COB液晶帶(RSCG12864B) 擁有I2C接口,內(nèi)建中文字庫(GB2312),ASCII有5*7點(diǎn)陣,6*12點(diǎn)陣,8*16點(diǎn)陣三種之多,可謂目前市場最全,這款液晶屏最出色的要屬于可以存儲(chǔ)多達(dá)2000張圖片,可以一般界面只需在電腦上做好BIN格式圖片,配合相應(yīng)的下載工具,就可以存儲(chǔ)到液晶模塊上。

arduino lcd12864,以及相關(guān)的設(shè)計(jì)方案,還有包括lcd12864中文資料數(shù)據(jù)使用手冊,lcd12864程序,lcd12864串行時(shí)序的實(shí)現(xiàn),lcd12864顯示漢字程序,lcd12864引腳說明。

點(diǎn)擊下載最新LCD12864中文數(shù)據(jù)手冊

lcd12864液晶模塊與Arduino接線

說明:

  GND------------->GND

  VDD-------------->5V

  RST-------------->A5

  SCL-------------->A4

  SDA-------------->A3

  LCD12864庫文件:

  /*

  RSCG12864B.h - 12864LCD library for Arduino & Wiring

  Copyright (c) 2015 Raylid Electronics Co.,Ltd (www.raylid.com)。 All right reserved.

  */

  /*--------Arduino Uno connection to LCD-----------------------------------------------

  LCD Module Arduino Uno

  GND-------------------------GND

  VDD-------------------------5.0V

  RST(Floating)

  SCL-------------------------A5(PC5)

  SDA-------------------------A4(PC4)

  BUSY------------------------A3(PC3)

  A1(Floating)

  A0(Floating)

  -------------------------------------------------------------------------------------*/

  #ifndef RSCG12864B_h

  #define RSCG12864B_h

  typedef unsigned char U8;

  typedef unsigned int U16;

  typedef unsigned long U32;

  typedef const char CCHAR;

  class RAYLIDLCD

  {

  private:

  public:

  RAYLIDLCD();

  void begin();

  void clear();

  void display_on();

  void display_off();

  void brightness(U8 n);

  void draw_pixel(U8 x,U8 y);

  void delete_pixel(U8 x,U8 y);

  void draw_line(U8 x1,U8 y1,U8 x2,U8 y2);

  void delete_line(U8 x1,U8 y1,U8 x2,U8 y2);

  void draw_rectangle(U8 x1,U8 y1,U8 x2,U8 y2);

  void delete_rectangle(U8 x1,U8 y1,U8 x2,U8 y2);

  void draw_fill_rectangle(U8 x1,U8 y1,U8 x2,U8 y2);

  void delete_fill_rectangle(U8 x1,U8 y1,U8 x2,U8 y2);

  void draw_circle(U8 x,U8 y,U8 r);

  void delete_circle(U8 x,U8 y,U8 r);

  void draw_fill_circle(U8 x,U8 y,U8 r);

  void delete_fill_circle(U8 x,U8 y,U8 r);

  void inversely_area(U8 x1,U8 y1,U8 x2,U8 y2);

  void display_bmp(U16 n);

  void display_bmp_block(U16 n,U8 px,U8 py,U8 x,U8 y,U8 w,U8 h);

  void cursor(U8 x,U8 y);

  void spacing(U8 xs,U8 ys);

  void font_revers_on();

  void font_revers_off();

  void print_U32_5x7(U32 n);

  void print_U32_6x12(U32 n);

  void print_U32_8x16(U32 n);

  void print_U32_5x7_xy(U8 x,U8 y,U32 n);

  void print_U32_6x12_xy(U8 x,U8 y,U32 n);

  void print_U32_8x16_xy(U8 x,U8 y,U32 n);

  void print_string_12(CCHAR *ptr);

  void print_string_16(CCHAR *ptr);

  void print_string_12_xy(U8 x,U8 y,CCHAR *ptr);

  void print_string_16_xy(U8 x,U8 y,CCHAR *ptr);

  void print_string_5x7(CCHAR *ptr);

  void print_string_6x12(CCHAR *ptr);

  void print_string_8x16(CCHAR *ptr);

  void print_string_5x7_xy(U8 x,U8 y,CCHAR *ptr);

  void print_string_6x12_xy(U8 x,U8 y,CCHAR *ptr);

  void print_string_8x16_xy(U8 x,U8 y,CCHAR *ptr);

  };

  extern RAYLIDLCD RSCG12864B;

  #endif

  //12864串行時(shí)序的實(shí)現(xiàn)

  ///**************************************/

  #include《reg51.h》

  #include《intrins.h》

  #include《math.h》

  /**************************************/

  #define uchar unsigned char

  #define uint unsigned int

  #define clear 0x01 //清屏

  #define reset_DDRAM 0x02 //DDRAM地址歸位

  #define left_move 0x04 //游標(biāo)左移

  #define right_move 0x06 //游標(biāo)右移

  #define all_left_move 0x05 //畫面整體左移

  #define all_right_move 0x07 //畫面整體右移

  #define display_left_move 0x10 //顯示游標(biāo)左移

  #define display_right_move 0x14 //顯示游標(biāo)右移

  #define set_function1 0x30 //基本指令集動(dòng)作

  #define set_CGRAM 0x40 //設(shè)定CGRAM地址

  #define set_DDRAM 0x80 //設(shè)定DDRAM地址

  #define set_function2 0x34 //擴(kuò)充指令集動(dòng)作

  #define fanbai 0x04 //反白第一行(擴(kuò)充指令集)

  #define set_GDRAM 0x80 //設(shè)定GDRAM地址(擴(kuò)充指令集)

  #define ON_G 0x36 //開繪圖顯示(擴(kuò)充指令集)

  #define set_function2 0x34 //關(guān)繪圖顯示(擴(kuò)充指令集)

  //端口定義

  sbit LCD_CS=P1^3;

  sbit LCD_SID=P2^0; //串行數(shù)據(jù)線

  sbit LCD_SCLK=P2^1; //串上時(shí)鐘輸入

  uchar code a[]={“串口LCD屏”}; //定義要顯示的字符串

  /**************************************/

  //延時(shí)函數(shù)

  /**************************************/

  void Delay_nms(uchar n)

  {

  uchar i;

  uchar j;

  for(i=0;i《n;i++)

  for(j=0;j《125;j++) //大概1ms

  _nop_();

  }

  /**************************************/

  //串行發(fā)送一個(gè)字節(jié)

  /**************************************/

  void LCD_sendbyte(uchar byte)

  {

  uchar i;

  for(i=0;i《8;i++)

  {

  LCD_SCLK=0; //拉低時(shí)鐘線

  _nop_();

  LCD_SID=(bit)(byte&0x80); //發(fā)送最高位數(shù)據(jù)

  LCD_SCLK=1; //上升沿發(fā)送數(shù)據(jù)

  byte=byte《《1; //左移一位

  }

  }

  /****************************************/

  //寫指令

  /****************************************/

  void LCD_write_com(uchar com)

  {

  LCD_CS=1;

  LCD_sendbyte(0xf8); //送入5個(gè)連續(xù)的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(0),0

  LCD_sendbyte(0xf0&com); //取高四位,數(shù)據(jù)分兩次傳送,

  //每個(gè)字節(jié)的內(nèi)容被送入兩個(gè)字節(jié)

  //高四位放在第一個(gè)字節(jié)的高四位

  LCD_sendbyte(0xf0&(com《《4)); //低四位放在第二個(gè)字節(jié)的高四位

  LCD_CS=0;

  Delay_nms(10); //串行不支持讀操作,不可檢測忙操作,這里用延時(shí)替代

  }

  /******************************************/

  //寫數(shù)據(jù)

  /******************************************/

  void LCD_write_dat(uchar dat)

  {

  LCD_CS=1;

  LCD_sendbyte(0xfa); //送入5個(gè)連續(xù)的“1“,啟動(dòng)一個(gè)周期,11111,RW(0),RS(1),0

  LCD_sendbyte(0xf0&dat); //取高四位,數(shù)據(jù)分兩次傳送,

  //每個(gè)字節(jié)的內(nèi)容被送入兩個(gè)字節(jié)

  //高四位放在第一個(gè)字節(jié)的高四位

  LCD_sendbyte(0xf0&(dat《《4)); //低四位放在第二個(gè)字節(jié)

  LCD_CS=0;

  Delay_nms(10);

  }

  /********************************************/

  //LCD初始化

  /********************************************/

  void LCD_init(void)

  {

  LCD_write_com(0x30); //選擇基本指令集

  LCD_write_com(0x0c); //開顯示,無游標(biāo),不反白

  LCD_write_com(0x01); //清除顯示屏幕,把DDRAM位址計(jì)數(shù)器調(diào)整為00H

  Delay_nms(5); //清屏操作時(shí)間較長1.6ms 因此加此延時(shí)

  LCD_write_com(0x02); //清DDRAM位址歸位,此處貌似與清屏重復(fù)

  LCD_write_com(0x06); //設(shè)定光標(biāo)右移,整體顯示不移動(dòng)

  }

  /*************************************************/

  //顯示字符串

  /*************************************************/

  void print(uchar *s)

  {

  while(*s!=‘\0’)

  {

  LCD_write_dat(*s);

  s++;

  }

  }

  /***************************************************/

  //設(shè)置顯示地址

  /***************************************************/

  void LCD_Setaddress(uchar x,uchar y)

  { //地址從第1行第1列開始不從0開始

  uchar addr;

  switch(x)

  {

  case 1: addr=0x80+y-1;

  break;

  case 2: addr=0x90+y-1;

  break;

  case 3: addr=0x88+y-1;

  break;

  case 4: addr=0x98+y-1;

  break;

  default : break;

  }

  LCD_write_com(addr); //字符顯示開始地址

  }

  /*****************************************************/

  //讓字符串顯示在固定位置

  /*****************************************************/

  void LCD_Putstring( uchar x, uchar y, uchar *pData )

  {

  LCD_Setaddress(x,y);

  while( *pData != ‘\0’ )

  {

  LCD_write_dat( *pData++ );

  }

  }

  /*---------------------------------------------------------------------------------------------------------------------- */

  //打點(diǎn)繪圖,適用于在屏幕上打稀疏的幾個(gè)點(diǎn),不能用于橫行連續(xù)打點(diǎn)

  void LCD_draw_point(uchar x, uchar y)

  {

  uchar x_byte, x_bit; //在橫坐標(biāo)的哪一個(gè)字節(jié),哪一個(gè)位

  uchar y_byte, y_bit; //在縱坐標(biāo)的哪一個(gè)字節(jié),哪一個(gè)位

  x_byte=x/16; //算出它在哪一個(gè)字節(jié)(地址)

  //注意一個(gè)地址是16位的

  x_bit=x%16; //(取模)算出它在哪一個(gè)位

  y_byte=y/32; //y是沒在哪個(gè)字節(jié)這個(gè)說法

  //這里只是確定它在上半屏(32行為一屏)還是下半屏

  //0:上半屏 1:下半屏

  y_bit=y%32; //y_bit確定它是在第幾行

  LCD_write_com(0x34); //打開擴(kuò)展指令集

  LCD_write_com(0x80+y_bit); //垂直地址(上) 貌似與說明書正好相反

  LCD_write_com(0x80+x_byte+8*y_byte); //先寫水平坐標(biāo)(下) 貌似與說明書正好相反 ???????

  //具體參照數(shù)據(jù)手冊

  //下半屏的水平坐標(biāo)起始地址為0x88

  //(+8*y_byte)就是用來確定在上半屏還是下半屏

  if(x_bit《8) //如果x_bit位數(shù)小于8

  {

  LCD_write_dat(0x01《《(7-x_bit)); //寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的

  //而GDRAM高位在左,低位在右

  LCD_write_dat(0x00); //低字節(jié)全部填0

  }

  else

  {

  LCD_write_dat(0x00); //高字節(jié)全部填0

  LCD_write_dat(0x01《《(15-x_bit));

  }

  LCD_write_com(0x36); //打開繪圖顯示

  LCD_write_com(0x30); //回到基本指令集

  }

  /************************************/

  //打點(diǎn)繪圖 一次打水平一行 可以避免斷點(diǎn)現(xiàn)象

  //x表示數(shù)組的首地址,y表示縱坐標(biāo)的值,也即是表示第多少行

  //即對(duì)一個(gè)數(shù)組中的數(shù)進(jìn)行這樣的處理:

  //檢測數(shù)組,并默認(rèn)數(shù)組為一行數(shù)的記錄即128字節(jié),只要數(shù)組中有數(shù)等于y,就把第y行的數(shù)全部打出

  /************************************/

  void LCD_draw_word(uchar *x, uchar y)

  {

  uchar i,j,k,m,n,count=0;

  uchar hdat, ldat;

  uchar y_byte, y_bit; //在縱坐標(biāo)的哪一個(gè)字節(jié),哪一個(gè)位

  uchar a[16];

  LCD_write_com(0x34); //打開擴(kuò)展指令集

  y_byte=y/32; //y是沒在哪個(gè)字節(jié)這個(gè)說法

  y_bit=y%32; //y_bit確定它是在第幾行

  for(j=0;j《8;j++)

  {

  hdat=0, ldat=0; //此處清零是很必要的

  n=j*16;

  for(k=n;k《n+16;k++)

  {

  if(x[k]==y)

  {

  a[count]=k;

  count++;

  }

  }

  for(m=0;m《count;m++)

  {

  i=a[m]-n;

  if(i《8) //如果x_bit位數(shù)小于8

  hdat=hdat|(0x01《《(7-i)); //寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的

  else

  ldat=ldat|(0x01《《(15-i));

  }

  LCD_write_com(0x80+y_bit); //垂直地址(上) 貌似與說明書正好相反

  LCD_write_com(0x80+j+8*y_byte); //水平坐標(biāo)(下) 貌似與說明書正好相反

  LCD_write_dat(hdat);

  LCD_write_dat(ldat);

  }

  LCD_write_com(0x36); //打開繪圖顯示

  LCD_write_com(0x30); //回到基本指令集

  }

  /**********************************************************/

  //清圖形程序

  /**********************************************************/

  void LCD_draw_clr(void)

  {

  uchar i,j;

  LCD_write_com(0x34); //8Bit擴(kuò)充指令集,即使是36H也要寫兩次

  LCD_write_com(0x36); //繪圖ON,基本指令集里面36H不能開繪圖

  for(i=0;i《32;i++) //12864實(shí)際為256x32

  {

  LCD_write_com(0x80+i); //行位置 貌似與說明書正好相反 (上)

  LCD_write_com(0x80); //列位置 貌似與說明書正好相反 (下)

  for(j=0;j《32;j++) //256/8=32 byte

  LCD_write_dat(0);

  }

  LCD_write_com(0x30); //開基本指令集

  }

  /*----------------------------------------------------------------------------------------------------------------------*/

  /******************************************************/

  //畫正弦波的波形

  /******************************************************/

  void print_sinx(void)

  {

  uchar i;

  uchar xdata y_sin[128]; //定義屏幕上要打的正弦波的縱坐標(biāo)

  uchar code v[128]={32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,

  32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,

  32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,

  32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,};

  float y;

  for(i=0;i《128;i++)

  {

  y=31*sin(0.09*i)+0.5; //此處系數(shù)為31比較好

  y_sin[i]=32-y;

  }

  for(i=0;i《64;i++)

  LCD_draw_word(y_sin, i); //繪圖 一行一行繪

  LCD_draw_word(v, 32);

  }

  /******************************************************/

  //主函數(shù)

  //用于觀看顯示效果

  /******************************************************/

  void main(void)

  {

  LCD_init();

  LCD_Setaddress(1,1); print(“本文出自“電子發(fā)燒友”);

  LCD_Setaddress(2,1); print(“”務(wù)必保留”);

  LCD_Setaddress(3,1); print(“此出處”);

  LCD_Setaddress(4,1); print(“elecfans.com”);

  // LCD_Putstring(3,1,“xxxxxx”);

  // LCD_write_dat(0x35);

  LCD_draw_clr();

  print_sinx();

  while(1){};

  }

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)