我在做240128的程序。遇到一个很诡异的问题,不知道大家遇到过没。
MCU:18F4520
屏是金鹏的240128,控制芯片T6963C那种的。
下面是显示数字和字母的程序。编译器是MCC18,MPLAB版本是V8.53
void showNum(U8 addx, U8 addy, U8 mode, char ch)//显示字母,和数字 8*16格式
{
// showPicture(addx * 8, addy * 8, 8, 16, &AscDot[(ch-32) * 16]);//显示任意图片的格式来显示字模。
U16 addr = 0;
U16 i = 0;
U8 showTemp = 0;
for(i = 0; i < 16; i++)
{
addr = (addy + i) * 30 + addx + 0xf00;
wr2sCmd(LO_DATA(addr), HI_DATA(addr), 0x24);//设置指针地址
showTemp = AscDot[(ch - 32) * 16 + i];//这个地方是查找显示的字模的点阵。标准的ASC码,不过前面32个没有用,所以减去32个。就在这个地方,赋值的时候怎么都赋值不进去。在观察窗口看到AscDot这个是找到了该点阵,而且没有错误。等到赋值给showTemp的时候,就赋值不进去,而且,showTemp他自己还总是在变值。它总是在前10个点阵那转悠。
switch(mode)
{
case DIS_BLANK://空白
wr1sCmd(0x00, 0xc0);//写一次
break;
case DIS_NOMAL://正常显示
wr1sCmd(showTemp, 0xc0);//写一次
break;
case DIS_REVERSE://反显
wr1sCmd(~showTemp, 0xc0);
break;
default:
wr1sCmd(showTemp, 0xc0);//写一次
break;
}
}
}
帮我想想看哪个地方有可能导致这种问题呀?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
showTemp = AscDot[(ch - 32) * 16 + i];
是这样的。在这个函数中。ch 这个变量U8的。i是应该定义成U8的,但我没来的及改呢。
所以在这个地方计算出来的数如果大于0XFF的时候,他就自动被低级化了,截断成int型的低字节。
因此赋值就赋乱了。
一周热门 更多>