📄 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 + -