求51单片机驱动液晶12864的程序,要求是串口方式。程序里不要有绘图反白之类的,只要能显示汉字就行。

求51单片机驱动液晶12864的程序,要求是串口方式。程序里不要有绘图反白之类的,只要能显示汉字就行。,第1张

绝对好用的串瞎慎口程序

sbit SID=P2^1//12864数据

sbit SCLK=P2^2//12864时钟

init()

{

write(0,0x30) //8 位介面,基本指令耐塌集

write(0,0x0c) //显示打开,光标关,反白关

write(0,0x01) //清屏,将DDRAM的地址计数器归零

delaynms(10)

write(0,0x80)for(i=0i<16i++) write(1,datas11[i])

write(0,0x90)for(i=0i<16i++) write(1,datas2[i])

write(0,0x88)for(i=0i<16i++) write(1,datas3[i])

write(0,0x98)for(i=0i<16i++) write(1,datas4[i])

}

/**********************12864*************************/

void delaynms(unsigned int di) //延时

{

unsigned int da,db

for(da=0da<dida++)

for(db=0db<10db++)

}

void sendbyte(unsigned char bbyte) //发送一个字节

{

unsigned char i

for(i=0i<8i++)

{

SID=bbyte&0x80//取出最高位

SCLK=1

SCLK=0

bbyte<<=1//左移

}

}

void write(bit start, unsigned char ddata) //写指令或数据

{

unsigned char start_data,Hdata,Ldata

if(start==0) start_data=0xf8 //写指令

else start_data=0xfa //写数据

Hdata=ddata&0xf0 //取高四位

Ldata=(ddata<<4)&0xf0 //取低四位

sendbyte(start_data) //发送起始信号

delaynms(5)//延时是必须的

sendbyte(Hdata) //发送高四位

delaynms(1) //延时是必须的

sendbyte(Ldata) //发送低四位

delaynms(1) //延时是必须的

}

/*void lcdinit(void) //初始化LCD

{

delaynms(10)//启动等待,等LCM讲入工作状态

//PSB=0/昌神圆/串口驱动模式

// RESET=0delaynms(1)RESET=1// 复位LCD

// CS=1

write(0,0x30) //8 位介面,基本指令集

write(0,0x0c) //显示打开,光标关,反白关

write(0,0x01) //清屏,将DDRAM的地址计数器归零

}*/

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit SCLK = P3^1//液晶时钟线

sbit SDAT = P3^0//液晶数据线

void SEND_BYTE_LCD(uchar data_to_lcd)

void SEND_DATA_SER(bit codeordata, uchar SERIAL_DATA)//code 为1

void wrlcd(uchar HANG, uchar LIE, uchar *SENTENCE)

void lcdinit(void)

//void delay(uchar deltime)

/*********************************************************/

//延时程序

/********************************************************/

void delay(uint deltime)

{

uchar i

uint j

for (j = 0j <deltimej++)

for (i = 0i <255i++)

}

/*********************************************************

液晶写命令子程序

**********************************************************/

void SEND_BYTE_LCD(uchar data_to_lcd)

{

uchar j

for (j = 0j <8j++)

{

SDAT = (bit) (data_to_lcd &0x80)

SCLK = 0

SCLK = 0

SCLK = 0

SCLK = 0

SCLK = 0

SCLK = 1

SCLK = 1

SCLK = 1

SCLK = 1

SCLK = 1

data_to_lcd <<= 1

SCLK = 0

SCLK = 0

SCLK = 0

SCLK = 0

SCLK = 0

}

}

void SEND_DATA_SER(bit codeordata, uchar SERIAL_DATA)

{

uchar first, second, third

if (codeordata)

{

first = 0xf8

}

else

{

first = 0xfa

}

second = SERIAL_DATA &0xf0

third = SERIAL_DATA <<4

SEND_BYTE_LCD(first)

SEND_BYTE_LCD(second)

SEND_BYTE_LCD(third)

}

void wrlcd(uchar HANG, uchar LIE, uchar *SENTENCE)

{

uchar position

position = HANG + LIE

SEND_DATA_SER(1, position)

delay(2)

while (*SENTENCE)

{

SEND_DATA_SER(0, *SENTENCE++)

}

}

void lcdinit(void)

{

delay(100)

SEND_DATA_SER(1, 0X30)

delay(4)//基本功能设置

//SEND_DATA_SER(1,0X06)delay(2)

SEND_DATA_SER(1, 0X0C)

delay(4)

SEND_DATA_SER(1, 0X01)

delay(40)

SEND_DATA_SER(1, 0X02)

delay(40)

// SEND_DATA_SER(1,0X80)delay(2)

delay(10)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12537714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存