⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text.c

📁 UCOSII在STM32平台的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
      {
         if( isBit8(*pbuf, 7-ix)==0 )
         {
            ;
         }
         else
         {
            DrawPixel(x+ix, y, CharColor);
         }
      }
      
      pbuf++;
      for(ix=0; ix<8; ix++)//写1行中的中8列
      {
         if( isBit8(*pbuf, 7-ix)==0 )
         {
            ;
         }
         else
         {
            DrawPixel(x+ix+8, y, CharColor);
         }
      }
      
      pbuf++;
      for(ix=0; ix<8; ix++)//写1行中的右8列
      {
         if( isBit8(*pbuf, 7-ix)==0 )
         {
            ;
         }
         else
         {
            DrawPixel(x+ix+16, y, CharColor);
         }
      }
      
      pbuf++;
      y++;
   }
}


Rect RectText={0, 0, 240, 320};//文字显示区域

//设置文字显示区域
void SetRectText(u16 x, u16 y, u16 w, u16 h)
{
   RectText.x=x;
   RectText.y=y;
   RectText.w=w;
   RectText.h=h;
}

#define RECT_XMAX   (RectText.x+RectText.w)
#define RECT_YMAX   (RectText.y+RectText.h)
#define START_X     RectText.x
#define START_Y     RectText.y
/************************************************************
函数名:LCD写字符串函数8*16ASCII,16*16汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色
          *p 指向要写的字符串
返回值:无

增加显示区域判断,所以使用是应该先设置显示区域
*************************************************************/
void LCD_WriteString16(uint16 x, uint16 y, uint16 CharColor, char* p)
{
 u8 dat;
   
   for(;*p!=0;p++)
   {
      if(( (u8)*p&0x80)==0)//英文
      {
         if(*p=='\r')//回车
         {
            x=START_X;
            continue;
         }
         if(*p=='\n')//换行
         {
            y+=16;
            if(y > RECT_YMAX-16)//超过行显示
               y=START_Y;
            continue;
         }

         dat=*p-0x20;  
         
         if(x > RECT_XMAX-8)//不够写1个字符就移到下一行
         {
            x=START_X;
           
            y+=16;
            if(y > RECT_YMAX-16)
               y=START_Y;
         }
         LCDWriteEN(x, y, CharColor, dat);
         x+=8;
      }
      else//中文
      {
         if(x > RECT_XMAX-16)//不够写1个字符就移到下一行
         {
            x=START_X;
           
            y+=16;
            if(y > RECT_YMAX-16)
               y=START_Y;
         }
         LCDWriteCN(x, y, CharColor, (u8*)p);
         x+=16;
         p++;
      }
   }
}
//下面的是没有显示区域判断

//{
// u8 dat;
//   
//   for(;*p!=0;p++)
//   {
//      if((*p&0x80)==0)//英文
//      {
//         if(*p=='\r')//回车
//         {
//            x=0;
//            continue;
//         }
//         if(*p=='\n')//换行
//         {
//            y+=16;
//            if(y > YMAX-16)
//               y=0;
//            continue;
//         }
//
//         dat=*p-0x20;  
//         
//         if(x > XMAX-8)//不够写1个字符就移到下一行
//         {
//            x=0;
//           
//            y+=16;
//            if(y > YMAX-16)
//               y=0;
//         }
//         LCDWriteEN(x, y, CharColor, dat);
//         x+=8;
//      }
//      else//中文
//      {
//         if(x > XMAX-16)//不够写1个字符就移到下一行
//         {
//            x=0;
//           
//            y+=16;
//            if(y > YMAX-16)
//               y=0;
//         }
//         LCDWriteCN(x, y, CharColor, (u8*)p);
//         x+=16;
//         p++;
//      }
//      
//   }
//}

void LCD_WriteString(uint16 x, uint16 y, uint16 CharColor, char* p, uint8 font)
{
    if(font==16)
       LCD_WriteString16(x, y, CharColor, p);
    else //if(font==24)
       LCD_WriteString24(x, y, CharColor, p);
}

/************************************************************
函数名:LCD写字符串函数16*24ASCII,24*24汉字
功能:向指定位置写入一个或多个字符,本函数带自动换行功能
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色
          *p 指向要写的字符串
返回值:无
*************************************************************/
void LCD_WriteString24(uint16 x, uint16 y, uint16 CharColor, char* p)
{
 u8 dat;
   
   for(; *p!=0; p++)
   {
      if(( (u8)*p&0x80)==0)//英文
      {
         if(*p=='\r')//回车
         {
            x=START_X;
            continue;
         }
         else if(*p=='\n')//换行
         {
            y+=24;
            if(y > RECT_YMAX-24)
               y=START_Y;
            continue;
         }
         else if(*p=='\1')         //自定义图标.上
            dat='~'-' '+1;
         else if(*p=='\2')    //自定义图标.下
            dat='~'-' '+2;
         else if(*p=='\3')    //自定义图标.左
            dat='~'-' '+3;
         else if(*p=='\4')    //自定义图标.右
            dat='~'-' '+4;
//         else if(*p=='\\')    //自定义图标
//         {
//            p++;
//            if(*p=='U')         //自定义图标.上
//               dat='~'-' '+1;
//            else if(*p=='D')    //自定义图标.下
//               dat='~'-' '+2;
//            else if(*p=='L')    //自定义图标.左
//               dat='~'-' '+3;
//            else// if(*p=='R')    //自定义图标.右
//               dat='~'-' '+4;
//         }
         else //其它正常字符
            dat=*p-0x20;  
         
         if(x > RECT_XMAX-16)//不够写1个字符就移到下一行
         {
            x=START_X;
           
            y+=24;
            if(y > RECT_YMAX-24)
               y=START_Y;
         }
         LCDWriteEN24(x, y, CharColor, dat);
         x+=16;
      }
      else//中文
      {
         if(x > RECT_XMAX-24)//不够写1个字符就移到下一行
         {
            x=START_X;
           
            y+=24;
            if(y > RECT_YMAX-24)
               y=START_Y;
         }
         LCDWriteCN24(x, y, CharColor, (u8*)p);
         x+=24;
         p++;
      }
   }
}


//下面的是没有显示区域判断

//{
// u8 dat;
//   
//   for(;*p!=0;p++)
//   {
//      if((*p&0x80)==0)//英文
//      {
//         if(*p=='\r')//回车
//         {
//            x=0;
//            continue;
//         }
//         if(*p=='\n')//换行
//         {
//            y+=24;
//            if(y > YMAX-24)
//               y=0;
//            continue;
//         }
//
//         dat=*p-0x20;  
//         
//         if(x > XMAX-16)//不够写1个字符就移到下一行
//         {
//            x=0;
//           
//            y+=24;
//            if(y > YMAX-24)
//               y=0;
//         }
//         LCDWriteEN24(x, y, CharColor, dat);
//         x+=16;
//      }
//      else//中文
//      {
//         if(x > XMAX-24)//不够写1个字符就移到下一行
//         {
//            x=0;
//           
//            y+=24;
//            if(y > YMAX-24)
//               y=0;
//         }
//         LCDWriteCN24(x, y, CharColor, (u8*)p);
//         x+=24;
//         p++;
//      }
//   }
//}

/*********************************************************
函数名:SPI取ASCII码子程序
输入参数:u8 ASCII 输入的ASCII码,如'A'
          BaseAddr 基址 即ASCII显示代码在FLASH中的启示位置
返回值:无
说明:输入一个ASCII码,取得它在SPI FLASH中的16Byte显示代码
并将其存放到一个16byte的ASCII显示缓冲CharBuffer[]中
**********************************************************/
//void GetASCIICode(u8* buf, u8 ASCII)
void GetASCIICode(u8* buf, u8 ASCII, u8 dot)
{uint32 address;
 u8 len;
   
   //address=0x3fe40+16UL*ASCII;
   if(dot==16)
      address=0x40000+16UL*ASCII, len=16;
   else if(dot==24)
      address=0xBB000+48UL*ASCII, len=48;
   else
      address=0, len=0;
      
   Read_Flash_Page ( address, len, buf );
}

/*********************************************************
函数名:SPI中文显示码子程序
输入参数:u16 ASCII 输入的中文,如"我"
          BaseAddr 基地 即显示代码在FLASH中的起始位置
返回值:无
说明:输入一个中文,取得它在SPI FLASH中的32Byte显示代码
并将其存放到一个32byte的显示缓冲ChineseBuffer[]
**********************************************************/
void GetChineseCode(u8* dot, u8 *p)
{//uchar m;
 //uint8 dot[32];
 uint32 address;

   //address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
   address=32UL*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) );
   //address+=HZK_FlashAddress;
   Read_Flash_Page ( address, 32, dot );
}

/*********************************************************
函数名:SPI中文显示码子程序
输入参数:u16 ASCII 输入的中文,如"我"
          BaseAddr 基地 即显示代码在FLASH中的起始位置
返回值:无
说明:输入一个中文,取得它在SPI FLASH中的32Byte显示代码
并将其存放到一个32byte的显示缓冲ChineseBuffer[]
**********************************************************/
void GetChineseCode24(u8* dot, u8 *p)
{//uchar m;
 //uint8 dot[32];
 uint32 address;

   //address=(uint32)32*( ((*p)-0xa1)*94 + ((*(p+1))-0xa1) )+4096;
   address=72UL*( ((*p)-15-0xa1)*94 + ((*(p+1))-0xa1) );
   address+=0x41000;
   Read_Flash_Page ( address, 72, dot );
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -