这两天调试一个函数,总是不能达成控制目的而编译结果为无错误、无警告,最后发现是变量带参运算不正常搞得一头雾水,以前没碰到这种情况诚请高手指点一下,先谢了!(单片机为STC8H8K64U,编译环境为keil uv3或keil uv5)
引用的显示定位函数如下:
- //----局部显示定位函数-------------------------------------------------
- void EPD_Display_locate(u16 x0, u16 x1, u16 y0, u16 y1)
- {
- SendCommand(0x91);
- SendCommand(0x90);
- SendData(x0); //x-start
- SendData(x1 - 1); //x-end
- SendData(y0/256); //取得y0的第9位数据
- SendData(y0%256); //取得y0的低8位数据
- SendData(y1/256);
- SendData(y1%256-1); //y-end
- SendData(0x01);
- }
复制代码
在调试的显示应用函数如下:
- //----显示一位数字函数-----------------------------------------------
- //在x0、y0起始的位置位置显示字宽hi/2高hi的字符
- void EPD_Display_num(u16 x0, u16 y0, u8 hi,u8 dat)
- {
- u16 i,size;
- EPD_Display_locate(x0, (x0+hi), y0, (y0+(hi/2)));
- size = hi * hi / 16; //字模点阵数据数量(高*宽/8)
- SendCommand(0x10);
- for(i = 0; i < size; i++)
- {
- SendData(0x00);
- }
- SendCommand(0x13);
- for(i = 0; i < size; i++)
- {
- SendData(shu[size*dat+i]);
- }
- SendCommand(0x12);
- delay_ms(1);
- read_BUSY();
- }
复制代码
在主函数中如下运行结果是显示屏没有反应:
void main()
{
*****
*****
EPD_init_LUT();
EPD_Display_num(32,100,64,2);//在32行100列处显示2
while(1);
}
如果把所有带参变量都赋值带入则在主函数中如下运行就会显示正常了:
为清楚的说明问题我把整个函数贴在主函数中试运行,其实如果将显示函数EPD_Display_num()中的变量全部赋值后在主函数中带入显示函数也可以正常显示的。
void main()
{
*****
*****
EPD_init_LUT();
EPD_Display_locate(32, 96, 100, 132);
SendCommand(0x10);
for(i = 0; i < 256; i++)
{
SendData(0x00);
}
SendCommand(0x13);
for(i = 0; i < 256; i++)
{
SendData(shu[512+i]);//显示2
}
SendCommand(0x12);
delay_ms(1);
read_BUSY();
while(1);
}
|