① 單片機如何寫TFT彩屏的程序
武漢 谷鑫科技專業從事單片機驅動TFT彩屏的研發和生產。
下面是TFT6448BS-5.7模塊的驅動程序:
sfr AUXR = 0x8e;//////////////////////////////////注意增加該語句。
#include <reg51.h>
#include <absacc.h>
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]
unsigned char code zk[32] = {//請
0x00, 0x47, 0x20, 0x23, 0x00, 0xEF, 0x20, 0x23, //left
0x22, 0x23, 0x22, 0x23, 0x2A, 0x32, 0x22, 0x02,
0x48, 0xFC, 0x40, 0xF8, 0x40, 0xFE, 0x08, 0xFC, //right
0x08, 0xF8, 0x08, 0xF8, 0x08, 0x08, 0x28, 0x10};
unsigned char code picture[];
main()
{
unsigned int x,y,x2,y2;
unsigned int i;
unsigned char key,x1,y1,j,k,z,m,n,bright;
AUXR = 0x02;//////////////////////////////////注意增加該語句。
bright = 8;
key = 0;//////////////////////////////////////選擇液晶屏型號
//0:TFT2432;
//1:TFT3224;
//2:TFT480234
//3:TFT480272
//4:TFT6448
//5:TFT8048
//6:TFT8060
//7:TFT8060
if(P13==4)
{
if(key==0){x2=240;y2=320;x1=6; y1=16; goto loop1;}//x1/32,y1/20
if(key==1){x2=320;y2=240;x1=8; y1=12; goto loop1;}
if(key==2){x2=480;y2=240;x1=12;y1=12; goto loop1;}
if(key==3){x2=480;y2=272;x1=12;y1=14; goto loop1;}
if(key==4){x2=640;y2=480;x1=16;y1=24; goto loop1;}
if(key==5){x2=800;y2=480;x1=20;y1=24; goto loop1;}
if(key==6){x2=800;y2=600;x1=20;y1=30; goto loop1;}
if(key==7){x2=800;y2=600;x1=20;y1=30; goto loop1;}//亮度測試
}
loop1:
bright--;if(bright==255)bright=7;
CMD = 0x06;
DAT = bright;
///////////////////////以下是清屏功能///////////////////////////////////////
//用紅色清屏
CMD = 0x04;DAT = 0xe0;//背景色
CMD = 0x08;//啟動填充操作
for(y=0;y<260*12;y++);//延時16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////
while(key==7)
{
for(bright=7;bright!=255;bright--)
{
CMD = 0x06;
DAT = bright;
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
}
CMD = 0x20;//關斷顯示,poweroff
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
key = P1&0x07;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用紅色清屏
CMD = 0x04;DAT = 0x1c;//背景色
CMD = 0x08;//啟動填充操作
for(y=0;y<260*12;y++);//延時16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用紅色清屏
CMD = 0x04;DAT = 0x03;//背景色
CMD = 0x08;//啟動填充操作
for(y=0;y<260*12;y++);//延時16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用紅色清屏
CMD = 0x04;DAT = 0x00;//背景色
CMD = 0x08;//啟動填充操作
for(y=0;y<260*12;y++);//延時16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用紅色清屏
CMD = 0x04;DAT = 0xff;//背景色
CMD = 0x08;//啟動填充操作
for(y=0;y<260*12;y++);//延時16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
///////////////////////以下是測試8點寫功能///////////////////////////////////////
//8點寫模式下清屏DAT=0;
CMD = 0x02;DAT=0xff;//前景色
CMD = 0x04;DAT=0x00;//背景色
CMD = 0x01;
for( y=0;y<y2;y++ )//用前景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y; ;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x55;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for( y=0;y<y2;y++ )//用背景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x0f;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//8點寫模式下寫單色圖片
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for (y=0; y<80; y++)
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for ( n=0; n<10; n++) DAT = picture[y*10+n];
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//8點寫模式下寫漢字
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for ( n=0; n<=15; n++ )
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = n;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
DAT = zk[n];
DAT = zk[n+16];
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//以下是測試單點寫
CMD = 0x00;
i=0;
for(j=0;j<x1;j++)//20,x/40
{for (z=0;z<y1;z++)//24,y/20
{for (k=0;k<20;k++)
{x=j*40;
y=z*20+k;
X_ADDR = x;
if(key!=0)X_ADDR = x/256;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for (m=0;m<40;m++)DAT = i;
}
i++;
}
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
http://tieba..com/club/10621043/p/14619152
② 51單片機上的彩屏液晶如何顯示圖片,怎麼做這個實驗,能不能寫點簡單的c程序。
你用的是普通的51嗎?一般彩屏顯示圖片都是通過讀SD卡來實現的,因為單片機的內存太小
如果你需要顯示很小的圖標51還可以實現
具體做法是:先找到真彩的小圖標,用軟體把圖標取模(把圖標的數據顯示出來)
然後寫到單片機里
如果讀SD卡來顯示圖片的話 就需要先學習SD卡的協議
自我感覺普通的51根本不能很好的駕馭彩屏
③ 單片機中TFT彩屏顯示漢字原理
數組中的每一個位元組的每一位都代表著顯示器中對應的像素點,比如「0」的話不亮,「1」的時候亮。
然後程序中會有相應的函數來將數組中的數據按格式通過IO口發送到液晶屏的顯存中,液晶屏按照接收的數據點亮相應的像素點。這樣漢字就像圖片一樣顯示出來了。
想要顯示自己的漢字,你可以用取模軟體,把漢字換算成像「普」那樣形式的數據。以數組的形式寫在程序中,之後用函數調用這個數組就行了
④ 單片機刷彩屏對cpu的要求
這個問題和屏的種類有關以及應用有關系,我先假設:
1、你的這個屏必須不斷刷新才可以保持圖像
2、你是要作一個動態的播放而不是只是靜態顯示一張圖片
3、你的屏是32位真彩屏
OK
下面來分析。
1、算吞吐量
要人看到不閃的話美妙要刷個24次(這個你確認下)
那麼要求單片機和屏之間的通信速率為:320*240*32*24約為74Mbyte/s。u
2、算CPU 主頻
這個和CPU 種類和使用的介面有關。
假如你的CPU和屏間通訊位寬為8bit
你的CPU 單周期就可以些一次該介面
那麼主頻就需要74M
⑤ 51單片機能是2.4寸的TFT彩屏整屏顯示嗎
完全可以的,理論上可以驅動任何尺寸的彩屏,只是速度很慢,越大越慢。
點陣液晶屏是用一個位元組驅動8個像素點,一個點是一位,所以只有亮和滅,兩種狀態。
彩色液晶屏是用兩個位元組驅動一個像素點,所以一個點可以有65536種顏色。
彩色液晶屏大都是16位的位寬,你用51單片機8位驅動必須要買帶鎖存器的液晶屏。
一般來講用51單片機從SD卡中讀出一張彩圖,寫到TFT彩屏裡面需要接近十秒的時間。
所以說驅動彩屏,還是用ARM7這個級別的MCU比較靠譜。
⑥ 求高手指點,單片機怎麼用TFT 彩屏顯示圖像
一般的
單片機
直接驅動TFT
彩屏
很困難,資源以及速度都達不到。驅動
顏色數
較少的低解析度小
尺寸
屏還可以。
彩屏驅動還是用32位的ARM做吧。
如果一定要用普通的單片機驅動TFT彩屏,就選通用的彩色液晶
模塊
吧,這個
液晶
已經用32位的
嵌入式處理器
做好了驅動,並開發了
指令
集,你只需通過串口對
液晶模塊
發
命令
即可,如顯示
文字
,畫線,畫園,顯示預存的
圖像
等。液晶具體驅動已經由模塊內部做好了。這樣的彩色模塊市場有售,北京迪文科技的就不錯,價位也不高
⑦ 初學單片機 是選擇彩屏單片機開發板 還是選擇單色單片機開發板好呢
我認為在讀寫彩色和單色屏時,它們的讀寫時序都是類似的,它們的區別在於,送給屏的顯示數據不同。
但從學習的過程上來看,我推薦,在初學時,先學會能夠點亮單色屏,然後再學會如何點亮彩色屏,因為單色屏的驅動程序要稍微簡單一點。
從以後液晶屏的選用上來看,彩色屏將是趨勢。
⑧ 想用51單片機驅動320x240解析度的彩屏可以么
51單片機可以控制320*240彩屏顯示,但是不能驅動,320*240彩屏有自己的驅動電路和專用晶元。
⑨ 51單片機能連接像手機屏幕一樣的彩屏嗎有那個型號的啊價格呢還有一個問題就是每天睡覺六小時怎樣
51單片機能連接手機屏幕,價格幾十塊錢,主要看你的選擇的屏大小(像素),象山寨手機那樣的屏比較好買,價格也不貴(50塊左右,還帶觸摸),只是51的處理速度比較慢,用彩屏的話刷屏的速度就比較慢了。
睡眠時間6小時理論上比較短吧,但做技術的好象很多人還不一定有6小時,大家還是要注意身體啊~
⑩ 用51單片機如何控制TFT彩屏
如果只用51的話,控制不了。因為TFT彩屏的數據處理量不是51能完成的,如果非要用51控制,中間要加個控制卡。
51隻是8位機,也就是同一時刻最多處理8位數據。
建議用16位機或者是32位機控制彩屏。