![]() |
發布時間: 2020-5-5 22:02
正文摘要:如果接到單片機的IO口是按照 D7對應P0.7 D6-P0.6 按照這個順序接到D0-P0.0 LCD12864就能正常顯示 先提前謝謝各位大佬幫忙解答問題 |
可能需要重新取模,或者在程序中改變一下,使其能夠對應 |
uchar Swap_uchar(uchar data) { uchar i=0; uchar result=0; for (i=0;i<8;i++) { result>>1; if (data&0x80) { result|=0x80; } data<<1; } return result; } void Lcd_com_N(uchar data) { Lcd_com(Swap_uchar(data)); } //LCD初始化函數 void lcd_init() { Lcd_com_N(0x3f); //LCD開顯示 Lcd_com_N(Oxc0); //LCD行初始地址,共64行 Lcd_com_N(0xb8); //LCD頁初始地址,共3頁 Lcd_com_N(0x40); //LCD列初始地址,共64列 led_clear(0); //清屏 該函數內的 Lcd_com 改為 Lcd_com_N } //************** 中文顯示 **************// void zhongwen(uchar cslor2,uchar X,uchar Y,uint flag) { int i; flag=flag*32; control(cslor2); // 選擇屏幕顯示 該函數control內的 Lcd_com 改為 Lcd_com_N Lcd_com_N(0xb8+(X*2));//選擇—個漢字的上部 Lcd_com_N(0x40+(Y*16)); for(i=0;i<16;i++) { Lcd_date(Swap_uchar(Chinese[flag++])) ;//先輸入一個漢上面 16列 } Lcd_com_N(0xb8+(X*2)+1);//選擇一個漢字的下部| Lcd_com_N(0x40+(Y*16)); for(i=0;i<16;i++) { Lcd_date(Swap_uchar(Chinese[flag++]));//輸入一個漢字的下部 } } |
uchar Swap_uchar(uchar data) { uchar i=0; uchar result=0; for (i=0;i<8;i++) { result>>1; if (data&0x80) { result|=0x80; } data<<1; } return result; } void Lcd_com_N(uchar data) { Lcd_com(Swap_uchar(data)); } //LCD初始化函數 void lcd_init() { Lcd_com_N(0x3f); //LCD開顯示 Lcd_com_N(Oxc0); //LCD行初始地址,共64行 Lcd_com_N(0xb8); //LCD頁初始地址,共3頁 Lcd_com_N(0x40); //LCD列初始地址,共64列 led_clear(0); //清屏 該函數led_clear內的 Lcd_com 改為 Lcd_com_N } //************** 中文顯示 **************// void zhongwen(uchar cslor2,uchar X,uchar Y,uint flag) { int i; flag=flag*32; control(cslor2); // 選擇屏幕顯示 該函數control內的 Lcd_com 改為 Lcd_com_N Lcd_com_N(0xb8+(X*2));//選擇—個漢字的上部 Lcd_com_N(0x40+(Y*16)); for(i=0;i<16;i++) { Lcd_date(Chinese[flag++]) ;//先輸入一個漢上面 16列 該函數Lcd_date內的 Lcd_com 改為 Lcd_com_N } Lcd_com_N(0xb8+(X*2)+1);//選擇一個漢字的下部| Lcd_com_N(0x40+(Y*16)); for(i=0;i<16;i++) { Lcd_date(Chinese[flag++]);//輸入一個漢字的下部 該函數Lcd_date內的 Lcd_com 改為 Lcd_com_N } } |
man1234567 發表于 2020-5-7 15:51 將顯示屏在線路板上的位置轉180度,是可以減少飛線的,成品做好后是無所謂上下方向的。 |
hotpet 發表于 2020-5-7 10:31 其實走到桌子對面更便捷 ![]() |
另外,贊同你對調,美觀與方便焊接線第一,軟件服從硬件。也可以說,硬件不足軟件補。 |
man1234567 回答的方法正確,重新取模不行,因為指令數還沒有反轉。 Lcd_com(0x3f); -----------全改成Lcd_com(swap(0x3f));也可以寫入反轉交換后的數,不用swap Lcd_date( aa )-------------全改成Lcd_date(swap(aa));也可以重新取模,高位在下改高位在上 |
無須更改線路或軟件,將顯示屏旋轉180度即可。 |
Li.Chi 發表于 2020-5-6 13:02 Lcd_date(swap(Chinese[flag++])); 俺能力有限還不清楚就沒法幫了。 |
man1234567 發表于 2020-5-6 11:09 想問下這個函數具體要怎么使用呢?請大佬指點一下 |
1、成品打板后并不存在所說的美觀就是亂成一團放在盒子里也木有問題除非搭棚; 2、如果非得要這樣“好看”,做個小程序將P0要口輸出的數據(程例中Lcd_date鏡像)從高到低轉成從低到高再輸出相當于反過來接。網上抄的程例加進去后只要改Lcd_date那句就可以。 unsigned char swap (unsigned char pData) { unsigned char value=0,tmp=0; unsigned char ii,jj; for (ii=0x80,jj=0;ii!=0;ii=ii>>1,jj++) { if (pData & ii) tmp=1; else tmp =0; value |= tmp << jj; } return value; } |
并口的液晶屏,如果你將接口順序反過來的話,指令和數據也要反過來,比如0x01 你要換成0x80,0x01其實就時D7-D0分別取值 0 0 0 0 0 0 0 1 |
重新取模吧,重新取高位生成字模再試試 |
美不美觀,關鍵是看各元器件如何布局排版 |