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

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;
                }
        }
       
}


帮我想想看哪个地方有可能导致这种问题呀?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
ddwl99
1楼-- · 2020-02-09 09:31
我输入打印“ABCDEFGHIJKLMNOPQRSTUVWXYZ”

结果在屏幕上显示为:
!"#$%&'--------!"#$%&'----
中间的部分都是乱码,后面也是乱码。而且乱的都一样~~
ddwl99
2楼-- · 2020-02-09 14:43
 精彩回答 2  元偷偷看……
my2009
3楼-- · 2020-02-09 16:51
"ABCDEFGHIJKLMNOPQRSTUVWXYZ”
!"#$%&'--------!"#$%&'----
---------------------------------------------------
       01000010 -----> 'B'
      00100001  -----> '!'
查查你的那个部分出问题,  好像前面多了一个  ‘0’
ddwl99
4楼-- · 2020-02-09 20:17
解决了。犯了低级错误,给大家当个提示吧,呵呵~

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

是这样的。在这个函数中。ch 这个变量U8的。i是应该定义成U8的,但我没来的及改呢。
所以在这个地方计算出来的数如果大于0XFF的时候,他就自动被低级化了,截断成int型的低字节。
因此赋值就赋乱了。
genzi
5楼-- · 2020-02-09 21:01
回复【4楼】ddwl99
-----------------------------------------------------------------------

我覺得應是 showTemp 長度不夠,因為您設 U8 showTemp = 0; 這時showTemp是char 等您showTemp = AscDot[(ch - 32) * 16 + i]; 超出char的範圍就有誤了。跟 i 應沒有關係,因為 i <16 即使只取低位元也沒有關係,僅是增加運算記憶體空間。
genzi
6楼-- · 2020-02-10 00:53
這裡有完整程式,您可以參考看看。http://www.mcu123.com/news/Article/Design/uc/200608/250.html

一周热门 更多>