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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1394|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

C語言函數(shù)帶入?yún)?shù)運行不正常請各位指點[已解決]

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:281828 發(fā)表于 2024-8-9 20:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這兩天調(diào)試一個函數(shù),總是不能達成控制目的而編譯結(jié)果為無錯誤、無警告,最后發(fā)現(xiàn)是變量帶參運算不正常搞得一頭霧水,以前沒碰到這種情況誠請高手指點一下,先謝了!(單片機為STC8H8K64U,編譯環(huán)境為keil uv3或keil uv5)
引用的顯示定位函數(shù)如下:
  1. //----局部顯示定位函數(shù)-------------------------------------------------
  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位數(shù)據(jù)
  9.     SendData(y0%256); //取得y0的低8位數(shù)據(jù)

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

在調(diào)試的顯示應(yīng)用函數(shù)如下:
  1. //----顯示一位數(shù)字函數(shù)-----------------------------------------------
  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; //字模點陣數(shù)據(jù)數(shù)量(高*寬/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. }
復(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);
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2024-8-10 17:37 | 只看該作者

回復(fù)

使用道具 舉報

板凳
ID:628113 發(fā)表于 2024-8-10 22:48 | 只看該作者
是不是 函數(shù) 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數(shù)不聲明 是 有一定比例 會出問題的。

檢查一下 , 是否  有  【函數(shù)未聲明】 的警告。
鑒于可能導(dǎo)致運行錯誤, 我覺得應(yīng)該改成 【錯誤】而不是警告。
回復(fù)

使用道具 舉報

地板
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)

試試
回復(fù)

使用道具 舉報

5#
ID:281828 發(fā)表于 2024-8-11 20:27 | 只看該作者
ppcbug 發(fā)表于 2024-8-10 22:48
是不是 函數(shù) 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數(shù)不聲明 是 有一定比例 會出問題的。

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

使用道具 舉報

6#
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變量參與應(yīng)該也不能超值。
回復(fù)

使用道具 舉報

7#
ID:281828 發(fā)表于 2024-8-11 20:37 | 只看該作者
ppcbug 發(fā)表于 2024-8-10 22:48
是不是 函數(shù) 在外 而 沒有聲明?
KEIL  和 IAR  好像 函數(shù)不聲明 是 有一定比例 會出問題的。


回復(fù)

使用道具 舉報

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

使用道具 舉報

9#
ID:281828 發(fā)表于 2024-8-12 18:04 | 只看該作者
xrba 發(fā)表于 2024-8-12 10:28
還真沒有發(fā)現(xiàn)問題在哪兒,最可能的原因是 size 值不對。
1、可否跟蹤一下,查查size,或者打印一個日志。
...

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

使用道具 舉報

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

評分

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

查看全部評分

回復(fù)

使用道具 舉報

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




評分

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

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本h片在线观看 | 美女爽到呻吟久久久久 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 日韩电影一区二区三区 | h视频免费在线观看 | 日韩at| 欧美精品中文字幕久久二区 | 亚洲天堂免费 | 亚洲成人网在线 | 亚洲日本一区二区 | 欧美aⅴ | 在线免费观看欧美 | 三级视频网站 | 亚洲国产成人在线视频 | 亚洲经典一区 | 免费黄色在线观看 | 成人影院网站ww555久久精品 | 99精品在线观看 | 中国大陆高清aⅴ毛片 | 91精品国产91综合久久蜜臀 | 久久久久亚洲 | 老妇激情毛片免费 | 成人教育av| 日韩欧美在线观看视频 | 91精品导航 | 久久视频精品 | 夜夜夜久久 | 成人免费视频7777777 | 国精产品一品二品国精在线观看 | 午夜精品一区二区三区免费视频 | ww 255hh 在线观看| 精品国产乱码久久久久久88av | 午夜免费看视频 | 日韩精品在线播放 | 91精品国产92 | 日韩三级精品 | 欧美成人在线免费 | 午夜电影在线播放 | 日本网站免费观看 | 精精国产视频 | 久久精品国产免费 |