遇到问题了,大家帮我看看呗?

2020-02-09 09:17发布

我在做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;
                }
        }
       
}


帮我想想看哪个地方有可能导致这种问题呀?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
ddwl99
2020-02-09 20:17
解决了。犯了低级错误,给大家当个提示吧,呵呵~

showTemp = AscDot[(ch - 32) * 16 + i];

是这样的。在这个函数中。ch 这个变量U8的。i是应该定义成U8的,但我没来的及改呢。
所以在这个地方计算出来的数如果大于0XFF的时候,他就自动被低级化了,截断成int型的低字节。
因此赋值就赋乱了。

一周热门 更多>