?? dddd.txt
字號:
*描述:YM12864R-3帶中文字庫圖形液晶驅動
*版本:V1.0
*控制器:ST7920
*通訊方式:串行方式
*編程:飛揚(學C語言8天寫的)
**********************************************************/
#include <at89x52.h>
//引腳定義:
sbit LCD_CS =P0^0; //LCD片選端
sbit LCD_SID=P0^1; //LCD串行數據輸入/輸出端
sbit LCD_CLK=P0^2; //LCD串行同步時鐘,上升沿時讀寫SID數據.
//函數聲明:
void LCD_SEND(unsigned char send_data);
unsigned char LCD_RECEIVE();
unsigned char LCD_READ_BF();
void LCD_WRITE_IR(unsigned char LCD_COMMAND);
void LCD_WRITE_DR(unsigned char LCD_DATA);
/**********************************************************
*LCD初始化函數
**********************************************************/
void LCD_INIT()
{
LCD_WRITE_IR(0x30);
LCD_WRITE_IR(0x0c);
LCD_WRITE_IR(0x01);
LCD_WRITE_IR(0x06);
}
/**********************************************************
*寫指令到LCD函數
*名稱:LCD_WRITE_IR
*入口參數:LCD_COMMAND (字符型--8位數據)
**********************************************************/
void LCD_WRITE_IR(unsigned char LCD_COMMAND)
{
unsigned char temp_data;
LCD_CS = 0; //拉低片選終止所有數據傳送
while(LCD_READ_BF()&0x80==1);//判忙
LCD_CS = 1; //拉高片選準備傳送數據
LCD_SEND(0xf8); //發送寫指令
temp_data = LCD_COMMAND;
temp_data = temp_data&0xf0;//屏蔽低4位(取出高4位)
LCD_SEND(temp_data); //發送高4位
temp_data = LCD_COMMAND;
temp_data = temp_data<<4; //取低4位
LCD_SEND(temp_data); //發送低4位
LCD_CS = 0; //拉低片選終止所有數據傳送
}
/**********************************************************
*寫數據到LCD函數
*名稱:LCD_WRITE_DR
*入口參數:LCD_DATA (字符型-8位)
**********************************************************/
void LCD_WRITE_DR(unsigned char LCD_DATA)
{
unsigned char temp_data;
LCD_CS = 0; //拉低片選終止所有數據傳送
while(LCD_READ_BF()&0x80==1);//判忙
LCD_CS = 1; //拉高片選準備傳送數據
LCD_SEND(0xfa); //發送寫數據指令
temp_data = LCD_DATA;
temp_data = temp_data&0xf0;//屏蔽低4位(取出高4位)
LCD_SEND(temp_data); //發送高4位
temp_data = LCD_DATA;
temp_data = temp_data<<4; //取低4位
LCD_SEND(temp_data); //發送低4位
LCD_CS = 0; //拉低片選終止所有數據傳送
}
/**********************************************************
*讀取LCD忙碌標志(BF)的狀態和地址計數器(AC)
*名稱:LCD_READ_BF
**********************************************************/
unsigned char LCD_READ_BF()
{
unsigned char i,temp_data; //
LCD_CS = 1; //拉高片選準備傳送數據
LCD_SEND(0xfc); //發送讀數據指令
i = LCD_RECEIVE(); //讀取數據高4位
temp_data = LCD_RECEIVE(); //讀取數據低4位
LCD_CS = 0; //拉低片選終止所有數據傳送
i = i&0xf0; //取高4位(屏蔽低4位)
temp_data = temp_data>>4; //取低4位
temp_data = temp_data|i; //組合成完整數據
return (temp_data);
}
/**********************************************************
*LCD發送8BIT的數據(1個字節)
*名稱:LCD_SEND
*入口:send_data
**********************************************************/
void LCD_SEND(unsigned char send_data)
{
unsigned char i;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
LCD_SID = send_data&0x80;//發送一位數據
LCD_CLK = 1; //拉高串行時鐘端,鎖存數據
send_data = send_data<<1;
}
}
/**********************************************************
*LCD接收8BIT數據(1個字節)
*名稱:LCD_RECEIVE
*出口:receive_data
**********************************************************/
unsigned char LCD_RECEIVE()
{
unsigned char i,receive_data;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
receive_data = receive_data<<1;
LCD_CLK = 1;
receive_data = receive_data|LCD_SID;
}
return(receive_data);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -