LCD 不显示东西

2019-07-16 10:43发布

# include "LCD_GUI.h"
# include "LCD_Driver.h"
# include "LCD_Font.h"
const unsigned char HZtable[][32]=
{
{0x00,0x00,0x79,0xF8,0x09,0x08,0x09,0x08,0x79,0xF8,0x40,0x40,0x43,0xFC,0x42,0x44,
0x7A,0x44,0x0A,0x44,0x0B,0xFC,0x08,0x40,0x08,0x48,0x08,0x44,0x28,0x7E,0x13,0xC4},/*"强",0*/
{0x10,0x00,0x11,0xFE,0xFE,0x00,0x20,0xFC,0x20,0x84,0x50,0x84,0x50,0xFC,0xFE,0x00,
0x11,0xFE,0x11,0x22,0x1D,0xFE,0xF1,0x22,0x11,0x22,0x11,0xFE,0x11,0x02,0x10,0x00},/*"辐",1*/
{0x08,0x08,0x10,0x08,0x3F,0x08,0x21,0x08,0x3F,0xFE,0x21,0x08,0x3F,0x08,0x21,0x48,
0x21,0x28,0x7F,0x28,0x05,0x28,0x09,0x08,0x11,0x08,0x21,0x08,0x45,0x28,0x02,0x10},/*"射",2*/
{0x00,0x00,0x7D,0xFE,0x10,0x20,0x10,0x20,0x10,0x60,0x7C,0x60,0x10,0xB0,0x10,0xA8,
0x11,0x24,0x1D,0x26,0x62,0x22,0x04,0x22,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x20},/*"环",3*/
{0x00,0x40,0x20,0x20,0x23,0xFC,0x21,0x08,0x20,0x90,0xFB,0xFC,0x20,0x00,0x21,0xF8,
0x21,0x08,0x21,0xF8,0x21,0x08,0x39,0xF8,0xE0,0x90,0x40,0x92,0x01,0x12,0x02,0x0E},/*"境",4*/
{0x01,0x00,0x00,0x80,0x3F,0xFC,0x20,0x00,0x22,0x00,0x21,0x08,0x30,0x8C,0x28,0xC8,
0x24,0x90,0x24,0x90,0x26,0x20,0x44,0x20,0x40,0x40,0x5F,0xFE,0x80,0x00,0x00,0x00},/*"应",5*/
{0x04,0x00,0x04,0x00,0x0F,0xE0,0x08,0x40,0x10,0x80,0x2F,0xF0,0x00,0x10,0x0F,0xF0,
0x00,0x10,0x0F,0xF0,0x01,0x00,0x28,0x84,0x28,0x92,0x68,0x12,0x07,0xF0,0x00,0x00},/*"急",6*/
{0x10,0x20,0x18,0x20,0x10,0x20,0x20,0x20,0x3E,0x20,0x22,0x30,0x62,0x28,0x52,0x26,
0x94,0x24,0x14,0x20,0x08,0x20,0x14,0x20,0x23,0x20,0x40,0xC0,0x80,0x3E,0x00,0x00},/*"处",7*/
{0x3F,0xF8,0x24,0x48,0x24,0x48,0x3F,0xF8,0x01,0x00,0x7F,0xFC,0x02,0x00,0x1F,0xF0,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0xFF,0xFE},/*"置",8*/
{0x10,0x00,0x10,0xF8,0x10,0x88,0xFE,0x88,0x10,0x88,0x10,0x88,0x38,0x88,0x34,0x88,
0x54,0x88,0x50,0x88,0x91,0x08,0x11,0x0A,0x12,0x0A,0x12,0x0A,0x14,0x06,0x10,0x00},/*"机",9*/
{0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00},/*"器",10 :*/
{0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00},/*"统",11;*/
{0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,
0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00},/*"湿",12*/
{0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E},/*"度",13*/
{0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00},/*"温",14*/
{0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,
0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00},/*"℃",15*/
{0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE},/*"电",16*/
{0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x2F,0xFC,
0x20,0x80,0x20,0x80,0x20,0x90,0x20,0x88,0x20,0x88,0x40,0x80,0x5F,0xFE,0x80,0x00},/*"压",17*/
{0x20,0x20,0x20,0x28,0x20,0x24,0x23,0xFE,0xF8,0x20,0x22,0xA0,0x72,0xA4,0x6A,0xA4,
0x67,0xE8,0xA2,0xA8,0xA2,0x90,0x24,0x92,0x24,0xAA,0x28,0x4A,0x20,0x86,0x20,0x02},/*"械",18 B*/
{0x3C,0x20,0x25,0xFE,0x3C,0x88,0x21,0xFE,0x7C,0x20,0xA5,0xFE,0x3C,0x20,0x00,0x20,
0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x50,0x10,0x20},/*"臂",19 C*/
{0x08,0x00,0x08,0x80,0x0B,0x3C,0x12,0x24,0x12,0x24,0x32,0x24,0x32,0x24,0x52,0x24,
0x92,0x24,0x12,0x24,0x12,0xB4,0x13,0x28,0x12,0x20,0x10,0x20,0x10,0x20,0x10,0x20},/*"仰",20 D*/
{0x10,0x40,0x10,0x20,0x17,0xFE,0x24,0x00,0x24,0x88,0x64,0x88,0x65,0x08,0xA5,0x7E,
0x27,0x08,0x25,0x48,0x25,0x28,0x25,0x28,0x29,0x08,0x29,0x08,0x31,0x28,0x21,0x10},/*"俯",21 E*/
{0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFE,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,
0x0F,0xF8,0x10,0x80,0x10,0x80,0x20,0x80,0x40,0x80,0x80,0x80,0x3F,0xFE,0x00,0x00},/*"左",22 F*/
{0x20,0x20,0x20,0x20,0x20,0x20,0xFD,0xFC,0x40,0x20,0x50,0x40,0x93,0xFE,0xFC,0x40,
0x10,0x80,0x11,0xFC,0x1C,0x04,0xF0,0x88,0x50,0x50,0x10,0x20,0x10,0x10,0x10,0x10},/*"转",23 G*/
{0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFE,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,
0x1F,0xF8,0x28,0x08,0x48,0x08,0x88,0x08,0x08,0x08,0x08,0x08,0x0F,0xF8,0x08,0x08},/*"右",24 H*/
{0x10,0x80,0x10,0x40,0x17,0xFC,0x20,0x00,0x23,0xF8,0x62,0x08,0x63,0xF8,0xA0,0x00,
0x2F,0xFE,0x28,0x02,0x23,0xF8,0x20,0x40,0x20,0x40,0x20,0x40,0x21,0x40,0x20,0x80},/*"停",25 I*/
{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x00,0x11,0x00,0x11,0xF8,0x11,0x00,
0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0xFF,0xFE,0x00,0x00},/*"止",26 J*/
{0x10,0x00,0x13,0xFC,0x10,0x84,0x10,0x88,0xFC,0x88,0x10,0x90,0x30,0x9C,0x38,0x84,
0x55,0x44,0x55,0x44,0x91,0x28,0x11,0x28,0x12,0x10,0x12,0x28,0x14,0x44,0x11,0x82},/*"极",27 K*/
{0x00,0x00,0x7B,0xF8,0x4A,0x08,0x52,0x08,0x53,0xF8,0x62,0x08,0x52,0x08,0x4B,0xF8,
0x4A,0x44,0x4A,0x48,0x6A,0x30,0x52,0x20,0x42,0x10,0x42,0x88,0x43,0x06,0x42,0x00},/*"限",28 L*/
{0x10,0x00,0x11,0xF0,0x11,0x10,0x11,0x10,0xFD,0x10,0x11,0x10,0x31,0x10,0x39,0x10,
0x55,0x10,0x55,0x10,0x91,0x10,0x11,0x12,0x11,0x12,0x12,0x12,0x12,0x0E,0x14,0x00},/*"机",29 M*/
{0x02,0x00,0x04,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF2,0x10,0x14,
0x10,0x18,0x7F,0xF0,0x00,0x50,0x00,0x90,0x03,0x10,0x1C,0x10,0xE0,0x50,0x00,0x20},/*"身",30 N*/
{0x10,0x10,0x08,0x10,0x08,0x20,0xFF,0xFE,0x00,0x00,0x3E,0x08,0x22,0x48,0x22,0x48,
0x3E,0x48,0x22,0x48,0x22,0x48,0x3E,0x48,0x22,0x08,0x22,0x08,0x2A,0x28,0x24,0x10},/*"前",31 O*/
{0x00,0x90,0x20,0x90,0x10,0x90,0x13,0xFC,0x00,0x90,0x00,0x90,0xF0,0x90,0x17,0xFE,
0x10,0x90,0x10,0x90,0x11,0x10,0x11,0x10,0x12,0x10,0x28,0x00,0x47,0xFE,0x00,0x00},/*"进",32 P*/
{0x00,0x10,0x00,0xF8,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xFE,0x10,0x00,0x10,0x00,
0x10,0x00,0x17,0xF8,0x14,0x08,0x24,0x08,0x24,0x08,0x44,0x08,0x87,0xF8,0x04,0x08},/*"后",33 Q*/
{0x03,0xF8,0x22,0x08,0x12,0x08,0x13,0xF8,0x02,0x08,0x02,0x08,0xF3,0xF8,0x12,0x44,
0x12,0x28,0x12,0x10,0x12,0x88,0x13,0x04,0x12,0x04,0x28,0x00,0x47,0xFE,0x00,0x00},/*"退",34 R*/
{0x00,0x00,0x7F,0xFC,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0xFF,0xFE,
0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x40,0x20},/*"开",35 S*/
{0x10,0x10,0x08,0x10,0x08,0x20,0x00,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,
0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,0x04,0x40,0x08,0x20,0x30,0x18,0xC0,0x06},/*"关",36 T*/
{0x01,0x00,0x02,0x00,0x04,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10},/*"自",37 U*/
{0x00,0x40,0x00,0x40,0x7C,0x40,0x00,0x40,0x01,0xFC,0x00,0x44,0xFE,0x44,0x20,0x44,
0x20,0x44,0x20,0x84,0x48,0x84,0x44,0x84,0xFD,0x04,0x45,0x04,0x02,0x28,0x04,0x10},/*"动",38 V*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",39 W*/
{0x04,0x00,0x04,0x00,0x0F,0xE0,0x08,0x40,0x10,0x80,0x2F,0xF0,0x00,0x10,0x0F,0xF0,
0x00,0x10,0x0F,0xF0,0x01,0x00,0x28,0x84,0x28,0x92,0x68,0x12,0x07,0xF0,0x00,0x00},/*"急",40 X*/
{0x08,0x40,0x0C,0x20,0x0B,0xFE,0x10,0x00,0x11,0xF8,0x31,0x08,0x51,0xF8,0x90,0x00,
0x17,0xFE,0x14,0x02,0x11,0xFC,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0xA0,0x10,0x40},/*"停",41 Y*/
{0x10,0xA0,0x10,0x90,0x10,0x98,0x90,0x88,0x50,0x80,0x5F,0xFE,0x10,0xA0,0x10,0xA0,
0x31,0x20,0x51,0x20,0x91,0x10,0x12,0x10,0x12,0x08,0x14,0x0E,0x18,0x04,0x10,0x00},/*"状",42 Z*/
{0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x02,0x80,0x02,0x40,0x05,0x20,0x08,0x98,
0x30,0x06,0x01,0x00,0x04,0x88,0x24,0x84,0x24,0x12,0x64,0x12,0x43,0xF0,0x00,0x00},/*"态",43 [*/
{0x00,0x78,0x47,0x80,0x21,0x08,0x24,0x90,0x02,0x20,0x03,0xF8,0xE4,0x40,0x20,0x40,
0x27,0xFC,0x20,0x40,0x22,0x48,0x22,0x48,0x23,0xF8,0x50,0x00,0x8F,0xFE,0x00,0x00},/*"遥",44 */
{0x10,0x00,0x10,0x20,0x10,0x10,0xFD,0xFE,0x11,0x04,0x10,0x50,0x14,0x8C,0x19,0x04,
0x30,0x00,0xD1,0xFC,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x53,0xFE,0x20,0x00},/*"控",45 ]*/
{0x10,0xA0,0x10,0x90,0x10,0x98,0x90,0x88,0x50,0x80,0x5F,0xFE,0x10,0xA0,0x10,0xA0,
0x31,0x20,0x51,0x20,0x91,0x10,0x12,0x10,0x12,0x08,0x14,0x0E,0x18,0x04,0x10,0x00},/*"状",46 ^*/
{0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x02,0x80,0x02,0x40,0x05,0x20,0x08,0x98,
0x30,0x06,0x01,0x00,0x04,0x88,0x24,0x84,0x24,0x12,0x64,0x12,0x43,0xF0,0x00,0x00},/*"态",47 -*/
{0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,
0x04,0x80,0x04,0x40,0x08,0x60,0x08,0x30,0x10,0x18,0x20,0x0E,0x40,0x04,0x00,0x00},/*"人",48 `*/
{0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00},/*"系",49 a*/
{0x01,0xFC,0x3C,0x44,0x24,0x44,0x24,0x44,0x24,0x94,0x3D,0x08,0x26,0xFC,0x24,0x84,
0x3C,0x84,0x24,0xFC,0x00,0x84,0x28,0x88,0x24,0x44,0x66,0x66,0xC2,0x22,0x00,0x00},/*"照",50 b*/
{0x00,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,0x44,0xFC,0x7C,0x84,0x44,0x84,0x44,0x84,
0x44,0xFC,0x7C,0x84,0x00,0x84,0x01,0x04,0x01,0x04,0x02,0x04,0x04,0x14,0x00,0x08},/*"明",51 c*/
};
void LCD_WriteMenuChar(unsigned int start_x, unsigned int start_y,
           unsigned int char_clr,
           unsigned int bk_clr,
           unsigned char char_data
        )
{
unsigned char show_cnt = 0;
unsigned char bit_cnt = 0;

start_x <<= 3;       //一个英文字符占区域为8*16   
start_y <<= 4;

char_data = Get_CharOffset(char_data); //获取字模显示的偏移量   
for(show_cnt = 0; show_cnt < 16; show_cnt ++)
{          //-> 1010 1100  ->   
           //-> 1100 1000 ->...   
  for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
  {
   if( Letter[char_data][show_cnt] & BIT(7 - bit_cnt) )
   {        
    LCD_DrawPoint(start_x + bit_cnt,
         start_y + show_cnt,
         char_clr);
   }
   else
   {        //获取背景 {MOD},并进行半透明转换  
    //temp_clr = LCD_RGB565Trans(LCD_Get_Point(start_x + bit_cnt, start_y + show_cnt),
     //      bk_clr);
    bk_clr = LCD_GetPoint(start_x + bit_cnt, start_y + show_cnt);
    LCD_DrawPoint(start_x + bit_cnt,
         start_y + show_cnt,
         bk_clr);
   }
  }
}
}
unsigned char Get_CharOffset(unsigned char char_data)
{
if(char_data >= ' ' && char_data <= '}')
{
  char_data -= ' ';      //字符偏移从空格开始   
}
else
{
  char_data = ' ';      //如无匹配字符以空格代替   
}
return char_data;
}
/*
void LCD_WriteString(unsigned char start_x, unsigned char start_y,
       unsigned int char_clr,
          unsigned int bk_clr,
       const unsigned char *p_str)
{
while(*p_str)
{
  LCD_WriteChar(start_x, start_y,  //调用显示单个字符显示函数   
       char_clr, bk_clr,
       *p_str);
  if(start_x < 29)
  {
    start_x ++;
  }
        else if(start_y < 19)
        {
          start_x = 0;
         start_y ++;
        }
        else
        {
         start_x = 0;
          start_y = 0;
        }
  p_str ++;       //指针自加      
}
}
*/
void Set_CharWindow(unsigned int Start_X, unsigned int Start_Y)
{
unsigned int X_Region = 0;
unsigned int Y_Region = 0;
#if LCD_CHAR_HORIZONTAL > 0
Start_X <<= 3;        //一个英文字符占区域为8*16   
Start_Y <<= 4;

X_Region = Start_X + 7;      //一行可以显示30个字符   
Y_Region = Start_Y + 15;     //一列可以显示20个字符   
#else
Start_X <<= 4;        //一个英文字符占区域为8*16   
Start_Y <<= 3;

X_Region = Start_X + 15;     //一行可以显示15个字符   
Y_Region = Start_Y + 7;      //一列可以显示40个字符
#endif
LCD_SetWindow(Start_X, Start_Y, X_Region, Y_Region);
}
/*
void LCD_WriteChar(unsigned int Start_X, unsigned int Start_Y,
        unsigned int Char_Clr,
        unsigned int Bk_Clr,
        unsigned char ch_Char)
{
unsigned char show_cnt = 0;
unsigned char bit_cnt = 0;

ch_Char = Get_CharOffset(ch_Char);  //获取字模显示的偏移量   
Set_CharWindow(Start_X, Start_Y);  //设置起始坐标,xy是8*16的方格坐标

LCD_WriteGRAM_EN();
for(show_cnt = 0; show_cnt < 16; show_cnt ++)
{          //-> 1010 1100  ->   
           //-> 1100 1000 ->...   
  for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
  {
   if( Letter[ch_Char][show_cnt] & BIT(7 - bit_cnt) )
   {
    LCD_DATA_OUT(Char_Clr);
   }
   else
   {
    LCD_DATA_OUT(Bk_Clr);
   }
  }
}
LCD_WR_END();

LCD_SetWindow(0, 0, X_END, Y_END);  //恢复全屏作图区域     
}
*/
void LCD_WriteChar(unsigned int Start_X, unsigned int Start_Y,
        unsigned int Char_Clr,
        unsigned int Bk_Clr,
        unsigned char ch_Char)
{
unsigned char show_cnt = 0;
unsigned char bit_cnt = 0;

ch_Char = Get_CharOffset(ch_Char);  //获取字模显示的偏移量   
Set_CharWindow(Start_X, Start_Y);  //设置起始坐标,xy是8*16的方格坐标

LCD_WriteGRAM_EN();
for(show_cnt = 0; show_cnt < 16; show_cnt ++)
{          //-> 1010 1100  ->   
           //-> 1100 1000 ->...   
  for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
  {
  #if LCD_CHAR_HORIZONTAL > 0
   if( Letter[ch_Char][show_cnt] & BIT(7 - bit_cnt) )
   {
    LCD_DATA_OUT(Char_Clr);
   }
   else
   {
    LCD_DATA_OUT(Bk_Clr);
   }
  #else
   if( Letter[ch_Char][16-show_cnt] & BIT(7 - bit_cnt) )
   {
    LCD_DATA_OUT(Char_Clr);
   }
   else
   {
    LCD_DATA_OUT(Bk_Clr);
   }
  #endif
  }
}
LCD_WR_END();

LCD_SetWindow(0, 0, X_END, Y_END);  //恢复全屏作图区域     
}
void Set_HZWindow(unsigned int Start_X, unsigned int Start_Y)
{
unsigned int X_Region = 0;
unsigned int Y_Region = 0;
#if LCD_CHAR_HORIZONTAL > 0
Start_X <<= 4;        //一个英文字符占区域为8*16   
Start_Y <<= 4;

X_Region = Start_X + 15;     //一行可以显示30个字符   
Y_Region = Start_Y + 15;     //一列可以显示20个字符   
#else
Start_X <<= 4;        //一个英文字符占区域为8*16   
Start_Y <<= 4;

X_Region = Start_X + 15;     //一行可以显示15个字符   
Y_Region = Start_Y + 15;     //一列可以显示40个字符
#endif
LCD_SetWindow(Start_X, Start_Y, X_Region, Y_Region);
}
void LCD_WriteHZ(unsigned int Start_X, unsigned int Start_Y,
        unsigned int Char_Clr,
        unsigned int Bk_Clr,
        unsigned char *p_str)
{

unsigned char nowchar = *p_str ++;
while( nowchar != 0 )
{
unsigned char show_cnt = 0;
unsigned char bit_cnt = 0;
signed char temp = 0;
nowchar -= 48;
Set_HZWindow(Start_X, Start_Y);   //设置起始坐标,xy是16*16的方格坐标
LCD_WriteGRAM_EN();
for(show_cnt = 0; show_cnt < 32; show_cnt ++)
{          //-> 1010 1100  ->   
           //-> 1100 1000 ->...
  if(show_cnt & BIT(0))
  {
   temp = 1;
  }
  else
  {
   temp = -1;
  }
     
  for(bit_cnt = 0; bit_cnt < 8; bit_cnt ++)
  {
   
  #if LCD_CHAR_HORIZONTAL > 0
   if( HZtable[nowchar][show_cnt] & BIT(7 - bit_cnt) )
   {
    LCD_DATA_OUT(Char_Clr);
   }
   else
   {
    LCD_DATA_OUT(Bk_Clr);
   }
  #else
   if( HZtable[nowchar][31-show_cnt + temp] & BIT(7-bit_cnt) )
   {
    LCD_DATA_OUT(Char_Clr);
   }
   else
   {
    LCD_DATA_OUT(Bk_Clr);
   }
  #endif
  }
}
LCD_WR_END();
LCD_SetWindow(0, 0, X_END, Y_END);  //恢复全屏作图区域
nowchar = *p_str ++;
Start_Y += 1;
}   
}
void LCD_WriteString(unsigned char Start_X, unsigned char Start_Y,
     unsigned int Char_Clr,
        unsigned int Bk_Clr,
     unsigned char *p_str,
     unsigned char is_transp)
{
#if LCD_CHAR_HORIZONTAL > 0
#else
  Start_X = CHAR_X_NUM - Start_X - 1;
  Start_X = (s8)Start_X;
#endif
while(*p_str)
{
  //计算坐标      
  if(*p_str == ' ')     //换行        
  {
   Start_X = 0;
   Start_Y ++;
   p_str ++;      //调过换行符,不用显示   
   continue;      //查询下一个字符     
  }
  else         //未遇到换行符则按正常显示坐标自加
  {
   //显示字符      
   if(is_transp)     //如果字符不为0则限制显示定长个字符
   {        //调用显示单个字符显示函数(较慢)
    LCD_WriteMenuChar(Start_X, Start_Y,
              Char_Clr, Bk_Clr,
              *p_str);
   }
   else
   {
    LCD_WriteChar(Start_X, Start_Y, //调用显示普通字符显示函数(较快)
           Char_Clr, Bk_Clr,
             *p_str);
   }
  #if LCD_CHAR_HORIZONTAL > 0
   Start_X ++;
   if(Start_X == CHAR_X_NUM)
   {
    Start_X = 0;
          Start_Y ++;
    if(Start_Y == CHAR_Y_NUM)
    {
     Start_Y = 0;
    }
   }
  #else
   Start_Y ++;
   if(Start_Y == CHAR_Y_NUM)
   {
    Start_Y = 0;
          Start_X --;
    if(Start_X < 0)
    {
     Start_X = CHAR_X_NUM - 1;
    }
   }
  #endif
   
  }
  
  //字符串指针自加     
  p_str ++;
}
}
////////////////////////////////////////////
//文本输出函数,前景 {MOD}和背景 {MOD}已经固定,使用块
//写,目的是达到的最快的文本显示   
void LCD_Print(const unsigned char *p_str)
{
static unsigned char XLine = 0;
static unsigned char YLine = 0;
//设置画笔前景和背景 {MOD}      
# define CHAR_CLR  0x0000
# define BK_CLR   0x07E0   
while(*p_str)
{
  //计算坐标      
  if(*p_str == ' ')     //换行        
  {
   XLine = 0;
   YLine ++;
   p_str ++;      //调过换行符,不用显示   
   continue;      //查询下一个字符     
  }
  else         //未遇到换行符则按正常显示坐标自加
  {
   //如果不是换行符则显示字符  
   LCD_WriteChar(XLine, YLine,  //调用显示普通字符显示函数(较快)
       CHAR_CLR, BK_CLR,
          *p_str);
  #if LCD_CHAR_HORIZONTAL > 0
   XLine ++;      //行号加1      
   if(XLine == CHAR_X_NUM)
   {
    XLine = 0;     //写满一行后行号清零   
    YLine ++;     //写满一行后列号加1     
    if(YLine == CHAR_Y_NUM)
    {
     YLine = 0;
     LCD_Clear(BK_CLR);
    }
   }
  #else
   YLine ++;      //行号加1      
   if(YLine == CHAR_Y_NUM)
   {
    YLine = 0;     //写满一行后行号清零   
    XLine ++;     //写满一行后列号加1     
    if(XLine == CHAR_X_NUM)
    {
     XLine = 0;
     LCD_Clear(BK_CLR);
    }
   }
  #endif
  }
  
  //字符串指针自加     
  p_str ++;
}
}
//数字显示函数        
const unsigned char Number[] = {'0', '1', '2', '3','4', '5', '6', '7','8', '9',
        'A', 'B', 'C', 'D', 'E', 'F'};
void LCD_WriteNumber(unsigned long data, unsigned char ch_Dot)
{
# define DIGIT_SHOW  10     //最多可以显示10位
signed char digit_sum=0;
signed char digit=0;

static unsigned char NumberBuffer[] = "0123456789";
for(digit_sum = 0; digit_sum < DIGIT_SHOW; digit_sum ++)
{
  digit = data%10;     //求取最低位      
  data /= 10;       //十进制左移      
  NumberBuffer[digit_sum]=Number[digit];
  if(data == 0)
  {
   break;       //如果已经移到了最高位则跳出循环
  }
}
for(digit = 0; digit <= digit_sum; digit ++)
{
#if LCD_CHAR_HORIZONTAL > 0
  LCD_WriteChar(digit,0,0,1234,NumberBuffer[digit_sum - digit]);
#else
  LCD_WriteChar(0,digit,0,1234,NumberBuffer[digit_sum - digit]);
#endif
}
}
//
void LCD_WriteHexNumber(u16 x, u16 y, unsigned long data, unsigned char is_cap)
{
# define DIGIT_SHOW  10     //最多可以显示10位
signed char digit_sum=0;
signed char digit=0;

static unsigned char NumberBuffer[] = "ff ff ff ff ff ff";
for(digit_sum = 0; digit_sum < DIGIT_SHOW; digit_sum ++)
{
  digit = data%16;     //求取最低位      
  data /= 16;       //十进制左移      
  
  if(!(digit_sum % 3))
  {
   NumberBuffer[digit_sum ++] = ' ';
  }
  NumberBuffer[digit_sum]=Number[digit];
  
  if(data == 0)
  {
   break;       //如果已经移到了最高位则跳出循环
  }
}
if(digit_sum == 2)
{
  NumberBuffer[digit_sum] = '0';
  digit_sum += 1;
}
for(digit = 0; digit <= digit_sum; digit ++)
{
  LCD_WriteChar(x, y+digit,0,1234,NumberBuffer[digit_sum - digit]);
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。