|
這兩天調(diào)試一個函數(shù),總是不能達成控制目的而編譯結(jié)果為無錯誤、無警告,最后發(fā)現(xiàn)是變量帶參運算不正常搞得一頭霧水,以前沒碰到這種情況誠請高手指點一下,先謝了!(單片機為STC8H8K64U,編譯環(huán)境為keil uv3或keil uv5)
引用的顯示定位函數(shù)如下:
- //----局部顯示定位函數(shù)-------------------------------------------------
- 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位數(shù)據(jù)
- SendData(y0%256); //取得y0的低8位數(shù)據(jù)
- SendData(y1/256);
- SendData(y1%256-1); //y-end
- SendData(0x01);
- }
復(fù)制代碼
在調(diào)試的顯示應(yīng)用函數(shù)如下:
- //----顯示一位數(shù)字函數(shù)-----------------------------------------------
- //在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; //字模點陣數(shù)據(jù)數(shù)量(高*寬/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();
- }
復(fù)制代碼
在主函數(shù)中如下運行結(jié)果是顯示屏沒有反應(yīng):
void main()
{
*****
*****
EPD_init_LUT();
EPD_Display_num(32,100,64,2);//在32行100列處顯示2
while(1);
}
如果把所有帶參變量都賦值帶入則在主函數(shù)中如下運行就會顯示正常了:
為清楚的說明問題我把整個函數(shù)貼在主函數(shù)中試運行,其實如果將顯示函數(shù)EPD_Display_num()中的變量全部賦值后在主函數(shù)中帶入顯示函數(shù)也可以正常顯示的。
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);
}
|
|