打印
[STM32F0]

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

[复制链接]
3633|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哪C:\Users\Administrator\Desktop位高手讲下怎么回事呢?
沙发
missing01|  楼主 | 2014-1-2 20:52 | 只看该作者
void LCD_WR_DATA8(char VH,char VL) //·¢ËÍÊý¾Ý-8λ²ÎÊý
{
    SetLCDRS();  //RS=1;
        delayms(1);       
                LCD_Writ_Bus(VH,VL);
}
void LCD_WR_DATA(int16_t da)
{
   SetLCDRS();
delayms(1);       
                LCD_Writ_Bus(da>>8,da);
}          
void LCD_WR_REG(int16_t da)         
{       
    ResetLCDRS();
delayms(1);       
        LCD_Writ_Bus(da>>8,da);
}
void LCD_WR_REG_DATA(int16_t reg,int16_t da)
{
    LCD_WR_REG(reg);
                LCD_WR_DATA(da);
}
void Address_set(uint16_t startx,uint16_t starty,uint16_t endx,uint16_t endy)
{
//        LCD_WR_REG_DATA(0x0044,x2+(y2<<8));
        uint16_t temp=(endx<<8)|startx;
        LCD_WR_REG_DATA(0x0044,temp);
//        LCD_WR_REG_DATA(0x0044,0x2878);
        LCD_WR_REG_DATA(0x0045,starty);
        LCD_WR_REG_DATA(0x0046,endy);
        SetCursor(startx,starty);
  LCD_WR_REG(0x0022);                                                                                                                   
}


void Lcd_Init(void)
{
        uint8_t tempdata;
        SetCS();
        /*tempdata=GPIO_Read_bit(GPIOC,GPIO_Pin_9);         //Ð轫PC9 ÉèÖóÉÊäÈëģʽ
        if(tempdata==0)
        {
                LCD_WR_REG_DATA(0,0);
           LCD_ShowString(0,0," ");
           LCD_ShowNum(0,0,0,0);
           LCD_Show2Num(0,0,0,0);
           LCD_DrawPoint_big(0,0);
           LCD_DrawRectangle(0,0,0,0);
           Draw_Circle(0,0,0);       
        }*/
//        delayms(5);       
        Set();
        delayms(5);       
        Reset();         //LCD_Reset=0;
        delayms(5);       
//        delayms(5);       
        Set();            //LCD_Reset=1;
        SetCS();
        SetRD();
        SetLCDWR();
        Delay(5);
        ResetCS();
/*Reset();         //LCD_Reset=0;
delayms(50);       
Set();            //LCD_Reset=1;
delayms(50);
SetCS();
        SetRD();
        SetLCDWR();*/
        ResetCS();
                LCD_WR_REG_DATA(0x0000,0x0001);    delayms(1);          //´ò¿ª¾§Õñ
    LCD_WR_REG_DATA(0x0003,0xA8A4);   delayms(1);           //0xA8A4
    LCD_WR_REG_DATA(0x000C,0x0000);    delayms(1);  
    LCD_WR_REG_DATA(0x000D,0x080C);    delayms(1);  
    LCD_WR_REG_DATA(0x000E,0x2B00);    delayms(1);          
    LCD_WR_REG_DATA(0x001E,0x00B7);    delayms(1);         
    LCD_WR_REG_DATA(0x0001,0x2B3F);    delayms(1);           //Çý¶¯Êä³ö¿ØÖÆ320*240  0x6B3F
    LCD_WR_REG_DATA(0x0002,0x0600);   delayms(1);       
    LCD_WR_REG_DATA(0x0010,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0011,0x6070);    delayms(1);               //0x4030           //¶¨ÒåÊý¾Ý¸ñʽ  16λɫ
    LCD_WR_REG_DATA(0x0005,0x0000);   delayms(1);        ;
    LCD_WR_REG_DATA(0x0006,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0016,0xEF1C);    delayms(1);       
    LCD_WR_REG_DATA(0x0017,0x0003);    delayms(1);       
    LCD_WR_REG_DATA(0x0007,0x0233);   delayms(1);               //0x0233      
    LCD_WR_REG_DATA(0x000B,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x000F,0x0000);    delayms(1);                //ɨÃ迪ʼµØÖ·
    LCD_WR_REG_DATA(0x0041,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0042,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0048,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0049,0x013F);    delayms(1);       
    LCD_WR_REG_DATA(0x004A,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x004B,0x0000);   delayms(1);       
    LCD_WR_REG_DATA(0x0044,0xEF00);    delayms(1);       
    LCD_WR_REG_DATA(0x0045,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0046,0x013F);    delayms(1);       
    LCD_WR_REG_DATA(0x0030,0x0707);   delayms(1);       
    LCD_WR_REG_DATA(0x0031,0x0204);    delayms(1);       
    LCD_WR_REG_DATA(0x0032,0x0204);    delayms(1);       
    LCD_WR_REG_DATA(0x0033,0x0502);    delayms(1);       
    LCD_WR_REG_DATA(0x0034,0x0507);    delayms(1);       
    LCD_WR_REG_DATA(0x0035,0x0204);    delayms(1);       
    LCD_WR_REG_DATA(0x0036,0x0204);    delayms(1);       
    LCD_WR_REG_DATA(0x0037,0x0502);    delayms(1);       
    LCD_WR_REG_DATA(0x003A,0x0302);    delayms(1);       
    LCD_WR_REG_DATA(0x003B,0x0302);    delayms(1);       
    LCD_WR_REG_DATA(0x0023,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0024,0x0000);    delayms(1);       
    LCD_WR_REG_DATA(0x0025,0x8000);    delayms(1);       
    LCD_WR_REG_DATA(0x004f,0);        //ÐÐÊ×Ö·0
    LCD_WR_REG_DATA(0x004e,0);        //ÁÐÊ×Ö·0
                LCD_WR_REG(0x0022);
}

void SetCursor(uint16_t x,uint16_t y)
{
        LCD_WR_REG_DATA(0x004e,y); //ÁÐÐÊ×µØÖ·
        LCD_WR_REG_DATA(0x004f,x); //ÐÐÊ×µØÖ·
}
//ÇåÆÁº¯Êý
//Color:ÒªÇåÆÁµÄÌî³äÉ«
void LCD_Clear(uint16_t Color)
{
        uint8_t VH,VL;
        uint16_t i,j;
        VH=Color>>8;
        VL=Color;       
//        Address_set(80,120,80,240); //startx starty endx   endy  ÎÞÏÖÏó
//                Address_set(0,120,0,240); //startx starty endx   endy  ÎÞÃ÷ÏÔÏÖÏó
//        Address_set(0,80,0,80); //startx starty endx   endy  ÎÞÃ÷ÏÔÏÖÏó
//        Address_set(0,0,239,319); //startx starty endx   endy  °ëÆÁË¢³ö
//        Address_set(0,0,80,80); //startx starty endx   endy  ´Ó00 ¿ªÊ¼ Ë¢³ö80*80µÄ·½ÐÎ
//        Address_set(0,0,140,80); //startx starty endx   endy   Ö»Ë¢³ö×ó²àÒ»µã  ´óÔ¼20*80
//        Address_set(0,0,120,80); //startx starty endx   endy   ´Ó0 0¿ªÊ¼Ë¢³ö120*80
        //        Address_set(0,0,128,80);        //×ó²àË¢³ö8*80µÄС±ß¿ò
        Address_set(0,0,239,319); //startx starty endx   endy  °ëÆÁË¢³ö
   for(i=0;i<240;i++)
         {
          for (j=0;j<320;j++)
                   {
                 LCD_WR_DATA8(VH,VL);
                                //        Delay(100);
            }

          }
}
//ÔÚÖ¸¶¨Î»ÖÃÏÔʾһ¸öºº×Ö(32*33´óС)
//dcolorΪÄÚÈÝÑÕÉ«£¬gbcolorΪ±³¾²ÑÕÉ«
void showhanzi(uint16_t  x,uint16_t  y,uint16_t index)       
{  
        uint8_t i,j;
        uint8_t *temp=hanzi;   
    Address_set(x,y,x+31,y+31); //ÉèÖÃÇøÓò      
        temp+=index*128;       
        for(j=0;j<128;j++)
        {
                for(i=0;i<8;i++)
                {                      
                         if((*temp&(1<<i))!=0)
                        {
                                LCD_WR_DATA(POINT_COLOR);
                        }
                        else
                        {
                                LCD_WR_DATA(BACK_COLOR);
                        }   
                }
                temp++;
         }
}

使用特权

评论回复
板凳
missing01|  楼主 | 2014-1-2 20:53 | 只看该作者

使用特权

评论回复
地板
missing01|  楼主 | 2014-1-2 20:53 | 只看该作者
int main()
{
        //         char str[16]="helloword";
//        SystemInit();
        LedInit();
//        Uart_NVICInit();
//        SysTick_Config(SysTick_CLKSource_HCLK);   //sistickʱÖÓԴΪAHB ʱÖÓ
        GPIO_ResetBits(GPIOA,GPIO_Pin_11);//µÆÁÁ
        Systick_NVICInit();
//        Delay(2000);
        Lcd_Init();
//       
/*        GPIO_SetBits(GPIOA,GPIO_Pin_11);//µÆÃðÁ
        Delay(2000);
        LCD_Clear(RED);  
        GPIO_ResetBits(GPIOA,GPIO_Pin_11);//µÆÁÁ
         Delay(3000);
         LCD_Clear(GREEN);
         Delay(3000);
LCD_WR_DATA8(0x0f,0x0f);
         */
        LCD_Clear(GREEN);
//        LCD_ShowString(0,0,str);
        while(1)
         {               
                GPIO_ResetBits(GPIOA,GPIO_Pin_11);
                 Delay(1000);  //1s
                 GPIO_SetBits(GPIOA,GPIO_Pin_11);
                 Delay(2000);  //1s
                 
         }
}

使用特权

评论回复
5
missing01|  楼主 | 2014-1-2 20:55 | 只看该作者
每次在main中刷屏就刷出一半来  ,在左半部分操作很好    能刷出想要的形状,但是在右半部分 什么操作都失灵。这是什么原因呢

使用特权

评论回复
6
missing01|  楼主 | 2014-1-3 08:57 | 只看该作者
跪求高手

使用特权

评论回复
7
fengye5340| | 2014-1-3 10:03 | 只看该作者
这个屏的驱动网上也是有参考资料的,楼主仔细看看屏幕的初始化部分,主要是初始化没做好。你贴的代码看不清楚,发个完整的代码上来看看吧。

使用特权

评论回复
8
海中水| | 2014-1-3 10:17 | 只看该作者
你在屏幕的未显示地方,打印一个点,如果还是不出来就说明你是不是在位置显示上做了限制。

使用特权

评论回复
9
missing01|  楼主 | 2014-1-3 17:54 | 只看该作者
fengye5340 发表于 2014-1-3 10:03
这个屏的驱动网上也是有参考资料的,楼主仔细看看屏幕的初始化部分,主要是初始化没做好。你贴的代码看不清 ...

我也是参照了网上的代码的,还有卖屏的也提供了个51的代码 我在底下上传下 源码,求帮忙看看了

使用特权

评论回复
10
missing01|  楼主 | 2014-1-3 17:56 | 只看该作者
这个是我刷屏的工程。我也怀疑是初试化的问题,但是换了网上的好几个初始化程序,要么不行,要么就是老样子

LCD1.rar

2.93 MB

使用特权

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

我在左半部分 显示一个矩形什么的 正常,但是移到右半部分就不行了  什么都显示不了

使用特权

评论回复
12
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);
    }
  }

使用特权

评论回复
13
海中水| | 2014-1-4 17:26 | 只看该作者
missing01 发表于 2014-1-3 18:20
我在左半部分 显示一个矩形什么的 正常,但是移到右半部分就不行了  什么都显示不了 ...

这个问题我之前也遇见过应该某个位置定位有问题,比如我的X坐标或者Y坐标的范围限制了等等。。。

使用特权

评论回复
14
missing01|  楼主 | 2014-1-6 08:36 | 只看该作者
fengye5340 发表于 2014-1-3 19:22
看着你的清屏函数很乱的,给你个参考程序,修改一下试试吧,我用的屏是没问题的,正常使用的
LCD_SSD1289_ ...

楼主这个应该是刷出彩调出来,实际跟我的是一样的哈

使用特权

评论回复
15
missing01|  楼主 | 2014-1-6 08:38 | 只看该作者
海中水 发表于 2014-1-4 17:26
这个问题我之前也遇见过应该某个位置定位有问题,比如我的X坐标或者Y坐标的范围限制了等等。。。 ...

但我的是全部刷屏 一共320*240个点,起始点的坐标是0 0  应该没啥大问题的呀  从00  刷到80  80  这个正方形就没有问题

使用特权

评论回复
16
清风致影| | 2014-1-6 08:57 | 只看该作者
很明显 不是初始化就是刷屏地址设置问题

使用特权

评论回复
17
fengye5340| | 2014-1-6 09:13 | 只看该作者
missing01 发表于 2014-1-6 08:36
楼主这个应该是刷出彩调出来,实际跟我的是一样的哈

坐标定位不一样的,楼主试试看看

使用特权

评论回复
18
missing01|  楼主 | 2014-1-8 09:30 | 只看该作者
昨儿改了初始化部分,妈的,只刷右边了。左边不刷了,谁能贴初始化代码。

使用特权

评论回复
19
wakojosin| | 2014-1-8 10:01 | 只看该作者
貌似我刚买了这款屏幕,等到手了研究一下,楼主用的是什么哪个型号单片机呢

使用特权

评论回复
20
missing01|  楼主 | 2014-1-8 10:32 | 只看该作者
wakojosin 发表于 2014-1-8 10:01
貌似我刚买了这款屏幕,等到手了研究一下,楼主用的是什么哪个型号单片机呢 ...

STM32F051

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

115

帖子

2

粉丝