找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2942|回復(fù): 9
收起左側(cè)

uc1698u芯片驅(qū)動(dòng)160*160屏 請(qǐng)教各位幫忙看下為啥第一位數(shù)據(jù)是錯(cuò)的?

[復(fù)制鏈接]
ID:1010435 發(fā)表于 2023-6-25 18:14 | 顯示全部樓層 |閱讀模式
驅(qū)動(dòng)個(gè)160*160的黑白屏,用的uc1698u芯片,采用16位彩色數(shù)據(jù)格式,必須兩個(gè)8位才能驅(qū)動(dòng)三個(gè)像素點(diǎn),想讓屏顯示一個(gè)160*160的圖片,網(wǎng)上找了很久沒有找到相關(guān)程序,只能自己啃手冊(cè)
123.jpg
程序如下:
  1. static unsigned char code pic[]={
  2. 0xaa,0xaa,0xaa};//三個(gè)8位做個(gè)試驗(yàn)
  3. void data8bit(unsigned char dat) //三位有效
  4. {
  5.         if(dat==0x00){        transfer_data(0x00);        transfer_data(0x00);}
  6.         if(dat==0x01){        transfer_data(0x00);        transfer_data(0x1f);}
  7.         if(dat==0x02){        transfer_data(0x07);        transfer_data(0xe0);}        
  8.         if(dat==0x03){        transfer_data(0x07);        transfer_data(0xff);}        
  9.         if(dat==0x04){        transfer_data(0xf8);        transfer_data(0x00);}        
  10.         if(dat==0x05){        transfer_data(0xf8);        transfer_data(0x1f);}
  11.         if(dat==0x06){        transfer_data(0xff);        transfer_data(0xe0);}
  12.         if(dat==0x07){        transfer_data(0xff);        transfer_data(0xff);}        
  13. }
復(fù)制代碼
  1. void bmp()         
  2. {
  3.         unsigned long picdata=0;

  4.         char temdata;
  5.         set_lcd_address(0,0);
  6.         picdata=(pic[0]<<16)|(pic[1]<<8)|pic[2];//三個(gè)八位數(shù)據(jù)組組合成24位
  7.         temdata=picdata>>21;        //
  8.         data8bit(temdata&0x07);
  9.         temdata=picdata>>18;
  10.         data8bit(temdata&0x07);        
  11.         temdata=picdata>>15;
  12.         data8bit(temdata&0x07);               
  13.         temdata=picdata>>12;
  14.         data8bit(temdata&0x07);               
  15.         temdata=picdata>>9;
  16.         data8bit(temdata&0x07);
  17.         temdata=picdata>>6;
  18.         data8bit(temdata&0x07);        
  19.         temdata=picdata>>3;
  20.         data8bit(temdata&0x07);
  21.         temdata=picdata;
  22.         data8bit(temdata&0x07);        
  23. }
復(fù)制代碼



為啥第一位數(shù)據(jù)pci[0]顯示不正常,而第二位pic[1]和第三位pic[2]顯示是正常的沒有問(wèn)題的。
我試過(guò),直接給data8bit()函數(shù)直接賦值顯示是沒有問(wèn)題的。

回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2023-6-26 11:12 | 顯示全部樓層
走單步慢慢調(diào)試吧。也不知道【顯示不正!块L(zhǎng)什么樣子。
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-6-26 12:53 | 顯示全部樓層
yzwzfyz 發(fā)表于 2023-6-26 11:12
走單步慢慢調(diào)試吧。也不知道【顯示不正!块L(zhǎng)什么樣子。

這樣說(shuō)pic[0],pic[1],pic[2],每個(gè)字節(jié)8位,控制了3*8=24個(gè)像素點(diǎn)的亮和滅,上面的程序只能讓9~24位置的像素點(diǎn)正常顯示,而1~8位顯示時(shí)亂的,不是p[0]的值。
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-6-26 12:59 | 顯示全部樓層
另外再請(qǐng)教一下,8位的單片機(jī),
如果變量
char a=0xff;
int b;
b=a;
這個(gè)時(shí)候b應(yīng)該是兩個(gè)字節(jié),那么b的高八位全是0嗎?
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-6-26 15:39 | 顯示全部樓層
mtt661 發(fā)表于 2023-6-26 12:59
另外再請(qǐng)教一下,8位的單片機(jī),
如果變量
char a=0xff;

如果是unsigned顯然會(huì)是0。

有鑒于你沒有寫unsigned,高8位是符號(hào)擴(kuò)展,如果char最高位是0,那么高八位全0;如果char最高位是1,那么高八位全1,表示負(fù)數(shù)。隨便舉個(gè)栗子,char類型0xfe表示-2,那么擴(kuò)展到int類型就是0xfffe,同樣表示-2。
回復(fù)

使用道具 舉報(bào)

ID:59202 發(fā)表于 2023-6-26 16:27 | 顯示全部樓層
問(wèn)題應(yīng)該就出在 picdata = (pic[0] << 16) | (pic[1] << 8) | pic[2]; 這一行程序上,pic[0]、pic[1]是一個(gè)8位無(wú)符號(hào)數(shù),你把它左移16和8位,本身就是一個(gè)非常規(guī)操作,不同編譯器會(huì)有不同的解釋操作,非常容易得到不是你想象的結(jié)果。你可以試試改成這樣
picdata = ((unsigned long)pic[0] << 16) | ((unsigned long)pic[1] << 8) | pic[2];
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-6-26 16:30 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-6-26 15:39
如果是unsigned顯然會(huì)是0。

有鑒于你沒有寫unsigned,高8位是符號(hào)擴(kuò)展,如果char最高位是0,那么高八 ...

明白了 我再試試
回復(fù)

使用道具 舉報(bào)

ID:384109 發(fā)表于 2023-6-26 16:35 | 顯示全部樓層
void data8bit(unsigned char dat)有問(wèn)題,而且你好像沒搞清楚pic[]數(shù)組和2字節(jié)顏色數(shù)據(jù)的關(guān)系,看你的描述也沒描述清楚
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-6-26 16:55 | 顯示全部樓層
人中狼 發(fā)表于 2023-6-26 16:35
void data8bit(unsigned char dat)有問(wèn)題,而且你好像沒搞清楚pic[]數(shù)組和2字節(jié)顏色數(shù)據(jù)的關(guān)系,看你的描述 ...

這個(gè)data8bit函數(shù)我是驗(yàn)證過(guò)的,給data8bit函數(shù)賦值0x00~0x07 屏幕上三個(gè)像素點(diǎn)按000 001 010 011 100 101 110 111(1代表亮,0代表滅)分別能正常顯示。
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-6-26 20:19 | 顯示全部樓層
xxxevery 發(fā)表于 2023-6-26 16:27
問(wèn)題應(yīng)該就出在 picdata = (pic[0]

你這個(gè)方法是對(duì)的,我用的Keil5,加上(unsigned long)后正常了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表