//显示鼠标的坐标值 //x,y:在LCD上显示的坐标位置 //pos:坐标值 void Mouse_Show_Pos(u16 x,u16 y,short pos) { if(pos<0) { LCD_ShowChar(x,y,'-',16,0); //显示负号 pos=-pos; //转为正数 }else LCD_ShowChar(x,y,' ',16,0); //去掉负号 LCD_ShowNum(x+8,y,pos,5,16); //显示值 }
//显示曲目索引 //index:当前索引 //total:总文件数 void audio_index_show(u16 index,u16 total) { //显示当前曲目的索引,及总曲目数 LCD_ShowxNum(60+0,230,index,3,16,0X80); //索引 LCD_ShowChar(60+24,230,'/',16,0); LCD_ShowxNum(60+32,230,total,3,16,0X80); //总曲目 }
/****************************************************************** 函数名 LCD_ShowNum 作者: Anti_CDQ 日期: 2017-09-10 功能: 显示单个整形变量的各位值,如果位数比len小,则靠右显示,不足余下的位为空格不显示 输入参数: x,y :起点坐标 len :指定显示数字的位数 charColor:字体颜色 bkColor:背景颜色 返回值: 无 修改记录: 无 ******************************************************************/ void LCD_ShowNum(uint16_t x,uint16_t y,u32 num,uint8_t len, uint16_t charColor, uint16_t bkColor) { uint8_t i,temp[10]; uint8_t j = len - 1; /* 实际要显示的位数 */ uint8_t k = len - 1; u32 ttt = num; if(len >= 11) /* j=0表示显示1位,j=9表示显示10位,仅支持显示10位 */ { j = 9; k = 9; } for(i=0;i<10;i++) /* 清空位缓存 */ { temp[i] = 0; } for(i=0;i<10;i++) /* 将数据以十进制按位拆分,temp[0]为个位 */ { temp[i] = ttt%10; ttt = ttt/10; } for(i=9;i<10;i--) { if( temp[i] != 0 ) /* 从高位开始剔除0,用于有效位 */ { if(j > i) /* 若实际有效位数小于想要显示的位数,则以有效位数为准 */ { j = i; for(i=0;i<k-j;i++) /* 保证从最高位开始,不不显示的位数为空 */ LCD_ShowChar(x+6*i,y,' ',bkColor,bkColor); } break; } if(i == 0) /* 若该数为零,则显示 1位 */ j = 0; } k = x + (len-j-1)*6; /* 计算显示的最高位的位置 */ for(i=j;i<10;i--) { LCD_ShowChar(k,y,temp[i]+'0',charColor,bkColor); k += 6; } }
void LCD_Update(enum Button dir){ switch (dir) { case Left: LCD_gotoXY(abs((--colNow)%16), rowNow);break; case Right: LCD_gotoXY(abs((++colNow)%16), rowNow); break; //case UpDown: LCD_gotoXY(colNow, rowNow==0?1:0); break; case Enter: LCD_ShowChar();break; default: break; }
/********************************************************** ÏÔʾ×Ö·û´®×Óº¯Êý x,y:Æðµã×ø±ê *p:×Ö·û´®ÆðʼµØÖ· **********************************************************/ void LCD_ShowString(uchar x,uchar y,uint For_color,uint Bk_color,char *p) { while(*p!='\0') { LCD_ShowChar(x,y,For_color,Bk_color,*p); x+=8; p++; } }
//显示数字,高位为0,则不显示 //x,y :起点坐标 //len :数字的位数 //size:字体大小 //color:颜色 //num:数值(0~4294967295); void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size) { uint8_t t,temp; uint8_t enshow=0; for(t=0;t<len;t++) { temp=(num/LCD_Pow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { LCD_ShowChar(x+(size/2)*t,y,' ',size,0); continue; }else enshow=1; } LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0); } }
//显示播放时间,比特率 信息 //totsec;音频文件总时间长度 //cursec:当前播放时间 //bitrate:比特率(位速) void audio_msg_show(u32 totsec,u32 cursec,u32 bitrate) { static u16 playtime=0XFFFF;//播放时间标记 if(playtime!=cursec) //需要更新显示时间 { playtime=cursec; //显示播放时间 LCD_ShowxNum(60,210,playtime/60,2,16,0X80); //分钟 LCD_ShowChar(60+16,210,':',16,0); LCD_ShowxNum(60+24,210,playtime%60,2,16,0X80); //秒钟 LCD_ShowChar(60+40,210,'/',16,0); //显示总时间 LCD_ShowxNum(60+48,210,totsec/60,2,16,0X80); //分钟 LCD_ShowChar(60+64,210,':',16,0); LCD_ShowxNum(60+72,210,totsec%60,2,16,0X80); //秒钟 //显示位率 LCD_ShowxNum(60+110,210,bitrate/1000,4,16,0X80);//显示位率 LCD_ShowString(60+110+32,210,200,16,16,"Kbps"); } }
/****************************************************************** 函数名: LCD_ShowString 作者: Anti_CDQ 日期: 2017-09-10 功能: 显示单行英文字符串 输入参数:x,y :起点坐标 size:字体大小 *p:字符串起始地址 mode:模式 0,填充模式;1,叠加模式 返回值: 无 修改记录:无 ******************************************************************/ void LCD_ShowString(uint16_t x, uint16_t y, char *p, uint16_t charColor, uint16_t bkColor) { while((*p<='z')&&(*p>=' '))//判断是不是非法字符! { if(x>(lcddev.width-1)||y>(lcddev.height-1)) return; LCD_ShowChar(x,y,*p,charColor,bkColor); x+=6; p++; } }
void LCD_ShowString(uint8_t x,uint16_t y,__I uint8_t *p) { while(*p!='\0') { if(x>MAX_CHAR_POSX){x=0;y+=16;} if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);} LCD_ShowChar(x,y,*p,16,0); x+=8; p++; } }
//显示字符串 //x,y:起点坐标 //width,height:区域大小 //size:字体大小 //*p:字符串起始地址 void LCD_ShowString(uint16_t x,uint16_t y,uint16_t width,uint16_t height,uint8_t size,uint8_t *p) { uint8_t x0=x; width+=x; height+=y; while((*p<='~')&&(*p>=' '))//判断是不是非法字符! { if(x>=width){x=x0;y+=size;} if(y>=height)break;//退出 LCD_ShowChar(x,y,*p,size,1); x+=size/2; p++; } }
//在指定位置开始显示一个字符串 //支持自动换行 //(x,y):起始坐标 //width,height:区域 //str :字符串 //size :字体大小 //mode:0,非叠加方式;1,叠加方式 void Show_Str(u16 x,u16 y,u16 width,u16 height,u8*str,u8 size,u8 mode) { u16 x0=x; u16 y0=y; u8 bHz=0; //字符或者中文 while(*str!=0)//数据未结束 { if(!bHz) { if(*str>0x80)bHz=1;//中文 else //字符 { if(x>(x0+width-size/2))//换行 { y+=size; x=x0; } if(y>(y0+height-size))break;//越界返回 if(*str==13)//换行符号 { y+=size; x=x0; str++; } else LCD_ShowChar(x,y,*str,size,mode);//有效部分写入 str++; x+=size/2; //字符,为全字的一半 } }else//中文 { bHz=0;//有汉字库 if(x>(x0+width-size))//换行 { y+=size; x=x0; } if(y>(y0+height-size))break;//越界返回 Show_Font(x,y,str,size,mode); //显示这个汉字,空心显示 str+=2; x+=size;//下一个汉字偏移 } } }
/********************************************************** 卡信息显示子函数 **********************************************************/ void card_info(void) { unsigned char by; unsigned int c_size, c_size_mult, read_bl_len; unsigned long drive_size; unsigned long size_mb; LCD_ShowString(12,40,colors[0],colors[7],"INIT SUCCESS"); LCD_ShowString(2,60,colors[0],colors[7],"TYPE:"); if(card_type) {LCD_ShowString(52,60,colors[2],colors[7],"SD"); ChineseChar(68,60,1,colors[2],colors[7],1); //卡 } else { LCD_ShowString(52,60,colors[2],colors[7],"MMC"); ChineseChar(76,60,1,colors[2],colors[7],1); //卡 } Read_CID_MMC(data_temp); LCD_ShowString(2,76,colors[0],colors[7],"NAME:"); LCD_ShowChar(50,76,colors[2],colors[7],data_temp[3]); LCD_ShowChar(58,76,colors[2],colors[7],data_temp[4]); LCD_ShowChar(66,76,colors[2],colors[7],data_temp[5]); LCD_ShowChar(74,76,colors[2],colors[7],data_temp[6]); LCD_ShowChar(82,76,colors[2],colors[7],data_temp[7]); Read_CSD_MMC(data_temp); c_size=data_temp[6] & 0x03; //bits 1..0 c_size<<=10; c_size+=(unsigned int)data_temp[7]<<2; c_size+=data_temp[8]>>6; by= data_temp[5] & 0x0F; read_bl_len=1; read_bl_len<<=by; //2^by by=data_temp[9] & 0x03; //获取multiply by<<=1; by+=data_temp[10] >> 7; c_size_mult=1; c_size_mult<<=(2+by); //2^(c_size_mult+2) drive_size=(ulong)(c_size+1) * (ulong)c_size_mult * (ulong)read_bl_len; size_mb= drive_size>>20; //1024*1024=1048576=2^20; LCD_ShowString(2,92,colors[0],colors[7],"SIZE:"); LCD_ShowChar(52,92,colors[2],colors[7],size_mb/1000|0x30); LCD_ShowChar(60,92,colors[2],colors[7],size_mb%1000/100|0x30); LCD_ShowChar(68,92,colors[2],colors[7],size_mb%100/10|0x30); LCD_ShowChar(76,92,colors[2],colors[7],size_mb%10|0x30); LCD_ShowChar(84,92,colors[2],colors[7],'M'); LCD_ShowChar(92,92,colors[2],colors[7],'B'); }
/********************************************************** BPB信息显示子函数 **********************************************************/ void BPB_INFO(void) { data_change2(BPBbytesPerSec); //每个扇区的字节数 LCD_ShowString(2,24,colors[0],colors[7],"BPBbytesPerSec"); LCD_ShowChar( 2,40,colors[2],colors[7],data_temp[0]); LCD_ShowChar(10,40,colors[2],colors[7],data_temp[1]); LCD_ShowChar(18,40,colors[2],colors[7],data_temp[2]); data_change2(BPBSecPerClust); //每个簇的扇区数 LCD_ShowString(2,56,colors[0],colors[7],"BPBSecPerClust"); LCD_ShowChar( 2,72,colors[2],colors[7],data_temp[0]); LCD_ShowChar(10,72,colors[2],colors[7],data_temp[1]); LCD_ShowChar(18,72,colors[2],colors[7],data_temp[2]); data_change2(BPBRevdFATSec); //保留扇区数 LCD_ShowString(2,88,colors[0],colors[7],"BPBRevdFATSec"); LCD_ShowChar( 2,104,colors[2],colors[7],data_temp[0]); LCD_ShowChar(10,104,colors[2],colors[7],data_temp[1]); LCD_ShowChar(18,104,colors[2],colors[7],data_temp[2]); /* data_change2(BPBhiddsector); //隐藏扇区数 LCD_ShowString(2,120,colors[0],"BPBhiddsector"); LCD_ShowChar( 2,136,colors[2],data_temp[0]); LCD_ShowChar(10,136,colors[2],data_temp[1]); LCD_ShowChar(18,136,colors[2],data_temp[2]); */ data_change1(BPBFATPerSec16); //每个FAT的扇区数 LCD_ShowString(2,120,colors[0],colors[7],"BPBFATPerSec"); LCD_ShowChar( 2,136,colors[2],colors[7],data_temp[0]); LCD_ShowChar(10,136,colors[2],colors[7],data_temp[1]); LCD_ShowChar(18,136,colors[2],colors[7],data_temp[2]); LCD_ShowChar(26,136,colors[2],colors[7],data_temp[3]); LCD_ShowChar(34,136,colors[2],colors[7],data_temp[4]); }
void DispOne(u16 x,u16 y,u8 num,u8 mode)//Block Display A Char { x*=8; y*=16; LCD_ShowChar(x,y,num,mode); }
int EELib_LCD_ShowChar(uint16_t x, uint16_t y, uint8_t Char, uint8_t Size, uint8_t Mode, uint16_t PointColor) { POINT_COLOR = PointColor; LCD_ShowChar(x, y, Char, Size, Mode); }