|
發布時間: 2023-6-25 18:14
正文摘要:驅動個160*160的黑白屏,用的uc1698u芯片,采用16位彩色數據格式,必須兩個8位才能驅動三個像素點,想讓屏顯示一個160*160的圖片,網上找了很久沒有找到相關程序,只能自己啃手冊 程序如下: static unsigned ... |
xxxevery 發表于 2023-6-26 16:27 你這個方法是對的,我用的Keil5,加上(unsigned long)后正常了。 |
人中狼 發表于 2023-6-26 16:35 這個data8bit函數我是驗證過的,給data8bit函數賦值0x00~0x07 屏幕上三個像素點按000 001 010 011 100 101 110 111(1代表亮,0代表滅)分別能正常顯示。 |
| void data8bit(unsigned char dat)有問題,而且你好像沒搞清楚pic[]數組和2字節顏色數據的關系,看你的描述也沒描述清楚 |
Hephaestus 發表于 2023-6-26 15:39 明白了 我再試試 |
|
問題應該就出在 picdata = (pic[0] << 16) | (pic[1] << 8) | pic[2]; 這一行程序上,pic[0]、pic[1]是一個8位無符號數,你把它左移16和8位,本身就是一個非常規操作,不同編譯器會有不同的解釋操作,非常容易得到不是你想象的結果。你可以試試改成這樣 picdata = ((unsigned long)pic[0] << 16) | ((unsigned long)pic[1] << 8) | pic[2]; |
mtt661 發表于 2023-6-26 12:59 如果是unsigned顯然會是0。 有鑒于你沒有寫unsigned,高8位是符號擴展,如果char最高位是0,那么高八位全0;如果char最高位是1,那么高八位全1,表示負數。隨便舉個栗子,char類型0xfe表示-2,那么擴展到int類型就是0xfffe,同樣表示-2。 |
|
另外再請教一下,8位的單片機, 如果變量 char a=0xff; int b; b=a; 這個時候b應該是兩個字節,那么b的高八位全是0嗎? |
yzwzfyz 發表于 2023-6-26 11:12 這樣說pic[0],pic[1],pic[2],每個字節8位,控制了3*8=24個像素點的亮和滅,上面的程序只能讓9~24位置的像素點正常顯示,而1~8位顯示時亂的,不是p[0]的值。 |
| 走單步慢慢調試吧。也不知道【顯示不正常】長什么樣子。 |