AM12864点阵液晶屏的C语言测试程序

嵌入式技术

1372人已加入

描述

  AM12864测试程序(C语言)

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

  /* AM12864测试程序 1.0 */

  /* Designed by Andorin LCM R&D Group */

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

  #include 《reg51.h》

  #include 《ctype.h》

  #include 《string.h》

  #include 《stdlib.h》

  #include 《stdio.h》

  #include 《math.h》

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

  /* AM12864测试程序 1.0 */

  /* Designed by Andorin LCM R&D Group */

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

  /* Define the register command code */

  #define Disp_On 0x3f

  #define Disp_Off 0x3e

  #define Col_Add 0x40

  #define Page_Add 0xb8

  #define Start_Line 0xc0

  #define Lcd_Bus P1 //MCU P1《------》 LCM

  sbit Mcs=P2^3; //Master chip enable

  sbit Scs=P2^4; //Slave chip enable

  sbit Enable=P2^2; //6800 mode Enable single

  sbit Di=P2^0; //Data or Instrument Select

  sbit RW=P2^1; //Write or Read

  sbit Lcd_Rst=P2^5; //Lcm reset

  sbit Test_Key=P3^1;

  char code ce[]={/*-- 文字: 测 --*/0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,

  0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00};

  char code shi[]={/*-- 文字: 试 --*/0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,

  0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00};

  char code kai[]={/*-- 文字: 开 --*/0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,

  0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00};

  char code shi2[]={0x10,0x90,0x70,0x1F,0x12,0xF0,0x00,0x20,0x70,0x28,0x27,0x22,0x28,0x70,0x20,0x00,

  0x40,0x21,0x12,0x0C,0x06,0x09,0x30,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00};//始

  char code wan[]={0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00,

  0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00};//完

  char code bi[]={0x00,0x00,0xFF,0x88,0x48,0x28,0x08,0x80,0x7F,0x88,0x88,0x88,0x84,0x84,0xE0,0x00,

  0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00};//毕

  char code yang[]={0x20,0x10,0x2C,0x23,0x6A,0xAA,0x2A,0xAA,0x6A,0x2A,0x2A,0x2A,0xEA,0x02,0x00,0x00,

  0x00,0x10,0x11,0x15,0x15,0x15,0xFF,0x15,0x15,0x15,0x11,0x10,0x3F,0x40,0x30,0x00};

  char code qi[]={0x40,0x20,0x58,0x47,0x54,0x54,0x54,0x54,0x54,0x54,0xD4,0x14,0x06,0x04,0x00,0x00,

  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x40,0x80,0x70,0x00};//气

  char code nong[]={0x10 ,0x21 ,0x62 ,0x06 ,0x90 ,0x0C ,0x04 ,0x84,0x64 ,0x9F ,0x04 ,0x04 ,0x94 ,0xCC ,0x00 ,0x00,

  0x04 ,0x04 ,0xFE ,0x01 ,0x04 ,0x02 ,0x01 ,0xFF, 0x40 ,0x21 ,0x06 ,0x09 ,0x10 ,0x30 ,0x10 ,0x00 };//浓

  char code du[]={0x00 ,0x00 ,0x0FC ,0x24 ,0x24 ,0x24 ,0x0FC ,0xA5, 0xA6 ,0xA4 ,0x0FC ,0x24 ,0x34 ,0x26 ,0x04 ,0x00,

  0x40 ,0x20 ,0x9F ,0x80 ,0x42 ,0x42 ,0x26 ,0x2A, 0x12 ,0x2A ,0x26 ,0x42 ,0x40 ,0xC0 ,0x40 ,0x00};//度

  char code bi2[]={0x00, 0x00, 0xFE, 0x40, 0x40, 0x60, 0x40, 0x00,0xFF, 0x80, 0x40, 0x20, 0x30, 0x00, 0x00, 0x00,

  0x00, 0x40, 0x7F, 0x20, 0x20, 0x10, 0x10, 0x00,0x3F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00};//比

  char code fen[]={0x00 ,0x80 ,0x40 ,0x20 ,0x98 ,0x86 ,0x80 ,0x80,0x83 ,0x8C ,0x90 ,0x20 ,0xC0 ,0x80 ,0x80 ,0x00,

  0x01 ,0x00 ,0x80 ,0x40 ,0x20 ,0x1F ,0x00 ,0x40, 0x80 ,0x40 ,0x3F ,0x00 ,0x00 ,0x01 ,0x00 ,0x00 };// 分

  char code bai[]={0x02 ,0x02 ,0x02 ,0xE2 ,0x22 ,0x32 ,0x2A ,0x26,0x22 ,0x22 ,0x22 ,0xF2 ,0x22 ,0x03 ,0x02 ,0x00,

  0x00 ,0x00 ,0x00 ,0xFF ,0x42 ,0x42 ,0x42 ,0x42, 0x42 ,0x42 ,0x42 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00};// 百

  char code wei[]={

  0x20 ,0x20 ,0x20 ,0x22 ,0x24 ,0x2C ,0x20 , 0xE0,

  0x3F ,0x20 ,0x20 ,0x20 ,0x20 ,0xF0 ,0x20 ,0x00,

  0x00 ,0x40 ,0x20 ,0x10 ,0x08 ,0x04 ,0x03 ,0x00,

  0x02 ,0x04 ,0x4C ,0x80 ,0x40 ,0x3F ,0x00 ,0x00

  };//为

  /*------------------延时子程序-----------------------------*/

  void delay(unsigned int t)

  {

  unsigned int i,j;

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

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

  }

  /*------------------写命令到LCD------------------------------*/

  void write_com(unsigned char cmdcode)

  {

  do{delay(0);}while(P0^7==1);

  Di=0;

  RW=0;

  Lcd_Bus=cmdcode;

  delay(0); //原来是delay(0)

  Enable=1;

  delay(0);

  Enable=0;

  }

  /*-------------------写数据到LCD----------------------------*/

  void write_data(unsigned char Dispdata)

  { do{delay(10);}while(P0^7==1);

  Di=1;

  RW=0;

  Lcd_Bus=Dispdata;

  delay(0);

  Enable=1;

  delay(0);

  Enable=0;

  }

  /*-------------------读LCD数据----------------------------*/

  unsigned char read_data()

  { //do{delay(100);}while(P0^7==1);

  unsigned char tmpin;

  Di=1;

  RW=1;

  delay(0);

  Enable=1;

  delay(0);

  Enable=0;do{delay(100);}while(P0^7==1);

  tmpin=Lcd_Bus;

  return tmpin;

  }

  /*------------------显示边框-------------------------------*/

  void frame()

  {

  unsigned char i;

  Mcs=1;

  Scs=1;

  write_com(Page_Add+0);

  write_com(Col_Add+0);

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

  write_com(Page_Add+7);

  write_com(Col_Add+0);

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

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

  {

  Mcs=0;

  Scs=1;

  write_com(Page_Add+i);

  write_com(Col_Add+63);

  write_data(0x55);

  Mcs=1;

  Scs=0;

  write_com(Page_Add+i);

  write_com(Col_Add+0);

  write_data(0x55);

  }

  }

  /*------------------清除内存AM12864测试程序---------------*/

  void Clr_Scr()

  {

  unsigned char j,k;

  Mcs=1;Scs=1;

  write_com(Page_Add+0);

  write_com(Col_Add+0);

  for(k=0;k《8;k++){

  write_com(Page_Add+k);

  for(j=0;j《64;j++)write_data(0x00);

  }

  }

  /*------------------显示12864图片---------------------------*/

  void Disp_Img(unsigned char code *img)

  {

  unsigned char j,k;

  for(k=0;k《8;k++){

  Mcs=1;Scs=0;delay(0);

  write_com(Page_Add+k);

  write_com(Col_Add+0);

  for(j=0;j《64;j++) write_data(img[k*128+j]);

  Mcs=0;Scs=1; delay(0);

  write_com(Page_Add+k);

  write_com(Col_Add+0);

  for(j=64;j《128;j++) write_data(img[k*128+j]);

  }

  }

  /*------------------显示横--------------AM12864测试程序-------------*/

  void Disp_H_Line()

  {

  unsigned char i,j;

  Mcs=1;

  Scs=1;

  write_com(Disp_On);

  write_com(Page_Add);

  write_com(Start_Line);

  write_com(Col_Add);

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

  {

  write_com(Page_Add+j);

  write_com(Col_Add+0);

  // write_com(Start_Line+0);

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

  }

  }

  /*------------------显示列-----------------------------*/

  void Disp_V_Line()

  {

  unsigned char i,j;

  write_com(Disp_On);

  write_com(Page_Add);

  write_com(Start_Line);

  write_com(Col_Add);

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

  {

  write_com(Page_Add+j);

  write_com(Col_Add+0);

  write_com(Start_Line+0);

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

  {

  write_data(0x00);

  write_data(0x55);

  }

  }

  }

  /*------------------棋盘-----------------------------*/

  void Disp_Cross_Line(unsigned char mode)

  {

  unsigned char i,j;

  unsigned char data1,data2;

  if(mode==0) {data1=0xaa;data2=0x55;}

  else if(mode==1) {data1=0x55;data2=0xaa;}

  else return;

  Mcs=1;Scs=1;

  write_com(Disp_On);

  write_com(Page_Add);

  write_com(Start_Line);

  write_com(Col_Add);

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

  {

  write_com(Page_Add+j);

  write_com(Col_Add+0);

  write_com(Start_Line+0);

  for(i=0;i《32;i++){

  write_data(data1);

  write_data(data2);

  }

  }

  }

  /*---------------------指定位置显示汉字16*16-----------------------*/

  void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)

  {

  unsigned char j=0,i=0;

  for(j=0;j《2;j++){

  write_com(Page_Add+pag+j);

  write_com(Col_Add+col);

  for(i=0;i《16;i++) write_data(hzk[16*j+i]);

  }

  }

  /*------------------初始化LCD屏--------------------------*/

  void init_lcd()

  { Lcd_Rst=0;

  delay(100);

  Lcd_Rst=1;

  delay(100);

  Mcs=1;

  Scs=1;/////////////////////////////////////////////////////////

  delay(100);

  write_com(Disp_Off); /////////////////////

  write_com(Page_Add);

  write_com(Start_Line);

  write_com(Col_Add);

  write_com(Disp_On);

  }

  /*------------------------------信息显示------------------------*/

  void Msg(int flg)

  {

  Clr_Scr();

  frame();

  if(flg==0){ //显示“测试开始”

  Mcs=1;Scs=0;

  hz_disp16(3,32,ce);

  delay(2000);

  hz_disp16(3,48,shi);

  delay(2000);

  Mcs=0;Scs=1;

  hz_disp16(3,0,kai);

  delay(2000);

  hz_disp16(3,16,shi2);

  delay(2000);

  }

  else if(flg==1){ //显示“测试完毕”

  Mcs=1;Scs=0;

  hz_disp16(0,32,ce);

  hz_disp16(0,48,shi);

  Mcs=0;Scs=1;

  hz_disp16(0,0,wan);

  hz_disp16(0,16,bi);

  Mcs=1;Scs=0;

  hz_disp16(3,0,yang);

  hz_disp16(3,16,qi);

  hz_disp16(3,32,nong);

  hz_disp16(3,48,du);

  Mcs=0;Scs=1;

  hz_disp16(3,0,bai);

  hz_disp16(3,16,fen);

  hz_disp16(3,32,bi2);

  hz_disp16(3,48,wei);

  }

  }

  /*--------------------------------键盘扫描-------------------------*/

  void Key_Scan()

  {

  while(Test_Key);

  while(~Test_Key);

  }

  /*--------------------主程序-----------AM12864测试程序----------------------*/

  main()

  {

  unsigned char i=0;

  while(1){

  // Key_Scan();

  init_lcd();

  //Disp_Img(FirstPage);

  //delay(10000);

  // Key_Scan();

  Msg(0);

  delay(10000);

  Disp_H_Line();

  delay(10000);

  Disp_V_Line();

  delay(10000);

  Msg(1);

  delay(10000);

  Clr_Scr();

  //while(1);

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分