求STC12C5A60S2单片机的12864液晶串行程序?

求STC12C5A60S2单片机的12864液晶串行程序?,第1张

不知你的液晶是什么控制器的,这个是st7920的

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

* 文件名 : 串行12864显示.c

* 描述: 该程序实现了12864以串行的方式进行通信。

* 创建人 : 东流,2009年4月10日

* 版本号 : 2.0

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

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit CS=P2^5 //片选信号

sbit SID=P2^6 //数据信号

sbit SCLK=P2^7 //时钟信号

sbit RST=P2^2 //复位信号

sbit CH = P2^4 //并行、串行选择信号

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

* 名称 : delay()

* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。

* 输入 : t

* 输出 : 无

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

void delay(unsigned int t)

{

unsigned int i,j

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

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

}

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

* 名称 : sendbyte()

* 功能 : 按照液晶的串口通信协议,发送数据

* 输入 : zdata

* 输出 : 无

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

void sendbyte(unsigned char zdata)

{

unsigned int i

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

{

if((zdata <<i) &0x80)

{

SID = 1

}

else

{

SID = 0

}

SCLK = 0

SCLK = 1

}

}

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

* 名称 : write_com()

* 功能 : 写串口指令

* 输入 : cmdcode

* 输出 : 无

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

void write_com(unsigned char cmdcode)

{

CS = 1

sendbyte(0xf8)

sendbyte(cmdcode &0xf0)

sendbyte((cmdcode <<4) &0xf0)

delay(2)

}

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

* 名称 : write_data()

* 功能 : 写串口指令

* 输入 : cmdcode

* 输出 : 无

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

void write_data(unsigned char Dispdata)

{

CS = 1

sendbyte(0xfa)

sendbyte(Dispdata &0xf0)

sendbyte((Dispdata <<4) &0xf0)

delay(2)

}

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

* 名称 : lcdinit()

* 功能 : 初始化函数

* 输入 : cmdcode

* 输出 : 无

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

void lcdinit()

{

RST = 0

delay(100)

RST = 1

delay(20000)

write_com(0x30)

delay(50)

write_com(0x0c)

delay(50)

}

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

* 名称 : hzkdis()

* 功能 : 显示字符串

* 输入 : *s

* 输出 : 无

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

void hzkdis(unsigned char code *s)

{

while(*s >0)

{

write_data(*s)

s++

delay(50)

}

}

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

* 名称 : Test()

* 功能 : 显示子函数

* 输入 : 无

* 输出 : 无

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

void Test()

{

write_com(0x03)

delay(50)

write_com(0x81)

hzkdis(" HOT-51")

write_com(0x91)

hzkdis("单片机开发板")

write_com(0x89)

hzkdis(" ")

write_com(0x98)

hzkdis("东流电子")

}

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

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

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

void Main()

{

CH = 0

delay(1)

lcdinit()

delay(10)

while(1)

{

Test()

delay(5000)

}

}

比如 cmdcode = 0xaaaabbbb

sendbyte(cmdcode&0xf0)表示把cmdcode中的高四位送出去。这里送出去的就是aaaa0000

sendbyte((cmdcode<<4)&0xf0)表示把cmdcode的低四位送出去,这里就是bbbb0000

绝对好用的串口程序

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的地址计数器归零

}*/


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

原文地址: https://outofmemory.cn/yw/11119540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存