[STM32F0] 我的SSD1289 的3.2寸液晶屏只能刷出半屏来

[复制链接]
4328|22
 楼主| missing01 发表于 2014-1-2 20:49 | 显示全部楼层 |阅读模式
哪C:\Users\Administrator\Desktop位高手讲下怎么回事呢?
 楼主| missing01 发表于 2014-1-2 20:52 | 显示全部楼层
  1. void LCD_WR_DATA8(char VH,char VL) //·¢ËÍÊý¾Ý-8λ²ÎÊý
  2. {
  3.     SetLCDRS();  //RS=1;
  4.         delayms(1);       
  5.                 LCD_Writ_Bus(VH,VL);
  6. }
  7. void LCD_WR_DATA(int16_t da)
  8. {
  9.    SetLCDRS();
  10. delayms(1);       
  11.                 LCD_Writ_Bus(da>>8,da);
  12. }          
  13. void LCD_WR_REG(int16_t da)         
  14. {       
  15.     ResetLCDRS();
  16. delayms(1);       
  17.         LCD_Writ_Bus(da>>8,da);
  18. }
  19. void LCD_WR_REG_DATA(int16_t reg,int16_t da)
  20. {
  21.     LCD_WR_REG(reg);
  22.                 LCD_WR_DATA(da);
  23. }
  24. void Address_set(uint16_t startx,uint16_t starty,uint16_t endx,uint16_t endy)
  25. {
  26. //        LCD_WR_REG_DATA(0x0044,x2+(y2<<8));
  27.         uint16_t temp=(endx<<8)|startx;
  28.         LCD_WR_REG_DATA(0x0044,temp);
  29. //        LCD_WR_REG_DATA(0x0044,0x2878);
  30.         LCD_WR_REG_DATA(0x0045,starty);
  31.         LCD_WR_REG_DATA(0x0046,endy);
  32.         SetCursor(startx,starty);
  33.   LCD_WR_REG(0x0022);                                                                                                                   
  34. }


  35. void Lcd_Init(void)
  36. {
  37.         uint8_t tempdata;
  38.         SetCS();
  39.         /*tempdata=GPIO_Read_bit(GPIOC,GPIO_Pin_9);         //Ð轫PC9 ÉèÖóÉÊäÈëģʽ
  40.         if(tempdata==0)
  41.         {
  42.                 LCD_WR_REG_DATA(0,0);
  43.            LCD_ShowString(0,0," ");
  44.            LCD_ShowNum(0,0,0,0);
  45.            LCD_Show2Num(0,0,0,0);
  46.            LCD_DrawPoint_big(0,0);
  47.            LCD_DrawRectangle(0,0,0,0);
  48.            Draw_Circle(0,0,0);       
  49.         }*/
  50. //        delayms(5);       
  51.         Set();
  52.         delayms(5);       
  53.         Reset();         //LCD_Reset=0;
  54.         delayms(5);       
  55. //        delayms(5);       
  56.         Set();            //LCD_Reset=1;
  57.         SetCS();
  58.         SetRD();
  59.         SetLCDWR();
  60.         Delay(5);
  61.         ResetCS();
  62. /*Reset();         //LCD_Reset=0;
  63. delayms(50);       
  64. Set();            //LCD_Reset=1;
  65. delayms(50);
  66. SetCS();
  67.         SetRD();
  68.         SetLCDWR();*/
  69.         ResetCS();
  70.                 LCD_WR_REG_DATA(0x0000,0x0001);    delayms(1);          //´ò¿ª¾§Õñ
  71.     LCD_WR_REG_DATA(0x0003,0xA8A4);   delayms(1);           //0xA8A4
  72.     LCD_WR_REG_DATA(0x000C,0x0000);    delayms(1);  
  73.     LCD_WR_REG_DATA(0x000D,0x080C);    delayms(1);  
  74.     LCD_WR_REG_DATA(0x000E,0x2B00);    delayms(1);          
  75.     LCD_WR_REG_DATA(0x001E,0x00B7);    delayms(1);         
  76.     LCD_WR_REG_DATA(0x0001,0x2B3F);    delayms(1);           //Çý¶¯Êä³ö¿ØÖÆ320*240  0x6B3F
  77.     LCD_WR_REG_DATA(0x0002,0x0600);   delayms(1);       
  78.     LCD_WR_REG_DATA(0x0010,0x0000);    delayms(1);       
  79.     LCD_WR_REG_DATA(0x0011,0x6070);    delayms(1);               //0x4030           //¶¨ÒåÊý¾Ý¸ñʽ  16λɫ
  80.     LCD_WR_REG_DATA(0x0005,0x0000);   delayms(1);        ;
  81.     LCD_WR_REG_DATA(0x0006,0x0000);    delayms(1);       
  82.     LCD_WR_REG_DATA(0x0016,0xEF1C);    delayms(1);       
  83.     LCD_WR_REG_DATA(0x0017,0x0003);    delayms(1);       
  84.     LCD_WR_REG_DATA(0x0007,0x0233);   delayms(1);               //0x0233      
  85.     LCD_WR_REG_DATA(0x000B,0x0000);    delayms(1);       
  86.     LCD_WR_REG_DATA(0x000F,0x0000);    delayms(1);                //ɨÃ迪ʼµØÖ·
  87.     LCD_WR_REG_DATA(0x0041,0x0000);    delayms(1);       
  88.     LCD_WR_REG_DATA(0x0042,0x0000);    delayms(1);       
  89.     LCD_WR_REG_DATA(0x0048,0x0000);    delayms(1);       
  90.     LCD_WR_REG_DATA(0x0049,0x013F);    delayms(1);       
  91.     LCD_WR_REG_DATA(0x004A,0x0000);    delayms(1);       
  92.     LCD_WR_REG_DATA(0x004B,0x0000);   delayms(1);       
  93.     LCD_WR_REG_DATA(0x0044,0xEF00);    delayms(1);       
  94.     LCD_WR_REG_DATA(0x0045,0x0000);    delayms(1);       
  95.     LCD_WR_REG_DATA(0x0046,0x013F);    delayms(1);       
  96.     LCD_WR_REG_DATA(0x0030,0x0707);   delayms(1);       
  97.     LCD_WR_REG_DATA(0x0031,0x0204);    delayms(1);       
  98.     LCD_WR_REG_DATA(0x0032,0x0204);    delayms(1);       
  99.     LCD_WR_REG_DATA(0x0033,0x0502);    delayms(1);       
  100.     LCD_WR_REG_DATA(0x0034,0x0507);    delayms(1);       
  101.     LCD_WR_REG_DATA(0x0035,0x0204);    delayms(1);       
  102.     LCD_WR_REG_DATA(0x0036,0x0204);    delayms(1);       
  103.     LCD_WR_REG_DATA(0x0037,0x0502);    delayms(1);       
  104.     LCD_WR_REG_DATA(0x003A,0x0302);    delayms(1);       
  105.     LCD_WR_REG_DATA(0x003B,0x0302);    delayms(1);       
  106.     LCD_WR_REG_DATA(0x0023,0x0000);    delayms(1);       
  107.     LCD_WR_REG_DATA(0x0024,0x0000);    delayms(1);       
  108.     LCD_WR_REG_DATA(0x0025,0x8000);    delayms(1);       
  109.     LCD_WR_REG_DATA(0x004f,0);        //ÐÐÊ×Ö·0
  110.     LCD_WR_REG_DATA(0x004e,0);        //ÁÐÊ×Ö·0
  111.                 LCD_WR_REG(0x0022);
  112. }

  113. void SetCursor(uint16_t x,uint16_t y)
  114. {
  115.         LCD_WR_REG_DATA(0x004e,y); //ÁÐÐÊ×µØÖ·
  116.         LCD_WR_REG_DATA(0x004f,x); //ÐÐÊ×µØÖ·
  117. }
  118. //ÇåÆÁº¯Êý
  119. //Color:ÒªÇåÆÁµÄÌî³äÉ«
  120. void LCD_Clear(uint16_t Color)
  121. {
  122.         uint8_t VH,VL;
  123.         uint16_t i,j;
  124.         VH=Color>>8;
  125.         VL=Color;       
  126. //        Address_set(80,120,80,240); //startx starty endx   endy  ÎÞÏÖÏó
  127. //                Address_set(0,120,0,240); //startx starty endx   endy  ÎÞÃ÷ÏÔÏÖÏó
  128. //        Address_set(0,80,0,80); //startx starty endx   endy  ÎÞÃ÷ÏÔÏÖÏó
  129. //        Address_set(0,0,239,319); //startx starty endx   endy  °ëÆÁË¢³ö
  130. //        Address_set(0,0,80,80); //startx starty endx   endy  ´Ó00 ¿ªÊ¼ Ë¢³ö80*80µÄ·½ÐÎ
  131. //        Address_set(0,0,140,80); //startx starty endx   endy   Ö»Ë¢³ö×ó²àÒ»µã  ´óÔ¼20*80
  132. //        Address_set(0,0,120,80); //startx starty endx   endy   ´Ó0 0¿ªÊ¼Ë¢³ö120*80
  133.         //        Address_set(0,0,128,80);        //×ó²àË¢³ö8*80µÄС±ß¿ò
  134.         Address_set(0,0,239,319); //startx starty endx   endy  °ëÆÁË¢³ö
  135.    for(i=0;i<240;i++)
  136.          {
  137.           for (j=0;j<320;j++)
  138.                    {
  139.                  LCD_WR_DATA8(VH,VL);
  140.                                 //        Delay(100);
  141.             }

  142.           }
  143. }
  144. //ÔÚÖ¸¶¨Î»ÖÃÏÔʾһ¸öºº×Ö(32*33´óС)
  145. //dcolorΪÄÚÈÝÑÕÉ«£¬gbcolorΪ±³¾²ÑÕÉ«
  146. void showhanzi(uint16_t  x,uint16_t  y,uint16_t index)       
  147. {  
  148.         uint8_t i,j;
  149.         uint8_t *temp=hanzi;   
  150.     Address_set(x,y,x+31,y+31); //ÉèÖÃÇøÓò      
  151.         temp+=index*128;       
  152.         for(j=0;j<128;j++)
  153.         {
  154.                 for(i=0;i<8;i++)
  155.                 {                      
  156.                          if((*temp&(1<<i))!=0)
  157.                         {
  158.                                 LCD_WR_DATA(POINT_COLOR);
  159.                         }
  160.                         else
  161.                         {
  162.                                 LCD_WR_DATA(BACK_COLOR);
  163.                         }   
  164.                 }
  165.                 temp++;
  166.          }
  167. }
 楼主| missing01 发表于 2014-1-2 20:53 | 显示全部楼层
 楼主| missing01 发表于 2014-1-2 20:53 | 显示全部楼层
  1. int main()
  2. {
  3.         //         char str[16]="helloword";
  4. //        SystemInit();
  5.         LedInit();
  6. //        Uart_NVICInit();
  7. //        SysTick_Config(SysTick_CLKSource_HCLK);   //sistickʱÖÓԴΪAHB ʱÖÓ
  8.         GPIO_ResetBits(GPIOA,GPIO_Pin_11);//µÆÁÁ
  9.         Systick_NVICInit();
  10. //        Delay(2000);
  11.         Lcd_Init();
  12. //       
  13. /*        GPIO_SetBits(GPIOA,GPIO_Pin_11);//µÆÃðÁ
  14.         Delay(2000);
  15.         LCD_Clear(RED);  
  16.         GPIO_ResetBits(GPIOA,GPIO_Pin_11);//µÆÁÁ
  17.          Delay(3000);
  18.          LCD_Clear(GREEN);
  19.          Delay(3000);
  20. LCD_WR_DATA8(0x0f,0x0f);
  21.          */
  22.         LCD_Clear(GREEN);
  23. //        LCD_ShowString(0,0,str);
  24.         while(1)
  25.          {               
  26.                 GPIO_ResetBits(GPIOA,GPIO_Pin_11);
  27.                  Delay(1000);  //1s
  28.                  GPIO_SetBits(GPIOA,GPIO_Pin_11);
  29.                  Delay(2000);  //1s
  30.                  
  31.          }
  32. }
 楼主| missing01 发表于 2014-1-2 20:55 | 显示全部楼层
每次在main中刷屏就刷出一半来  ,在左半部分操作很好    能刷出想要的形状,但是在右半部分 什么操作都失灵。这是什么原因呢
 楼主| missing01 发表于 2014-1-3 08:57 | 显示全部楼层
跪求高手
fengye5340 发表于 2014-1-3 10:03 | 显示全部楼层
这个屏的驱动网上也是有参考资料的,楼主仔细看看屏幕的初始化部分,主要是初始化没做好。你贴的代码看不清楚,发个完整的代码上来看看吧。
海中水 发表于 2014-1-3 10:17 | 显示全部楼层
你在屏幕的未显示地方,打印一个点,如果还是不出来就说明你是不是在位置显示上做了限制。
 楼主| missing01 发表于 2014-1-3 17:54 | 显示全部楼层
fengye5340 发表于 2014-1-3 10:03
这个屏的驱动网上也是有参考资料的,楼主仔细看看屏幕的初始化部分,主要是初始化没做好。你贴的代码看不清 ...

我也是参照了网上的代码的,还有卖屏的也提供了个51的代码 我在底下上传下 源码,求帮忙看看了
 楼主| missing01 发表于 2014-1-3 17:56 | 显示全部楼层
这个是我刷屏的工程。我也怀疑是初试化的问题,但是换了网上的好几个初始化程序,要么不行,要么就是老样子

LCD1.rar

2.93 MB, 下载次数: 19

 楼主| missing01 发表于 2014-1-3 18:20 | 显示全部楼层
海中水 发表于 2014-1-3 10:17
你在屏幕的未显示地方,打印一个点,如果还是不出来就说明你是不是在位置显示上做了限制。 ...

我在左半部分 显示一个矩形什么的 正常,但是移到右半部分就不行了  什么都显示不了
fengye5340 发表于 2014-1-3 19:22 | 显示全部楼层
看着你的清屏函数很乱的,给你个参考程序,修改一下试试吧,我用的屏是没问题的,正常使用的
LCD_SSD1289_SetCursor(0,0);
  for(k=0;k<320;k++)
  {
    LCD_SSD1289_SetCursor(0,k);
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Blue);
    }
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Red);
    }
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Magenta);
    }
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Green);
    }
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Cyan);
    }
    for(j=0;j<40;j++)
    {
      LCD_SSD1289_WriteGRAM(Yellow);
    }
  }
海中水 发表于 2014-1-4 17:26 | 显示全部楼层
missing01 发表于 2014-1-3 18:20
我在左半部分 显示一个矩形什么的 正常,但是移到右半部分就不行了  什么都显示不了 ...

这个问题我之前也遇见过应该某个位置定位有问题,比如我的X坐标或者Y坐标的范围限制了等等。。。
 楼主| missing01 发表于 2014-1-6 08:36 | 显示全部楼层
fengye5340 发表于 2014-1-3 19:22
看着你的清屏函数很乱的,给你个参考程序,修改一下试试吧,我用的屏是没问题的,正常使用的
LCD_SSD1289_ ...

楼主这个应该是刷出彩调出来,实际跟我的是一样的哈
 楼主| missing01 发表于 2014-1-6 08:38 | 显示全部楼层
海中水 发表于 2014-1-4 17:26
这个问题我之前也遇见过应该某个位置定位有问题,比如我的X坐标或者Y坐标的范围限制了等等。。。 ...

但我的是全部刷屏 一共320*240个点,起始点的坐标是0 0  应该没啥大问题的呀  从00  刷到80  80  这个正方形就没有问题
清风致影 发表于 2014-1-6 08:57 | 显示全部楼层
很明显 不是初始化就是刷屏地址设置问题
fengye5340 发表于 2014-1-6 09:13 | 显示全部楼层
missing01 发表于 2014-1-6 08:36
楼主这个应该是刷出彩调出来,实际跟我的是一样的哈

坐标定位不一样的,楼主试试看看
 楼主| missing01 发表于 2014-1-8 09:30 | 显示全部楼层
昨儿改了初始化部分,妈的,只刷右边了。左边不刷了,谁能贴初始化代码。
wakojosin 发表于 2014-1-8 10:01 | 显示全部楼层
貌似我刚买了这款屏幕,等到手了研究一下,楼主用的是什么哪个型号单片机呢
 楼主| missing01 发表于 2014-1-8 10:32 | 显示全部楼层
wakojosin 发表于 2014-1-8 10:01
貌似我刚买了这款屏幕,等到手了研究一下,楼主用的是什么哪个型号单片机呢 ...

STM32F051
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

115

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部