Lcd._h
上传用户:rbltsz
上传日期:2007-09-19
资源大小:2509k
文件大小:4k
源码类别:

单片机开发

开发平台:

C/C++

  1. //sbit DI=PB^0;  
  2. void Set_DI(uchar i)
  3. {if(i==1) PORTB=PORTB|0x01;
  4.  else     PORTB=PORTB&0xfe;}
  5.  
  6. //sbit RW=PB^1;
  7. void Set_RW(uchar i)
  8. {if(i==1) PORTB=PORTB|0x02;
  9.  else     PORTB=PORTB&0xfd;}
  10.  
  11. //sbit ENABLE=PB^2;
  12. void Set_EN(uchar i)
  13. {if(i==1) PORTB=PORTB|0x04;
  14.  else     PORTB=PORTB&0xfb;}
  15. //sbit CS1=PB^3;
  16. void Set_CS1(uchar i)
  17. {if(i==1) PORTB=PORTB|0x08;
  18.  else     PORTB=PORTB&0xf7;}
  19. //sbit CS2=PC^6;
  20. void Set_CS2(uchar i)
  21. {if(i==1) PORTC=PORTC|0x40;
  22.  else     PORTC=PORTC&0xbf;}
  23. //sbit RST=PC^7;
  24. void Set_RST(uchar i)
  25. {if(i==1) PORTC=PORTC|0x80;
  26.  else     PORTC=PORTC&0x7f;}
  27. //延时//
  28. void Delay(uint i)
  29. {uint j;
  30.  for(;i!=0;i--) 
  31.   for(j=5000;j!=0;j--) {;}
  32. }
  33. void nop(uchar i)
  34. {for(;i!=0;i--) 
  35.     NOP();
  36. }
  37. // 显示开关控制命令,i=0开显示,i=1关显示//
  38. void DisplayOnOff(uchar i)
  39. {uchar j;
  40.  Set_RW(0);// RW=0;
  41.  Set_DI(0);//DI=0;
  42.  Set_EN(0);//ENABLE=0;
  43.  PORTA=62+i;//P0=0x3e+i;
  44.  nop(10);//_nop_();
  45.  Set_EN(1);//ENABLE=1;
  46.  nop(10);//_nop_();
  47.  nop(10);//_nop_();
  48.  Set_EN(0);//ENABLE=0;
  49. // Delay(1);
  50. }
  51. //设置显示起始行,i=0~63//
  52. void SetStartLine(uchar i)
  53. {Set_RW(0);//RW=0;
  54.  Set_DI(0);//DI=0;
  55.  Set_EN(0);//ENABLE=0;
  56.  PORTA=0xc0+i;//P0=0xc0+i;
  57.  nop(10);//_nop_();
  58.  Set_EN(1);//ENABLE=1;
  59.  nop(10);//_nop_();
  60.  nop(10);//_nop_();
  61.  Set_EN(0);//ENABLE=0;
  62. // Delay(1);
  63. }
  64. //设置页(行)地址,i=0~7//
  65. void SetX(uchar i)
  66. {Set_RW(0);//RW=0;
  67.  Set_DI(0);//DI=0;
  68.  Set_EN(0);//ENABLE=0;
  69.  PORTA=0xb8+i;//P0=0xb8+i;
  70.  nop(10);//_nop_();
  71.  Set_EN(1);//ENABLE=1;
  72.  nop(100);// _nop_();
  73.  nop(100);//_nop_();
  74.  Set_EN(0);//ENABLE=0;
  75. // Delay(1);
  76. }
  77. //设置Y(列)地址,i=0~127//
  78. void SetY(uchar i)
  79. {Set_RW(0);//RW=0;
  80.  Set_DI(0);//DI=0;
  81.  Set_EN(0);//ENABLE=0;
  82.  PORTA=0x40+i;// P0=0x40+i;
  83.  nop(10);//_nop_();
  84.  Set_EN(1);//ENABLE=1;
  85.  nop(10);//_nop_();
  86.  nop(10);// _nop_();
  87.  Set_EN(0);//ENABLE=0;
  88.  //Delay(1);
  89. }
  90. //读状态//
  91. //返回值:DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
  92. //返回值:BF,0,ON/OFF,RST,0,0,0,0
  93. /*ucharReadStatus(void)
  94. {uchardata i;
  95.  RW=1;
  96.  DI=0;
  97.  ENABLE=1;
  98.  i=P0;
  99.  return i;
  100. }*/
  101. //写显示数据,i为送DDRAM的数据
  102. void WriteByte(uchar i)
  103. {Set_RW(0);//RW=0;
  104.  Set_DI(1);//DI=1;
  105.  Set_EN(0);//ENABLE=0;
  106.  PORTA=i;//P0=i;
  107.  nop(10);//_nop_();
  108.  Set_EN(1);//ENABLE=1;
  109.  nop(10);//_nop_();
  110.  nop(10);//_nop_();
  111.  Set_EN(0);//ENABLE=0;
  112.  //Delay(1);
  113. }
  114. //读显示数据处理
  115. /*ucharReadData(void)
  116. {uchar i;
  117.  RW=1;
  118.  DI=0;
  119.  ENABLE=1;
  120.  i=P0;
  121.  return i;
  122. }*/
  123. //LCD复位//
  124. void Reset(void)
  125. {Set_RST(0);//RST=0;
  126.  Delay(1);
  127.  Set_RST(1);//RST=1;
  128.  //Delay(1);
  129. }
  130. void ClearScreen(uchar k)
  131. {uchar i,j;
  132.  Set_CS1(1);//CS1=1;
  133.  Set_CS2(1);//CS2=1;
  134.  for(i=k;i<8;i+=1)
  135.   {SetX(i);
  136.  for(j=0;j<64;j++)
  137. WriteByte(0x00);
  138.  }
  139. }
  140.  
  141. //LCD初始化//
  142. void InitLCD(void)
  143. {Reset();
  144.  Delay(0);
  145.  ClearScreen(0);
  146.  DisplayOnOff(1);
  147.  SetStartLine(0);
  148.  }
  149. void WriteWord(uchar const *disp,uchar x,uchar y,uchar cs)
  150. {uchar i;
  151.  if(cs==1) {Set_CS1(1);Set_CS2(0);}
  152.  else {Set_CS1(0);Set_CS2(1);}
  153.  SetX(x);
  154.  SetY(y);
  155.  for(i=0;i<16;i++)
  156.      {WriteByte(*disp);
  157.    disp++;}
  158.   SetX(x+1);
  159.   SetY(y);
  160.   for(i=0;i<16;i++)
  161.   {WriteByte(*disp);
  162.  disp++;}
  163. }
  164. void WriteCharacter(const uchar *disp,uchar x,uchar y,uchar cs)
  165. {uchar i;
  166.  if(cs==1) Set_CS1(1);//CS1=1;
  167.  else      Set_CS2(1);//CS2=1;
  168.  SetX(x);
  169.  SetY(y);
  170.  for(i=0;i<8;i++)
  171.      {WriteByte(*disp);
  172.    disp++;}
  173.   SetX(x+1);
  174.   SetY(y);
  175.   for(i=0;i<8;i++)
  176.   {WriteByte(*disp);
  177.  disp++;}
  178. }
  179. void DisplayLine1(uchar i)
  180. {WriteWord(Wo,i,0,2);
  181.  WriteWord(Ting,i,16,2);
  182.  WriteWord(Jian,i,32,2);
  183.  WriteWord(Ni,i,48,2);
  184.  WriteWord(De,i,0,1);
  185.  WriteWord(Sheng,i,16,1);
  186.  WriteWord(Yin,i,32,1);
  187.  WriteWord(You,i,48,1);}
  188. void DisplayLine2(uchar i)
  189. {WriteWord(Zhong,i,0,2);
  190.  WriteWord(Te,i,16,2);
  191.  WriteWord(Bie,i,32,2);
  192.  WriteWord(De,i,48,2);
  193.  WriteWord(Gan,i,0,1);
  194.  WriteWord(Jue,i,16,1);}
  195. void WritePIC(const uchar *disp)
  196. {uchar ii=0;
  197.  uchar jj=0;
  198.  uchar kk=0;
  199.  SetX(0);
  200.  SetY(0);
  201.  for(ii=0;ii<8;ii++)
  202.  {for(kk=0;kk<64;kk++)
  203. {Set_CS1(0);//Select Left Screen
  204.  Set_CS2(1);
  205.  SetX(ii);
  206.  SetY(kk);
  207.  WriteByte(*disp);
  208.  disp++;}
  209.   for(kk=0;kk<64;kk++)
  210. {Set_CS1(1);//Select Left Screen
  211.  Set_CS2(0);
  212.  SetX(ii);
  213.  SetY(kk);
  214.  WriteByte(*disp);
  215.     disp++;}}
  216. }