久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1420|回復: 10
收起左側

C語言函數帶入參數運行不正常請各位指點[已解決]

[復制鏈接]
ID:281828 發(fā)表于 2024-8-9 20:53 | 顯示全部樓層 |閱讀模式
這兩天調試一個函數,總是不能達成控制目的而編譯結果為無錯誤、無警告,最后發(fā)現是變量帶參運算不正常搞得一頭霧水,以前沒碰到這種情況誠請高手指點一下,先謝了!(單片機為STC8H8K64U,編譯環(huán)境為keil uv3或keil uv5)
引用的顯示定位函數如下:
  1. //----局部顯示定位函數-------------------------------------------------
  2. void EPD_Display_locate(u16 x0, u16 x1, u16 y0, u16 y1)
  3. {
  4.     SendCommand(0x91);
  5.     SendCommand(0x90);

  6.     SendData(x0);   //x-start
  7.     SendData(x1 - 1); //x-end

  8.     SendData(y0/256); //取得y0的第9位數據
  9.     SendData(y0%256); //取得y0的低8位數據

  10.     SendData(y1/256);
  11.     SendData(y1%256-1); //y-end
  12.     SendData(0x01);
  13. }
復制代碼

在調試的顯示應用函數如下:
  1. //----顯示一位數字函數-----------------------------------------------
  2. //在x0、y0起始的位置位置顯示字寬hi/2高hi的字符
  3. void EPD_Display_num(u16 x0, u16 y0, u8 hi,u8 dat)
  4. {
  5.         u16 i,size;

  6.     EPD_Display_locate(x0, (x0+hi), y0, (y0+(hi/2)));
  7.                 size = hi * hi / 16; //字模點陣數據數量(高*寬/8)
  8.     SendCommand(0x10);
  9.     for(i = 0; i < size; i++)
  10.     {
  11.       SendData(0x00);
  12.     }
  13.     SendCommand(0x13);
  14.     for(i = 0; i < size; i++)
  15.     {
  16.       SendData(shu[size*dat+i]);
  17.     }

  18.     SendCommand(0x12);                     
  19.     delay_ms(1);        
  20.     read_BUSY();

  21. }
復制代碼

在主函數中如下運行結果是顯示屏沒有反應:
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);
}



回復

使用道具 舉報

ID:161164 發(fā)表于 2024-8-10 17:37 | 顯示全部樓層
2024-08-10_173515.png
回復

使用道具 舉報

ID:628113 發(fā)表于 2024-8-10 22:48 | 顯示全部樓層
是不是 函數 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數不聲明 是 有一定比例 會出問題的。

檢查一下 , 是否  有  【函數未聲明】 的警告。
鑒于可能導致運行錯誤, 我覺得應該改成 【錯誤】而不是警告。
回復

使用道具 舉報

ID:624769 發(fā)表于 2024-8-11 01:24 | 顯示全部樓層
void EPD_Display_num(u16 x0, u16 y0, u8 hi,u8 dat)

=>

void EPD_Display_num(u16 x0, u16 y0, u16 hi,u8 dat)

試試
回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-11 20:27 | 顯示全部樓層
ppcbug 發(fā)表于 2024-8-10 22:48
是不是 函數 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數不聲明 是 有一定比例 會出問題的。

你好,并沒有“函數未聲明”的警告,我只會編寫一些簡單的程序,一般需要調試的函數以及需要調用的函數我都是按順序先寫到主函數的前面,所以不存在函數聲明問題。
回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-11 20:32 | 顯示全部樓層
188610329 發(fā)表于 2024-8-11 01:24
void EPD_Display_num(u16 x0, u16 y0, u8 hi,u8 dat)

=>

多謝指點,我改過后也沒作用,而實際使用時hi最大值也不超過64,而涉及到hi計算時也有變量u16 size變量參與應該也不能超值。
回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-11 20:37 | 顯示全部樓層
ppcbug 發(fā)表于 2024-8-10 22:48
是不是 函數 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數不聲明 是 有一定比例 會出問題的。

456.jpg
回復

使用道具 舉報

ID:1130414 發(fā)表于 2024-8-12 10:28 | 顯示全部樓層
還真沒有發(fā)現問題在哪兒,最可能的原因是 size 值不對。
1、可否跟蹤一下,查查size,或者打印一個日志。
2、size = hi * hi / 16; //字模點陣數據數量(高*寬/8)
把這句修改一下
size = hi / 16 * hi; //字模點陣數據數量(高*寬/8)
這樣試試
回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-12 18:04 | 顯示全部樓層
xrba 發(fā)表于 2024-8-12 10:28
還真沒有發(fā)現問題在哪兒,最可能的原因是 size 值不對。
1、可否跟蹤一下,查查size,或者打印一個日志。
...

多謝,我今天又弄了好久仍然沒找到原因,問題應該不是出在size這個變量,在我的測試中hi=64是固定值,我將size置換成256仍然無果,另外程序調試過程中也能看到這個變量的運算結果為0x100(=256)。
回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-12 18:19 | 顯示全部樓層
因為我玩電子價簽墨水屏時能夠找到的例程都是arduino-esp8266的和stm32的而我比較容易上手的就是esp8266模塊,幾乎都是用arduino代碼實現了刷屏操作后就移植初始化代碼到stc51單片機中再深入玩耍,碰到了眼下的問題后,今天我再次連接了esp8266模塊并將這兩個函數貼到了arduino上編譯燒錄后發(fā)現顯示非常順利毫無問題,以前我也經常在arduino上寫一些簡單的c函數,有時也復制arduino上的c函數到keil3中編譯應用,也重來沒出現過問題,而此次是經過反向驗證應該說明函數真的沒毛病了,那么,問題在哪里呢?我也重新安裝了keil3軟件,這是玩了很多年51單片機第一次遇到的久拖不決的問題,真的百思不得其解。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:281828 發(fā)表于 2024-8-12 21:50 | 顯示全部樓層
問題已經解決了,感謝樓上各位的指點與參與,雖然問題已經解決、程序運行沒也問題了但問題的出現原因我也說不清楚,問題就是多引用了一個數組數據的.h文件造成的,注釋掉這個文件就一切正常了。程序初期調試時曾經引用了一個數組文件:#include"Ap_29demo.h",后來重新編寫了這個寫字符的函數時為了調方便就把新做的點陣數據數組直接貼在了程序的上方,準備等函數調試通過后再重新修改整理這個Ap_29demo.h文件,另外因為用到的底層函數少工程還沒有分模塊,只是一個含有主函數的工程文件,原以為后做的數組名稱與Ap_29demo.h中的數組文件不同名稱應該不會有問題,但不知道啥原因就偏偏在這里翻車了,貌似只有在主函數中調用數組數據時才會找到主文件中的數組文件,但我卻真的不知道為什么會這樣,也請各位賜教。

123.jpg


評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色国产在线视频 | 久久综合影院 | 中文av电影 | 欧美猛交| 成人黄色电影在线观看 | 337p日本欧洲亚洲大胆精蜜臀 | 日本国产一区二区 | 国产成人精品一区二区三区在线 | 999热精品 | 91影片 | 99re在线视频观看 | 亚洲精品成人av久久 | 国产精品国产 | 欧美xxxx黑人又粗又长 | 国产在线一区二区三区 | 福利网站在线观看 | 欧美极品在线播放 | 精品久久久一区 | 免费a大片 | www.欧美视频| 国产精品久久一区二区三区 | 欧美黄色一区 | 亚洲天堂中文字幕 | 色呦呦网站 | 一区二区三区四区免费观看 | 99一级毛片 | 久久精品国产清自在天天线 | 久久久国产一区二区三区 | 男女羞羞视频免费 | 国产美女在线观看 | 91传媒在线观看 | 久久99视频这里只有精品 | 欧美高清视频 | 欧美中文字幕 | 日日夜夜免费精品 | aⅴ色国产 欧美 | 日韩欧美国产精品一区二区三区 | 精品亚洲一区二区 | 一区二区三区亚洲精品国 | 国产超碰人人爽人人做人人爱 | 精品日韩一区二区 |