标题:
LCD12864串行通信的时序不是很懂,有谁可以解释一下么?感谢!
[打印本页]
作者:
我是滚滚T呀
时间:
2018-6-19 11:42
标题:
LCD12864串行通信的时序不是很懂,有谁可以解释一下么?感谢!
串行通信的时序不是很懂,有谁可以解释一下么?感谢!!!
作者:
mengsiu
时间:
2018-6-19 13:28
/*--------------------------------------------------------------------------
LCD12864.H
128*64 液晶显示屏
--------------------------------------------------------------------------*/
#ifndef __LCD12864_H__
#define __LCD12864_H__
/*****************************************************************************/
//定义参数
sbit CLK_l = P1^3; //时钟 6脚
sbit DAT_l = P1^4; //数据 5脚
sbit RES_l = P1^0; //复位 17脚
/*******************************************************************************/
//液晶显示程序
/******************************************************************************/
//发送一个字节(底层函数)
void write_lcd_byte(uchar bbyte) {
uchar i;
for(i=0;i<8;i++){
DAT_l=bbyte&0x80; //取出最高位
CLK_l=1;
CLK_l=0;
bbyte<<=1; //左移
}
}
/*****************************************************************************/
//写指令或数据 (0,指令) (1,数据)
void write_lcd_code(bit start, uchar ddata) {
uchar start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8; //0:写指令
else
start_data=0xfa; //1:写数据
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
write_lcd_byte(start_data); //发送起始信号
DelayUs(1); //延时是必须的
write_lcd_byte(Hdata); //发送高四位
DelayUs(1); //延时是必须的
write_lcd_byte(Ldata); //发送低四位
DelayUs(1); //延时是必须的
}
/*****************************************************************************/
//向lcd发送一个字符串,长度64字符之内。
void write_lcd_word(uchar *str){
while(*str != '\0'){
write_lcd_code(1,*str++);
}
*str = 0;
}
/****************************************************************************/
//初始化lcd
void Init_Lcd(void) {
DelayMs(1); //启动等待,等lcd讲入工作状态
write_lcd_code(0,0x30); //8 位介面,基本指令集
write_lcd_code(0,0x0c); //显示打开,光标关,反白关
write_lcd_code(0,0x01); //清屏,将DDRAM的地址计数器归零
DelayMs(1); //启动等待,等lcd讲入工作状态
}
/******************************************************************************/
//清屏函数
void Clean(){
uint j=0;
uchar x,y;
for(y=0;y<32;y++) {
write_lcd_code(0,0x36);//功能设置---8BIT控制界面,扩充指令集
write_lcd_code(0,0x80+y); //行地址
write_lcd_code(0,0x80); //列地址
write_lcd_code(0,0x30);
for(x=0;x<32;x++){
write_lcd_code(1,0x00);
}
}
}
void Clr_Lcd(void){
write_lcd_code(0,0x01);
DelayMs(1); //启动等待,等lcd讲入工作状态
}
#endif
复制代码
作者:
ARM学习能手
时间:
2018-6-19 14:08
你不能这样直接问,你应该看完手册之后对时序那个位置不明白,必要时自己画下图,自己就找到答案了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1