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

📄 text.c

📁 UCOSII在STM32平台的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
QQ: 958664258
21IC用户名:banhushui
交流平台:http://blog.21ic.com/user1/5817/index.html
淘宝店铺:http://shop58559908.taobao.com
旺旺:半壶水电子
编译器版本:MDK3.5
******************************************************************************/
#include "..\APP\includes.h"



/*
24*24阵列Y-->>X变换
[BYTE0]   [BYTE3].......
D7        D7     
D6        D6     
.         .      
.         .      
D1        D1     
D0        D0     
[BYTE1]   [BYTE4]
D7        D7     
D6        D6     
.         .      
.         .      
D1        D1     
D0        D0     
[BYTE2]   [BYTE5]
D7        D7     
D6        D6     
.         .      
.         .      
D1        D1     
D0        D0    

--------------------------------->>

[BYTE0]     [BYTE1]     [BYTE2]
D7D6..D1D0  D7D6..D1D0  D7D6..D1D0
[BYTE3]     [BYTE4]     [BYTE5]
D7D6..D1D0  D7D6..D1D0  D7D6..D1D0
.
.
.
*/
//void MODY24(uint8 * p)
//{
// uint8 buf[72];
// uint8 i, j;
// uint8 temp;
// uint8 ix, iy;
// uint16 xy;
//   
//   memset(buf, 0, 72);
//   ix=0;iy=0;
//   for(j=0; j<72; j++)
//   {
//      temp=p[j];
//      for(i=0; i<8; i++)
//      {
//         xy=24*iy+ix;
//         if(isBit8(temp, 7-i))
//         {
//            SetBit8(buf[xy/8], 7-(xy%8));
//         }
//         iy++;
//      }
//      
//      if(iy==24)
//      {
//         iy=0;
//         ix++;//iy变化24次ix才变化1次
//      }
//   }
//   
//   memcpy(p, buf, 72);
//}

/*
//将8*8 Y方向阵列做 X方向转换
void MODY8(uint8 * p)
{
 uint8 buf[8];
 uint8 i, j;
 uint8 temp;
   
   memset(buf, 0, 8);
   for (j = 0; j < 8; j++)
   {
      temp=p[j];
      for (i = 0; i < 8; i++)
      {
         buf[i] <<= 1;
         if(isBit8(temp, i))
            //SetBit8(buf[i], 7-j); 
            SetBit8(buf[i], 0);
      }
   }
   memcpy(p, buf, 8);
}

//将8*16 Y方向阵列做 X方向转换(用于8*16 ASCII)
void MODY16(uint8 * p)
{
   MODY8(p);
   MODY8(p+8);
}

//将16*16 Y方向阵列做 X方向转换(主要用于16*16 汉字)
void MODY32(uint8 * p)
{uint8 temp[16];
 //uint8 i;

   MODY8(p);
   MODY8(p+8);
   
   memcpy(temp, p, 16);
   
   //p[0]=temp[0];
   p[1]=temp[8];
   p[2]=temp[1];
   p[3]=temp[9];
   p[4]=temp[2];
   p[5]=temp[10];
   p[6]=temp[3];
   p[7]=temp[11];
   
   p[8]=temp[4];
   p[9]=temp[12];
   p[10]=temp[5];
   p[11]=temp[13];
   p[12]=temp[6];
   p[13]=temp[14];
   p[14]=temp[7];
   p[15]=temp[15];
   
   MODY8(p+16);
   MODY8(p+24);
   
   memcpy(temp, p+16, 16);
   //p[16]=temp[0];
   p[17]=temp[8];
   p[18]=temp[1];
   p[19]=temp[9];
   p[20]=temp[2];
   p[21]=temp[10];
   p[22]=temp[3];
   p[23]=temp[11];
   
   p[24]=temp[4];
   p[25]=temp[12];
   p[26]=temp[5];
   p[27]=temp[13];
   p[28]=temp[6];
   p[29]=temp[14];
   p[30]=temp[7];
   p[31]=temp[15];
}
*/

/****************************************************************
函数名:LCD写1个8*16 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色 
          CharBackColor,字符背景颜色 
         ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/8个ASCII字符,竖向能显示20行
返回值:无

注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteEN(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
 u8* pbuf;
 u8 buf[16];
 
 u16 ix, iy;
   
   //GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
   GetASCIICode(buf, ASCIICode, 16);//取这个字符的显示代码
   pbuf = buf;
   
   for(iy=0; iy<16; iy++)//写16行
   {
      for(ix=0; ix<8; ix++)//写1行中的8列
      {
         if( isBit8(*pbuf, 7-ix)==0 )
         {
            ;
         }
         else
         {
            DrawPixel(x+ix, y, CharColor);
         }
      }
      pbuf++;
      y++;
   }
}


void LCDWriteEN16(u16 x, u16 y, u8 ASCIICode, u16 CharColor, u16 bkColor)
{
 u8* pbuf;
 u8 buf[16];
 
 u16 ix, iy;
   
   //GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
   GetASCIICode(buf, ASCIICode, 16);//取这个字符的显示代码
   pbuf = buf;
   
   for(iy=0; iy<16; iy++)//写16行
   {
      for(ix=0; ix<8; ix++)//写1行中的8列
      {
         if( isBit8(*pbuf, 7-ix)==0 )
         {
            DrawPixel(x+ix, y, bkColor);
         }
         else
         {
            DrawPixel(x+ix, y, CharColor);
         }
      }
      pbuf++;
      y++;
   }
}

/****************************************************************
函数名:LCD写1个16*24 ASCII字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色 
          CharBackColor,字符背景颜色 
         ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无

注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteEN24(u16 x, u16 y, u16 CharColor, u8 ASCIICode)
{
 u8* pbuf;
 u8 buf[48];
 
 u16 ix, iy;
   
   //GetASCIICode(buf, ASCIICode);//取这个字符的显示代码
   GetASCIICode(buf, ASCIICode, 24);//取这个字符的显示代码
   pbuf = buf;
   
   for(iy=0; iy<24; iy++)//写24行
   {
      for(ix=0; ix<8; ix++)//写1行中的8列
      {
         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++;
      y++;
   }
}

/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色 
          CharBackColor,字符背景颜色 
         ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示30个ASCII字符,竖向能显示20行
返回值:无

注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteCN(u16 x, u16 y, u16 CharColor, u8 *p)
{
 u8* pbuf;
 u8 buf[32];
 
 u16 ix, iy;
   
   GetChineseCode(buf, p);//取这个字符的显示代码
   pbuf = buf;
   
   for(iy=0; iy<16; iy++)//写16行
   {
      for(ix=0; ix<8; ix++)//写1行中的左8列
      {
         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++;
      y++;
   }
}

/****************************************************************
函数名:LCD写1个16*16 汉字字符函数
入口参数:x,横向坐标,由左到右分别是0~240-1 
          y,纵向坐标,由上到下分别为0~320-1
          CharColaor,字符的颜色 
          CharBackColor,字符背景颜色 
         ASCIICode,相应字符的ASCII码
也就是说,320240分辨率的显示屏,横向能显示240/16个ASCII字符,竖向能显示20行
返回值:无

注意!!!!!如果单独使用此函数则应该加上LCD_Rs_H()和CS_TFT_H();为了优化系统省去了
这个指令,假设此函数执行的上一条语句是写命令,(RS_L情况)则写入将出错
,因为ILI9320认为当RS_L时写入的是命令
*****************************************************************/
void LCDWriteCN24(u16 x, u16 y, u16 CharColor, u8 *p)
{
 u8* pbuf;
 u8 buf[72];
 
 u16 ix, iy;
   
   GetChineseCode24(buf, p);//取这个字符的显示代码
   //MODY24(buf);
   pbuf = buf;
   
   for(iy=0; iy<24; iy++)//写24行
   {
      for(ix=0; ix<8; ix++)//写1行中的左8列

⌨️ 快捷键说明

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