?? slcd12864.h
字號:
#ifndef _slcd12864_h
#define _slcd12864_h
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_cs=P1^2;
sbit lcd_data=P1^1; //串行數據輸入端
sbit lcd_clk=P1^0;
/**************************************************
延時函數
**************************************************/
void delay(uint t)
{
while(t--);
}
/***********************************
函數:LCD12864的寫命令函數
********************************************/
void write_command(uchar command)
{
uchar i;
uchar dat;
dat=0xf8;
lcd_cs=1;
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0; //由時序圖,上升沿寫入12864
lcd_clk=1;
dat=dat<<1;
}
dat=command;//(3),根據串行傳輸流程中要求數據和指令傳輸規則
dat&=0xf0; //先傳 command_data的高4位
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0;
lcd_clk=1;
dat=dat<<1;
}
dat=command<<4;//(4),傳 command_data的低4位
for(i=0;i<8;i++)
{
lcd_data=(bit)(dat&0x80);
lcd_clk=0;
lcd_clk=1;
dat=dat<<1;
}
lcd_cs=0; //(5),CS置為低電平,完成一次指令或數據串行傳輸
}
/****************************************
函數:void write_data(uchar dat)
功能:向LCD寫數據
*******************************************/
void write_data(uchar dat)
{
uchar i;
uchar Data;
Data=0xfa; //這個地方與 write_command,因為本函數write_data
lcd_cs=1; //是寫數據,位2的RW=0;位1的RS=1;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
Data=dat;
Data&=0xf0;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
Data=dat<<4;
for(i=0;i<8;i++)
{
lcd_data=(bit)(Data&0x80);
lcd_clk=0;
lcd_clk=1;
Data=Data<<1;
}
lcd_cs=0;
}
/**********************************************
函數:LCD12864的初始化
************************************************/
void lcd_init()
{
write_command(0x30);//選擇基本指令集
delay(10);
write_command(0x30);//選擇8bit數據流
delay(5);
write_command(0x0c);//開顯示
delay(10);
write_command(0x01);//清除顯示,并且設定地址指針為00H
delay(50);
write_command(0x06);//指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -