搜索
bottom↓
回复: 0

请教TFT屏,ILI9325驱动的问题

[复制链接]

出0入0汤圆

发表于 2013-8-30 11:07:29 | 显示全部楼层 |阅读模式
这个是STC12c5a60S2单片机驱动的,picture.h、chinese.h、char.h里都是要显示的字符,问题出现在屏幕显示的都是花点,不然就是全白,是什么问题?
  1. #include <reg52.h>
  2. #include"LCD_driver.h"
  3. #include"picture.h"
  4. #include"chinese.h"
  5. #include"char.h"

  6. uint colors[]=
  7. {
  8.   0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff  //颜色数据
  9. };


  10. void LCD_Init(void)
  11. {

  12.     LCD_REST=1;
  13.     delayms(5);       
  14.         LCD_REST=0;
  15.         delayms(5);
  16.         LCD_REST=1;
  17.         delayms(5);

  18.         LCD_CS =0;  //打开片选使能
  19.         //************* Start Initial Sequence **********//
  20.         LCD_Write_COM(0x00,0xE5); LCD_Write_DATA(0x78,0xF0); // set SRAM internal timing   设置静态存储器内部定时
  21.         LCD_Write_COM(0x00,0x01); LCD_Write_DATA(0x01,0x00); // set SS and SM bit
  22.         LCD_Write_COM(0x00,0x02); LCD_Write_DATA(0x07,0x00); // set 1 line inversion 倒转
  23.         LCD_Write_COM(0x00,0x03); LCD_Write_DATA(0x10,0x30); // set GRAM write direction and BGR=1.
  24.         LCD_Write_COM(0x00,0x04); LCD_Write_DATA(0x00,0x00); // Resize register
  25.         LCD_Write_COM(0x00,0x08); LCD_Write_DATA(0x02,0x07); // set the back porch and front porch
  26.         LCD_Write_COM(0x00,0x09); LCD_Write_DATA(0x00,0x00); // set non-display area refresh cycle ISC[3:0]
  27.         LCD_Write_COM(0x00,0x0A); LCD_Write_DATA(0x00,0x00); // FMARK function
  28.         LCD_Write_COM(0x00,0x0C); LCD_Write_DATA(0x00,0x00); // RGB interface setting
  29.         LCD_Write_COM(0x00,0x0D); LCD_Write_DATA(0x00,0x00); // Frame marker Position
  30.         LCD_Write_COM(0x00,0x0F); LCD_Write_DATA(0x00,0x00); // RGB interface polarity
  31.         //*************Power On sequence ****************//
  32.         LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x00,0x00); // SAP, BT[3:0], AP, DSTB, SLP, STB
  33.         LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x00,0x07); // DC1[2:0], DC0[2:0], VC[2:0]
  34.         LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x00); // VREG1OUT voltage
  35.         LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x00,0x00); // VDV[4:0] for VCOM amplitude
  36.         LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x00,0x01);
  37.         delayms(50); // Dis-charge capacitor power voltage
  38.         LCD_Write_COM(0x00,0x10); LCD_Write_DATA(0x10,0x90); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB
  39.         LCD_Write_COM(0x00,0x11); LCD_Write_DATA(0x02,0x27); // DC1[2:0], DC0[2:0], VC[2:0]
  40.         delayms(50); // Delay 50ms
  41.         LCD_Write_COM(0x00,0x12); LCD_Write_DATA(0x00,0x1F); //001C// Internal reference voltage= Vci;
  42.         delayms(50); // Delay 50ms
  43.         LCD_Write_COM(0x00,0x13); LCD_Write_DATA(0x15,0x00); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00
  44.         LCD_Write_COM(0x00,0x29); LCD_Write_DATA(0x00,0x27); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
  45.         LCD_Write_COM(0x00,0x2B); LCD_Write_DATA(0x00,0x0D); // Set Frame Rate   000C
  46.         delayms(50); // Delay 50ms
  47.         LCD_Write_COM(0x00,0x20); LCD_Write_DATA(0x00,0x00); // GRAM horizontal Address
  48.         LCD_Write_COM(0x00,0x21); LCD_Write_DATA(0x00,0x00); // GRAM Vertical Address
  49.         // ----------- Adjust the Gamma Curve ----------//
  50.         LCD_Write_COM(0x00,0x30); LCD_Write_DATA(0x00,0x00);
  51.         LCD_Write_COM(0x00,0x31); LCD_Write_DATA(0x07,0x07);
  52.         LCD_Write_COM(0x00,0x32); LCD_Write_DATA(0x03,0x07);
  53.         LCD_Write_COM(0x00,0x35); LCD_Write_DATA(0x02,0x00);
  54.         LCD_Write_COM(0x00,0x36); LCD_Write_DATA(0x00,0x08);//0207
  55.         LCD_Write_COM(0x00,0x37); LCD_Write_DATA(0x00,0x04);//0306
  56.         LCD_Write_COM(0x00,0x38); LCD_Write_DATA(0x00,0x00);//0102
  57.         LCD_Write_COM(0x00,0x39); LCD_Write_DATA(0x07,0x07);//0707
  58.         LCD_Write_COM(0x00,0x3C); LCD_Write_DATA(0x00,0x02);//0702
  59.         LCD_Write_COM(0x00,0x3D); LCD_Write_DATA(0x1D,0x04);//1604
  60.        
  61.         //------------------ Set GRAM area ---------------//
  62.         LCD_Write_COM(0x00,0x50); LCD_Write_DATA(0x00,0x00); // Horizontal GRAM Start Address
  63.         LCD_Write_COM(0x00,0x51); LCD_Write_DATA(0x00,0xEF); // Horizontal GRAM End Address
  64.         LCD_Write_COM(0x00,0x52); LCD_Write_DATA(0x00,0x00); // Vertical GRAM Start Address
  65.         LCD_Write_COM(0x00,0x53); LCD_Write_DATA(0x01,0x3F); // Vertical GRAM Start Address
  66.         LCD_Write_COM(0x00,0x60); LCD_Write_DATA(0xA7,0x00); // Gate Scan Line
  67.         LCD_Write_COM(0x00,0x61); LCD_Write_DATA(0x00,0x01); // NDL,VLE, REV
  68.         LCD_Write_COM(0x00,0x6A); LCD_Write_DATA(0x00,0x00); // set scrolling line
  69.         //-------------- Partial Display Control ---------//
  70.         LCD_Write_COM(0x00,0x80); LCD_Write_DATA(0x00,0x00);
  71.         LCD_Write_COM(0x00,0x81); LCD_Write_DATA(0x00,0x00);
  72.         LCD_Write_COM(0x00,0x82); LCD_Write_DATA(0x00,0x00);
  73.         LCD_Write_COM(0x00,0x83); LCD_Write_DATA(0x00,0x00);
  74.         LCD_Write_COM(0x00,0x84); LCD_Write_DATA(0x00,0x00);
  75.         LCD_Write_COM(0x00,0x85); LCD_Write_DATA(0x00,0x00);
  76.         //-------------- Panel Control -------------------//
  77.         LCD_Write_COM(0x00,0x90); LCD_Write_DATA(0x00,0x10);
  78.         LCD_Write_COM(0x00,0x92); LCD_Write_DATA(0x06,0x00);
  79.         LCD_Write_COM(0x00,0x07); LCD_Write_DATA(0x01,0x33); // 262K color and display ON
  80.         LCD_CS =1;  //关闭片选使能

  81. }  




  82. void delayms(int count)  // /* X1ms */
  83. {
  84.         int i,j;
  85.         for(i=0;i<count;i++)
  86.                 for(j=0;j<100;j++);
  87. }

  88. #ifdef  Bus_16    //条件编译-16位数据模式   
  89. void LCD_Writ_Bus(char VH,char VL)   //并行数据写入函数
  90. {
  91.     LCD_DataPortH=VH;          //高位P1口
  92.         LCD_DataPortL=VL;          //低位P0口       
  93.         LCD_WR=0;
  94.         LCD_WR=1;
  95. }
  96. #else                        //条件编译-8位数据模式
  97. void LCD_Writ_Bus(char VH,char VL)   //并行数据写入函数
  98. {       
  99.     LCD_DataPortH=VH;  //八位模式都用P0口送数据       
  100.            LCD_WR=0;
  101.         LCD_WR=1;
  102.         LCD_DataPortH=VL; //八位模式都用P0口送数据                       
  103.         LCD_WR=0;
  104.         LCD_WR=1;
  105. }
  106. #endif


  107. void LCD_Write_COM(char VH,char VL)         //发送命令
  108. {       
  109.     LCD_RS=0;
  110.         LCD_Writ_Bus(VH,VL);
  111. }


  112. void LCD_Write_DATA(char VH,char VL)        //发送数据
  113. {
  114.     LCD_RS=1;
  115.         LCD_Writ_Bus(VH,VL);
  116. }




  117. void Pant(char VH,char VL)
  118. {
  119.         int i,j;
  120.         LCD_CS =0;  //打开片选使能
  121.         Address_set(0,0,239,319);
  122.     for(i=0;i<320;i++)
  123.          {
  124.           for (j=0;j<240;j++)
  125.                    {
  126.                  LCD_Write_DATA(VH,VL);
  127.             }

  128.           }
  129.      LCD_CS =1;  //关闭片选使能
  130. }


  131. void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
  132. {
  133.         LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);          //设置X坐标位置
  134.     LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);   //设置Y坐标位置
  135.     LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1);   //开始X
  136.         LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1);          //开始Y
  137.     LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2);   //结束X
  138.         LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);   //结束Y
  139.     LCD_Write_COM(0x00,0x22);                                                         
  140. }


  141. /**********************************************************

  142.   写汉字子函数

  143. **********************************************************/
  144. void ChineseChar(uint x,uint y,int size,uint For_color,uint Bk_color ,char c)
  145. {
  146.    int e=0,i,j;
  147.    int  ed;
  148.    
  149.    uint  ncols;
  150.    uint  nrows;
  151.    uint  nbytes;

  152.    uchar *pfont;
  153.    uchar *pchar;
  154.    uchar *fonttable[]={(uchar *)hz16,(uchar *)hz24 , (uchar *)hz32};
  155.    
  156.    pfont=(uchar *)fonttable;

  157.    if(size==0)
  158.    {
  159.      ncols =16-1;
  160.      nrows =16-1;
  161.      nbytes =32;         //(16*16)/8
  162.    }
  163.    else
  164.    if(size==1)
  165.    {
  166.      ncols =24-1;
  167.      nrows =24-1;
  168.      nbytes =72;  //(24*24)/8
  169.    }
  170.    else
  171.    if(size==2)
  172.    {
  173.      ncols =32-1;
  174.      nrows =32-1;
  175.      nbytes =132;   //(32*32)/8
  176.    }
  177.    
  178.    pchar=pfont + (nbytes*(c-1));

  179.    Address_set(x,  y, x+nrows,y+ncols);
  180.    
  181.    for(i=0;i<nbytes;i++)
  182.    {
  183.      ed=*pchar++;
  184.          if(size==0)
  185.          {
  186.        if(i%2==0)
  187.        e=8;
  188.        else
  189.        e=4;
  190.          }
  191.          else
  192.          e=8;
  193.      
  194.      for(j=0;j<e;j++)
  195.      {// unsigned char temp;
  196.           if((ed>>j)&0x01)
  197.       {
  198.                //temp =         For_color&0x00ff
  199.            LCD_Write_DATA(For_color>>8 , For_color  );  //textcolor
  200.           }
  201.      else
  202.      {
  203.        LCD_Write_DATA( Bk_color>>8 ,  Bk_color);  //backcolor
  204.          }
  205.         }
  206.   }
  207. }

  208. /*********************************************************/

  209. /**********************************************************

  210.   字符显示子函数

  211. **********************************************************/
  212. void LCD_ShowChar(uint x,uint y,uint For_color,uint Bk_color, char ch)
  213. {      
  214.    uchar temp , Bytes;
  215.    uchar pos,t;
  216.    uint  CHAR_W,CHAR_H;

  217.    
  218.    //CHAR_W = 8;         //8*16
  219.    //CHAR_H = 16;

  220.      CHAR_W = 16;         //16*24
  221.      CHAR_H = 24;

  222.    if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H))
  223.    return;
  224.    
  225.    Address_set(x, y, x+CHAR_W-1, y+CHAR_H-1);
  226.    ch = ch-32;                       //按照ASCII编码顺序的到相应字母的编码
  227.    Bytes = (CHAR_W*CHAR_H)/8;
  228.    for(pos=0;pos<Bytes;pos++)  //CHAR_H         (CHAR_W*CHAR_H)/8
  229.    {
  230.      // temp= Font8x16[ch][pos];

  231.           //temp= Font16x24[ch][pos];
  232.           temp= Font16x24[ch][pos];
  233.       
  234.       for(t=0;t<8;t++) //CHAR_W
  235.       {                 
  236.             if(temp&0x80)
  237.             LCD_Write_DATA(For_color>>8 , For_color  );  //textcolor
  238.             else
  239.             LCD_Write_DATA(Bk_color>>8 , Bk_color );  //backcolor
  240.         temp<<=1;
  241.       }
  242.           
  243.    }
  244. }  

  245. /**********************************************************
  246. 显示字符串子函数

  247. x,y:起点坐标  
  248. *p:字符串起始地址

  249. **********************************************************/
  250. void LCD_ShowString(uint x,uint y,uint For_color,uint Bk_color,char *p)
  251. {         
  252.    while(*p!='\0')
  253.    {      
  254.      LCD_ShowChar(x,y,For_color,Bk_color,*p);
  255.     // x+=8;
  256.          x+=16;
  257.      p++;
  258.    }
  259. }
复制代码
  1. main()
  2. {
  3.         //int i,j,k;
  4.         LCD_Init();          //TFT初始化
  5. //        Pant(0xff,0xff);         //TFT清屏
  6.        

  7.           
  8.    //Pant(0xf8,0x00); //红色
  9.    //Pant(0X07,0xE0); //绿色
  10.    Pant(0x00,0x1f); //蓝色
  11.                        
  12.    LCD_CS =0;  //打开片选使能
  13.    ChineseChar(14+46,10,2,colors[2],colors[7],1);       
  14.    ChineseChar(46+46,10,2,colors[2],colors[7],2);       
  15.    ChineseChar(78+46,10,2,colors[2],colors[7],3);       
  16.    ChineseChar(110+46,10,2,colors[2],colors[7],4);       

  17.    LCD_ShowString(12,60,colors[0],colors[7],"-");
  18.    ChineseChar(20,60,1,colors[0],colors[7],1);        //带
  19.    ChineseChar(44,60,1,colors[0],colors[7],2);        //您
  20.    ChineseChar(68,60,1,colors[0],colors[7],3);        //进
  21.    ChineseChar(92,60,1,colors[0],colors[7],4);        //入
  22.    ChineseChar(116,60,1,colors[0],colors[7],5);        //单
  23.    ChineseChar(140,60,1,colors[0],colors[7],6);        //片
  24.    ChineseChar(164,60,1,colors[0],colors[7],7);        //机
  25.    ChineseChar(188,60,1,colors[0],colors[7],8);        //世
  26.    ChineseChar(212,60,1,colors[0],colors[7],9);        //界

  27.    LCD_ShowString(0,90,colors[0],colors[5],"WWW.PRECHIN.com");


  28.     ChineseChar(0,120,1,colors[4],colors[7],10);       
  29.         ChineseChar(24,120,1,colors[4],colors[7],11);       
  30.         ChineseChar(48,120,1,colors[6],colors[7],12);       
  31.         ChineseChar(72,120,1,colors[6],colors[7],13);       
  32.         ChineseChar(96,120,1,colors[2],colors[7],14);       
  33.         ChineseChar(120,120,1,colors[2],colors[7],15);       

  34.         LCD_ShowString(0,150,colors[7],colors[2],"www.PRECHIN.net");
  35.                      
  36.     LCD_ShowString(12,180,colors[0],colors[7],"TELL:");
  37.     LCD_ShowString(12,210,colors[2],colors[7],"0755-61190227");       
  38.     LCD_ShowString(0,240,colors[2],colors[7],"abcdefJhiJKLMNOP");
  39.     LCD_ShowString(0,265,colors[2],colors[7],"pqrstuvwxyz!@#$");
  40.     LCD_ShowString(0,290,colors[2],colors[7],"<>CDEF^&*()/,[]");
  41.        
  42.         LCD_CS =1;  //关闭片选使能
  43.                 while(1){}



  44. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 05:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表