单片机液晶显示
发布网友
发布时间:2022-04-30 19:39
我来回答
共5个回答
热心网友
时间:2022-06-30 05:49
我的液晶是带字模的,你找个ST7290的说明书看下吧,不要事事都问别人。
将下列代码存为lcdfun.h,然后调用其中的函数就行了(此处用串行控制,如果要8bit或4bit控制只需要该write-lcd函数就行了,具体函数看:http://hi.baidu.com/mem2005/blog/item/6c70d187c3bdc822c75cc31e.html),不能说的更细了,你自己要努力点啊。
/***************************************************************
封装程序中用到的控制AD9850的函数(串行控制)
***************************************************************/
#include<reg51.h>
#include<string.h>
#define uint unsigned int
#define uchar unsigned char
//串行位定义
sbit CS = P1^0; //串
sbit STD = P1^1; //串
sbit SCLK= P1^2; //串
//并行位定义
sbit RS = P1^0; //并
sbit RW = P1^1; //并
sbit E = P1^2; //并
sbit BUSY=P1^7; //并
//控制位定义
sbit PSB = P1^3; //串并选择信号
sbit RST = P1^4; //复位信号
//基本指令集预定义
#define DATA 1 //数据位
#define COMMAND 0 //命令位
#define CLEAR_SCREEN 0x01 //清屏
#define ADDRESS_RESET 0x02 //地址归零
#define BASIC_FUNCTION 0x30 //基本指令集
#define EXTEND_FUNCTION 0x34 //扩充指令集
const uchar code CLR[] = {" "};
//函数声明
extern void Serial_Init_LCD(void);
extern void Serial_Write_LCD( bit b_Data_Command , unsigned char uc_Content);
extern void Serial_DDRAM_Address_Set(uchar ucDDramAdd);
extern void Serial_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p);
/*************************************************************
延时一微秒子程序
*************************************************************/
void SerialDelayUS(uchar nus)
{
while(nus--);
}
/*************************************************************
写LCD(串行)
*************************************************************/
void Serial_Write_LCD( bit b_Data_Command , unsigned char uc_Content)
{
uchar uc_i,uc_j;
CS = 1;
SCLK= 0;
STD = 1;
for( uc_i=5 ; uc_i ; --uc_i)
{
SCLK = 1;
SCLK = 0;
}
STD = 0; //RW = 0;
SCLK = 1;
SCLK = 0;
if( b_Data_Command )
STD = 1; //RS = 1,写数据
else
STD = 0; //RS = 0,写指令
SCLK = 1;
SCLK = 0;
STD = 0;
SCLK = 1;
SCLK = 0;
for( uc_i=0 ; uc_i<2 ; uc_i++ )
{
for( uc_j=0 ; uc_j<4 ; uc_j++ )
{
uc_Content<<=1;
STD = CY; //这句很好,不过减弱了程序的移植性
SCLK= 1;
SCLK= 0;
}
STD = 0;
for( uc_j=0 ; uc_j<4 ; uc_j++ )
{
SCLK= 1;
SCLK= 0;
}
}
}
/*************************************************************
设置要写入的DDRAM的地址
*************************************************************/
void Serial_DDRAM_Address_Set(uchar ucDDramAdd)
{
Serial_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Serial_Write_LCD(COMMAND,ucDDramAdd); //设定DDRAM地址到地址计数器AC
}
/*************************************************************
串行初始化LCD
*************************************************************/
void Serial_Init_LCD(void) //串行初始化LCD
{
RST = 0; //复位后拉高,停止复位
SerialDelayUS(40);//30
RST = 1; //复位后拉高,停止复位
SerialDelayUS(40);
PSB = 0; //选择串行传输模式
SerialDelayUS(8);//5
Serial_Write_LCD(0,BASIC_FUNCTION);//基本指令动作
SerialDelayUS(8);
Serial_Write_LCD(0,CLEAR_SCREEN); //清屏,地址指针指向00H
SerialDelayUS(8);
Serial_Write_LCD(0,0x06); //光标的移动方向
SerialDelayUS(8);
Serial_Write_LCD(0,0x0c); //开显示,关游标
SerialDelayUS(8);
}
/*************************************************************
在LCD上显示字符串
*************************************************************/
void Serial_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)
{
uchar i;
i = strlen(p);
Serial_Write_LCD(COMMAND,BASIC_FUNCTION);//基本指令动作
Serial_DDRAM_Address_Set(ucAdd);
for( ; i ; i -- )
Serial_Write_LCD(DATA, *(p++));
}
/*************************************************************
清整个LCD12864的屏幕
*************************************************************/
void clearscreen()
{
uchar hang,lie;
for( hang=0x80;hang<=0x90;hang=hang+0x10)
{
for(lie=0x00;lie<=0x0f;lie++)
{
Serial_DisplayStrings_WithAddress(hang+lie,CLR);
}
}
}
/************************************************************/
热心网友
时间:2022-06-30 05:49
12864的LCD多的去了,不知道你是什么样的控制器呢?
现在用得最多的多数是KS0107和ST7290的控制器了,你可以到这里去下载:
http://www.gptlcm.cn/CN/index-cn-02-0-02-1.htm
找到你相应的驱动器型号下载相关的资料,里面有驱动程序的~~~
热心网友
时间:2022-06-30 05:49
还不知道要显示什么内容...
分太少了
热心网友
时间:2022-06-30 05:50
也不说明电路,给你个程序,你能用吗?
热心网友
时间:2022-06-30 05:51
我是有个,只是这分少了点