|
uint32_t mypow(uint8_t m,uint8_t n)
{
uint32_t result=1;
while(n--)
result*=m;
return result;
}
/**********************************************/
/* 函数功能:显示数字 */
/* 入口参数:x,y :起点坐标 */
/* len :数字的位数 */
/* num:数值(0~4294967295); */
/**********************************************/
void LCD_ShowNum(uint8_t x,uint16_t y,uint32_t num,uint8_t len)
{
uint8_t t,temp;
uint8_t enshow=0; // 此变量用来去掉最高位的0
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+32*t,y,' ');
continue;
}else enshow=1;
}
LCD_ShowChar(x+32*t,y,temp+'0');
}
}
/**********************************************/
/* 函数功能:显示8*16点阵英文字符 */
/* 入口参数:x,y :起点坐标 */
/* num:字母或符号 */
/* 注 意:x,y的取值要在240到320范围内 */
/**********************************************/
void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t num)
{
uint8_t temp;
uint8_t pos,t;
LCD_WR_REG_DATA(0x0020,x);//设置X坐标位置
LCD_WR_REG_DATA(0x0021,y);//设置Y坐标位置
/*开辟显存区域*/
LCD_XYRAM(x,y,x+31,y+63); // 设置GRAM坐标
LCD_WR_REG(0x0022); //指向RAM寄存器,准备写数据到RAM
num=num-' ';//得到偏移后的值
for(pos=0;pos<256;pos++)
{
temp=ascii_16[num][pos];
for(t=0;t<8;t++)
{
if(temp&0x80)
LCD_WR_DATA(POINT_COLOR);
else
LCD_WR_DATA(BACK_COLOR);
temp<<=1;
}
}
/* 恢复显存显示区域240*320 */
LCD_XYRAM(0x0000 ,0x0000 ,0x00EF ,0X013F); // 恢复GRAM整屏显示
return;
}
我想问temp等于多少?
我将原程序的8*16的字改成32*64的,一位数字可以显示,我想显示两位数却显示不出来?只能显示其中的一位,不知道是哪里的问题,想了两天都没找出来,所以求神指点啊!谢谢了!
|
|