久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

帶字庫型12864液晶的簡單使用

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年03月10日   【字體:



 

         昨天下午終于拿到了期盼已久的12864液晶,經過一天的研究,終于將它顯示出字了,現在就在這里寫一下,簡單的使用方法,可以方便初學者學習,也方便自己以后查閱。

         12864液晶,有名字便可以知道它有128*64個像素點,可以顯示漢字和簡單的圖形。在這里先介紹顯示字庫漢字和自定義漢字的方法,圖形的顯示以后我也會在空間中更新。

        12864顯示數據傳輸也有兩種方法,一種是串行方式,一種是并行方式,并行方式傳輸速度快,我也只介紹串行方式。

        12864的讀寫命令和1602的時序完全一樣,這里就不做詳細說明,不清楚的可以看我的1602顯示,時序圖如下:

         這個是讀時序(包括讀數據和讀命令)
  這個是寫時序(包括寫數據和寫命令)

  這個是寫時序(包括寫數據和寫命令)


  要注意的是12864液晶的初始化和1602液晶的初始化過程是不相同的,初始化流程圖如下:

 

              12864的指令表也有兩張一張基本指令表一張擴展指令表,表格如下:




續基本指令表


續基本指令表


 


    擴展指令表:
 
 

續擴展指令表:



12864的指令表就這么多,看起來比較多,但不要求每一條都記住,只要知道每一條指令的作用,能夠查表使用就夠了。具體每一條指令的意思表上已經比較清楚了,我就不再啰嗦了。我下面將要給出的程序中也做了比較詳細的注釋,大家可以對照程序再看這些指令表;。

          這是演示效果,第一行“請您欣賞”上自定義的仿宋字體,下面三行是字庫中自帶的漢字(手機拍攝的效果不太好)。

 

下面是我寫的源程序,(由于水平有限,程序寫法可能不是最優的方式,希望高手批評指正):

/*********************************************************
程序:LCD12864自定義顯示字符(最多顯示4個)
內容:ASCII碼顯示、自帶字庫顯示(8192個)、自定義顯示字符(4個請您欣賞)。
軟件:keil uVision4
液晶:QYLCD12864HZ1(帶字庫)
學習板:HOT-51學習板
作者:張家越
整理日期:2011-04-09  17:00
 
*************************************************************/
#include<AT89X52.h>
#define uchar unsigned char
#define uint  unsigned int  //定義一下,方便使用
#include"word1.h"

sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7; //液晶的三個控制端

//sbit PSB=P2^4;//1---8位或4位并口方式;0---串口方式。單片機上電高電平,選擇的是并口方式

uchar code tab1[]="    LCD12864    ";
uchar code tab2[]="湖北第二師范學院";
uchar code tab3[]="電子愛好者張家越";
unsigned char code table1[][32] =      
{
/*--  文字:  請  --*/
/*--  仿宋_GB231212;  此字體下對應的點陣為:寬x高=16x16   --*/
 {
  0x00,0x40,0x20,0x70,0x13,0xC0,0x10,0x70,0x01,0xC0,0x00,0x7C,0x77,0x80,0x10,0x70,
  0x13,0x90,0x12,0x70,0x13,0x90,0x1A,0x70,0x13,0x90,0x02,0x30,0x02,0x10,0x00,0x00,
  },
/*--  文字:  您  --*/
/*--  仿宋_GB231212;  此字體下對應的點陣為:寬x高=16x16   --*/
 { 
  0x01,0x00,0x09,0x00,0x09,0x38,0x13,0xC8,0x34,0x50,0x51,0x40,0x12,0x50,0x14,0xC8,
  0x10,0x40,0x02,0x00,0x21,0x10,0x29,0x08,0x24,0x08,0x42,0x20,0x01,0xE0,0x00,0x00,
  },
/*--  文字:  欣  --*/
/*--  仿宋_GB231212;  此字體下對應的點陣為:寬x高=16x16   --*/
 { 
  0x00,0x40,0x06,0x40,0x38,0x40,0x20,0x40,0x20,0x7C,0x26,0x88,0x3C,0x80,0x25,0x40,
  0x24,0x40,0x24,0x40,0x24,0x40,0x24,0xA0,0x44,0xA0,0x45,0x10,0x82,0x1C,0x00,0x00,
  },
/*--  文字:  賞  --*/
/*--  仿宋_GB231212;  此字體下對應的點陣為:寬x高=16x16   --*/
  {
  0x01,0x10,0x09,0x20,0x05,0xFC,0x3E,0x08,0x21,0xC0,0x0E,0x40,0x09,0xC0,0x0E,0x00,
  0x00,0xE0,0x0F,0x20,0x09,0x20,0x09,0x20,0x0A,0x20,0x04,0xC0,0x18,0x30,0x00,0x00,
   },


}  ;

// 漢字表:
// 天道酬勤
 

 

void delay(uint i) //延時函數
{
 while(--i);
}

void read_busy() //讀忙標志 最高位為1則busy,不能進行讀寫操作
{
 RS=0;
 RW=1;
 EN=1; //看時序
 while(P0 & 0x80);
 EN=0;
}

void write_LCD_command(uchar value) //寫命令函數
{
 read_busy(); //每次讀寫都要進行讀忙標志
 RS=0;
 RW=0;
 delay(200);
 EN=1;  //EN從1--0鎖存數據
 P0=value;
 delay(200);
 EN=0;
}

void write_LCD_data(uchar value) //寫數據函數
{
 read_busy();
 RS=1;
 RW=0;
 delay(200);
 EN=1;  //EN從1--0鎖存數據
 P0=value;
 delay(200);
 EN=0;
}

void init_LCD()    //8位并口方式LCD1864初始化函數
{
 delay(4000);   //等待時間>40ms
 write_LCD_command(0x30);//功能設定:8位數據、基本指令操作
 delay(100);    //等待時間>100us
 write_LCD_command(0x30);//功能設定:8位數據、基本指令操作
 delay(37);    //等待時間>37us
 write_LCD_command(0x0C);//顯示設定:整體顯示、游標關、不反白
 delay(100);    // 等待時間>100us
 write_LCD_command(0x01);//清屏指令
 delay(10000);   //等待時間>10ms
 write_LCD_command(0x06);//進入點設定:地址指針加1
}

/*=============================================
自定義漢字函數:CGRAM自定義顯示字符
地址  顯示編碼
0x40  0x0000
0x50  0x0002
0x60  0x0004
0x70  0x0006
共可顯示四個自定義字符!
顯示自定義字符前,先要設定顯示的位置,否則會亂碼
==============================================*/
void CGRAM()
{
 uchar i;
 write_LCD_command(0x30);//基本指令操作
 write_LCD_command(0x40);//設定CGRAM字符的位置
 for(i=0;i<16;i++)
 {
  write_LCD_data(table1[0][i*2]);
  write_LCD_data(table1[0][i*2+1]);//送顯示數據到CGRAM區中
 }
 write_LCD_command(0x50);
 for(i=0;i<16;i++)
 {
  write_LCD_data(table1[1][i*2]);
  write_LCD_data(table1[1][i*2+1]);
 }
 write_LCD_command(0x60);
 for(i=0;i<16;i++)
 {
  write_LCD_data(table1[2][i*2]);
  write_LCD_data(table1[2][i*2+1]);
 }

 write_LCD_command(0x70);
 for(i=0;i<16;i++)
 {
  write_LCD_data(table1[3][i*2]);
  write_LCD_data(table1[3][i*2+1]);
 }
 
 
}

void main()
{
// uchar num;
 uchar i;
 init_LCD();
 write_LCD_command(0x01);

  CGRAM();
  write_LCD_command(0x82);           
  write_LCD_data(0x00);
  write_LCD_data(0x00);//第一個自定義顯示字符編碼為:0x0000
  
  write_LCD_command(0x83);
  write_LCD_data(0x00);
  write_LCD_data(0x02);//第一個自定義顯示字符編碼為:0x0002

  write_LCD_command(0x84);
  write_LCD_data(0x00);
  write_LCD_data(0x04);//第一個自定義顯示字符編碼為:0x0004

  write_LCD_command(0x85);
  write_LCD_data(0x00);
  write_LCD_data(0x06);//第一個自定義顯示字符編碼為:0x0006
  delay(5000);       

  write_LCD_command(0x90);

//  write_LCD_command(0x00);
  for(i=0;i<16;i++)
  {
   write_LCD_data(tab1[i]);
   delay(5000);
  }
  write_LCD_command(0x88);
//  write_LCD_command(0x00);
  for(i=0;i<16;i++)
  {
   write_LCD_data(tab2[i]);
   delay(5000);
  }
  write_LCD_command(0x98);
//  write_LCD_command(0x00);
  for(i=0;i<16;i++)
  {
   write_LCD_data(tab3[i]);
   delay(5000);
  }
  while(1);

}

如果覺得我空間里面不夠詳細可以參看大海橡樹的空間:http://hi.baidu.com/echoas(里面寫的比較好)
 

12864圖片顯示我將在“12864使用方法(二)”中給出.。

感謝大家閱讀指教。

 

關閉窗口

相關文章

主站蜘蛛池模板: 美女久久视频 | www.四虎.com| 欧美极品在线播放 | 免费午夜电影 | 91亚洲精品国偷拍自产在线观看 | 精品99在线 | 欧美综合自拍 | 国产精品九九九 | 午夜久久久久久久久久一区二区 | 国产精品99久久久久久www | 久久国产精品视频 | 国产在线视频一区 | 欧洲免费毛片 | 99在线免费视频 | 成人av免费| 欧美国产日韩一区二区三区 | 99久久婷婷国产综合精品电影 | 国产视频一区二区在线观看 | 精品一区二区三区中文字幕 | 91视频进入| 亚洲网址| 久久网日本| 午夜视频网站 | 成人在线精品视频 | 黄片毛片在线观看 | 午夜网 | 国产一区二区久久久 | 日本视频一区二区三区 | 一本在线| 亚洲在线一区二区 | 美美女高清毛片视频免费观看 | 欧美日韩成人网 | 欧美三级久久久 | ririsao久久精品一区 | 男女网站免费观看 | 天天爱av| 精品免费| 欧美色图综合网 | 精品一区二区三区在线观看国产 | 国产视频一二三区 | 欧美日韩久久精品 |