STemWin在STM32上移植驱动12864屏ST7920

2019-07-14 15:12发布

     我是用串口驱动12864点阵屏(ST7920)的,现在已经用调用字库设计了菜单。后来想把节目做的绚烂一些,所以想到在STM32F105上移植STemWin。

     参考网上的一些攻略,已经把打点、画线等底层函数写好,且修改了有关文件。但调用STemWin的函数,就是不理会呢!
/******************下面是打点和读点函数,测试可用**********************/
     void LCM_PutPixel(uint16_t x, uint16_t y, uint8_t color)
{   
        uint16_t newHalfWordValue;
        uint8_t xHalfWordPlace,xHolfWordOfBit;
        
        if((x>=128)||(y>=64))
                return;
        
        xHalfWordPlace = x / 16;  //
        
        if(y >= 32)
        {   
                y = y - 32;
                xHalfWordPlace = xHalfWordPlace + 8;
        }

        newHalfWordValue = localcachebuf[y][xHalfWordPlace];        
        xHolfWordOfBit = x % 0x10;   
        if(0 == color)
        {
                newHalfWordValue &= clearBitTable[xHolfWordOfBit];
        }
        else
        {
                newHalfWordValue |= setBitTable[xHolfWordOfBit];
        }

        localcachebuf[y][xHalfWordPlace]=newHalfWordValue;
}

bool LCM_GetPixel(uint16_t x, uint16_t y)
{
        uint16_t oldHalfWordValue;
  uint8_t xHalfWordPlace,xHolfWordOfBit;

  xHalfWordPlace = x / HALF_WORD_OF_ROWS;

  if(y >= 32)
        {   
                y = y - 32;
    xHalfWordPlace = xHalfWordPlace + 8;
  }

  oldHalfWordValue = localcachebuf[y][xHalfWordPlace];
        xHolfWordOfBit = x % 0x10;
        oldHalfWordValue=oldHalfWordValue & setBitTable[xHolfWordOfBit];
  return oldHalfWordValue << xHolfWordOfBit;
}

/*******************刷屏函数  在RAM中开辟1024字节存放显示内容,在级别较低的任务中用SPI写************************/
void LCM_Refresh()
{
        uint16_t x,y,i;
        for(y=0;y<32;y++)
        {               
                LCM_WriteCommand(0x80+y);
                Delay_CLK(120);
                LCM_WriteCommand(0x80);                        
                Delay_CLK(120);                                
                for(x=0;x<8;x++)
                {                                                
                        i=localcachebuf[y][x];
                        LCM_WriteData(i>>8);
                        Delay_CLK(120);
                        LCM_WriteData((uint8_t)i);
                        Delay_CLK(120);                                       
                }
        }
        
        for(y=0;y<32;y++)        
        {
                LCM_WriteCommand(0x80+y);
                Delay_CLK(120);
                LCM_WriteCommand(0x88);                        
                Delay_CLK(120);                                
                for(x=0;x<8;x++)
                {                                                
                        i=localcachebuf[y][x+8];
                        LCM_WriteData(i>>8);
                        Delay_CLK(120);
                        LCM_WriteData((uint8_t)i);
                        Delay_CLK(120);                                       
                }               
        }                 
        LCM_WriteCommand(0x36);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
cfdwerwer
1楼-- · 2019-07-14 16:53


在main.c中
        InitLCD();
        GUI_X_Init();
        GUI_SetBkColor(GUI_WHITE);
  GUI_SetColor(GUI_BLACK);
        GUI_DrawCircle(60,60,10);
                LCM_Refresh();
        while(1)
        {
        }


没有动静
cfdwerwer
2楼-- · 2019-07-14 21:10
主要参考 http://bbs.armfly.com/read.php?tid=1678 配置的,却不成哟
Dipper123321321
3楼-- · 2019-07-15 00:53
之前也用过这款12864,控制起来很繁琐,显示字符坐标夸字节。
后来改用这款完美解决,自带字库,绘图(画线,画点,画圆)功能,坐标定位横向纵向均以像素点为单位。
分享资料:http://pan.baidu.com/s/1c1Ic1kk
april_yu
4楼-- · 2019-07-15 01:31
 精彩回答 2  元偷偷看……
ctwewer
5楼-- · 2019-07-15 05:44
本帖最后由 wenyangzeng 于 2018-1-4 11:23 编辑

    运行STemWin要启用CRC校验:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);

另外ST7920驱动STemWin好像没有支持

peternie
6楼-- · 2019-07-15 09:01
12864 点阵直接写内存就好,GUI效果用STemWin有点浪费内存,非要用字库嘛,GB2312不是很多点阵的选择。而且小。

一周热门 更多>