我在做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;
}
}
}
帮我想想看哪个地方有可能导致这种问题呀?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
结果在屏幕上显示为:
!"#$%&'--------!"#$%&'----
中间的部分都是乱码,后面也是乱码。而且乱的都一样~~
!"#$%&'--------!"#$%&'----
---------------------------------------------------
01000010 -----> 'B'
00100001 -----> '!'
查查你的那个部分出问题, 好像前面多了一个 ‘0’
showTemp = AscDot[(ch - 32) * 16 + i];
是这样的。在这个函数中。ch 这个变量U8的。i是应该定义成U8的,但我没来的及改呢。
所以在这个地方计算出来的数如果大于0XFF的时候,他就自动被低级化了,截断成int型的低字节。
因此赋值就赋乱了。
-----------------------------------------------------------------------
我覺得應是 showTemp 長度不夠,因為您設 U8 showTemp = 0; 這時showTemp是char 等您showTemp = AscDot[(ch - 32) * 16 + i]; 超出char的範圍就有誤了。跟 i 應沒有關係,因為 i <16 即使只取低位元也沒有關係,僅是增加運算記憶體空間。
一周热门 更多>