㈠ 51單片機最小系統板上怎麼連接12864屏幕啊。。有些插孔沒有註明
最小系統板上,都留出單片機的全部引腳了,可以隨便接到任一個引腳。而LCD12864與單片機的連接是可以隨便接的。只要能知道是單片機的哪個l/O腳,與LCD的什麼腳連接了就行的,程序中就能用sbit 定義引腳了。
㈡ 求51單片機驅動液晶12864的程序,要求是串口方式。程序里不要有繪圖反白之類的,只要能顯示漢字就行。
絕對好用的串口程序
sbit SID=P2^1; //12864數據
sbit SCLK=P2^2; //12864時鍾
init()
{
write(0,0x30); //8 位介面,基本指令集
write(0,0x0c); //顯示打開,游標關,反白關
write(0,0x01); //清屏,將DDRAM的地址計數器歸零
delaynms(10);
write(0,0x80); for(i=0;i<16;i++) write(1,datas11[i]);
write(0,0x90); for(i=0;i<16;i++) write(1,datas2[i]);
write(0,0x88); for(i=0;i<16;i++) write(1,datas3[i]);
write(0,0x98); for(i=0;i<16;i++) write(1,datas4[i]);
}
/**********************12864*************************/
void delaynms(unsigned int di) //延時
{
unsigned int da,db;
for(da=0;da<di;da++)
for(db=0;db<10;db++);
}
void sendbyte(unsigned char bbyte) //發送一個位元組
{
unsigned char i;
for(i=0;i<8;i++)
{
SID=bbyte&0x80; //取出最高位
SCLK=1;
SCLK=0;
bbyte<<=1; //左移
}
}
void write(bit start, unsigned char ddata) //寫指令或數據
{
unsigned char start_data,Hdata,Ldata;
if(start==0) start_data=0xf8; //寫指令
else start_data=0xfa; //寫數據
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
sendbyte(start_data); //發送起始信號
delaynms(5); //延時是必須的
sendbyte(Hdata); //發送高四位
delaynms(1); //延時是必須的
sendbyte(Ldata); //發送低四位
delaynms(1); //延時是必須的
}
/*void lcdinit(void) //初始化LCD
{
delaynms(10); //啟動等待,等LCM講入工作狀態
//PSB=0; ; //串口驅動模式
// RESET=0; delaynms(1); RESET=1; // 復位LCD
// CS=1;
write(0,0x30); //8 位介面,基本指令集
write(0,0x0c); //顯示打開,游標關,反白關
write(0,0x01); //清屏,將DDRAM的地址計數器歸零
}*/
㈢ 51單片機雙機串口通信 一個單片機控制12864顯示程序模板
我這里只有RS-485在單片機多機通信中的應用的,不過讀懂程序就可以控制12864,不是很難,我同學都有做成功。
1、RS-485在單片機多機通信中的應用
主機程序
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit p10=P1^0;
sbit p11=P1^1;
void main(void)
{
uchar i=0;
TMOD=0X20;//設置定時器1工作模式2
TH1=0XFF;
TL1=0XFF; //這里是假設晶振是11。0592的 波特率設置57600
SCON=0X40; //設置方式1 只能發送 不能接受
PCON=0X80;
TR1=1; // 啟動T1
while(1)
{
if(p10==0)
{
SBUF=0x11; //次LED單片機的針頭
while(TI==0);
TI=0;
while(p10==0);
}
if(p11==0)
{
SBUF=0x12; //次閃單片機的針頭
while(TI==0);
TI=0;
while(p11==0);
}
}
}
從機2
#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
bit flag=0;
sbit p20=P2^0;
void main(void)
{ uchar i=0;
TMOD=0X20;
TH1=0XFF;
TL1=0XFF; //這里晶振頻率同主機是11。0592的波特率設置57600
SCON=0X50; //設置方式1 只能發送 不能接受
PCON=0X80;
TR1=1; // 啟動T1
while(1)
{
while(RI==0);//採用查詢的方法判斷時候接受到數據
RI=0;
i=SBUF;
if(i==0x12)
p20=~p20;
i=0x00;
}
}
從機1
RS BIT P1.7
RW BIT P1.6
E BIT P1.5
KOU EQU P2
ORG 0030H
LOP: MOV SP,#5fH
MOV TMOD,#20H
MOV 40H,#00H
MOV TH1,#0FFH
MOV TL1,#0FFH
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
ACALL LCD_MODEL ;初始化的模塊
MOV KOU,#81H
ACALL READY
MOV DPTR,#TAB
ACALL WRITE ;顯示的模塊
MOV P2,#0C1H
ACALL READY
MOV DPTR,#TAB1
ACALL WRITE
xt: jnb RI,$
CLR RI
x: MOV A,SBUF
CJNE A,#11H,rel
INC 40H
MOV A,40H
CJNE A,#10,XTG
MOV 40H,#0
XTG: MOV P2,#0C9H
ACALL READY
MOV DPTR,#TAB2
ACALL WRITEx
AJMP xt
rel: ajmp xt
WRITEx:MOV A,40H
MOVC A,@A+DPTR
MOV KOU,A
ACALL WRITE1
RET
WRITE: MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#0FFH,s
AJMP EXIT
S: MOV KOU,A
ACALL WRITE1
INC DPTR
AJMP WRITE
EXIT: RET
WRITE1:SETB RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
LCD_MODEL: MOV KOU,#01H
ACALL READY
MOV KOU,#03H
ACALL READY
MOV KOU,#00000110B
ACALL READY
MOV KOU,#00001100B
ACALL READY
MOV KOU,#38H
ACALL READY
RET
READY: CLR RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
DELAY: MOV KOU,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB KOU.7,DELAY
RET
TAB: DB "Proteus 7.1" ,0FFH ;顯示字型檔
TAB1: DB "Count:" ,0FFH
TAB2: DB "0123456789"
END
模擬圖
㈣ 51單片機編寫12864
你自己寫錯了函數名 前後不一致 是display不是dispaly。。。最後的main裡面
㈤ 最近要做一個51單片機SD卡的讀寫用12864顯示!哪位大神能說下原理,怎麼才能把SD卡的東西顯示到12864上!
本SD卡讀寫系統中的介面電路採用的STCl2C5A60S2單片機控制,並通過軟體編程實現SPI模式的數據傳輸(包括串列時鍾、數據的輸入和輸出)。在SPI模式下。單片機與SD卡的連接主要有四根線(包括時鍾線,兩根數據傳輸線和一根片選線),
通常,SD卡有兩種匯流排模式,即SD匯流排模式和SPI匯流排模式。其中SD匯流排模式採用四條數據線並行傳輸數據,數據傳輸速率高,但是傳輸協議復雜,只有少數單片機才提供有此介面,而用軟體方法模擬SD匯流排又比較繁瑣,會降低SD卡的數據傳輸速率;而SPI匯流排模式只有一條數據傳輸線。傳輸協議簡單,易於實現,雖然數據傳輸速率較低,但絕大多數中高檔單片機都提供有SPI匯流排,同時由於其易於用軟體方法來模擬。因此,本設計採用SPI匯流排模式。
SPI匯流排技術是MOTOROIA公司推出的一種同步串列匯流排介面,是目前單片機應用系統中最常用的幾種串列擴展介面之一。 SPI匯流排主要通過三根線進行數據傳輸,包括同步時鍾線SCK、主機輸入/從機輸出數據線MISO、主機輸出/從機輸人數據線MOSI。另外,它還有一條低電平有效的從機片選線CS,片選信號以及同步時鍾脈沖由主機提供。SPI匯流排模式的數據是以位元組為單位進行傳輸的,主機與SD卡的各種通信都由主機控制。
軟體設計
SD卡的初始化
SD卡從上電到對SD卡進行正確的讀寫操作,往往都需要一個上電初始化的過程。SD卡上電後,主機必須先向SD卡發送74個時鍾周期,以完成SD卡的上電過程。通常SD卡上電後會自動進入SD匯流排模式,並在SD匯流排模式下向SD卡發送復位命令(CMD0)。
SD卡的讀寫
SD卡的數據傳輸主要通過塊讀寫來實現。塊長度默認為512 KB。當RAM中已存放由模數轉換模塊傳來的512 KB數據時,單片機便向SD卡寫入此塊數據。塊讀取時,可發送命令CMDl7,接收到的應答信號為0x00。這樣就可以直接接收數據了,接收到的數據的第1個位元組為數據令牌0xfe,後面的為接收到的數據,當輸出口變為高電平時。表明讀取操作完成。
裝數據讀出以後,通過單片機處理,把結果在液晶上顯示。