12864液晶程序

12864液晶程序,第1张

#include <stdio.h>

#include <math.h>

#include <reg52.h>

#include <string.h>

sbit RS=P2^3 //注意:一定要看12864液晶模块的资蔽租料,来确定怎样 *** 作

sbit WRD=P2^4

sbit E=P2^5

sbit PSB=P2^0

sbit RES=P2^2

void TransferData(char data1,bit DI)

void delayms(unsigned int n)

void delay(unsigned int m)

void lcd_mesg(unsigned char code *addr1)

//下面来定义要显示的汉字,8*4

unsigned char code IC_DAT[]={

"陈 "

""

""

""

}

unsigned char code IC_DAT2[]={

"爱一个人难却还爱"

"交结朋友可路更宽"

"诚实守信宏知兆加油努力"

"成功做人成功做事"

}

void initinal(void) //初始化,12864有要求的要写猛缓上

{

delay(40)

PSB=1 //并口工作模式

delay(1)

RES=0//复位

delay(1)

RES=1 //复位置高

delay(10)

TransferData(0x30,0)

delay(100)

TransferData(0x30,0)

delay(37)

TransferData(0x08,0)

delay(100)

TransferData(0x10,0)

delay(100)

TransferData(0x0C,0)

delay(100)

TransferData(0x01,0)

delay(10)

TransferData(0x06,0)

delay(100)

}

void main(void)//分两屏来不断显示上面定义的IC_DAT和IC_DAT2汉字

{

while(1)

{

initinal()//调用LCD字库初始化程序

delay(100)

lcd_mesg(IC_DAT)

delayms(240) //延时程序必要的,长与短,自己调节

delayms(240)

initinal()

delay(100)

lcd_mesg(IC_DAT2)

delayms(240)

delayms(240)

}

}

void lcd_mesg(unsigned char code *addr1) //显示汉字函数,8*4=32

{

unsigned char i

TransferData(0x80,0)

delay(100)

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

{

TransferData(*addr1,1)

addr1++

}

TransferData(0x90,0)

delay(100)

for(i=32i<64i++)

{

TransferData(*addr1,1)

addr1++

}

}

void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据

{

WRD=0

RS=DI

delay(1)

P0=data1

E=1

delay(1)

E=0

}

void delayms(unsigned int n)//延时子程序

{

unsigned int i,j

for(i=0i<ni++)

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

}

void delay(unsigned int m)

{

unsigned int i,j

for(i=0i<mi++)

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

}

/****************打点******************/

void point(uchar x,uchar y)

{

uchar y1,hang,lie,msb_data,lsb_data,temp=0x01

if(y1!=y)

{

msb_data=0

lsb_data=0

}

y1=y

if(y<32)

{

hang=0x80+y

lie=0x80

}

if(y>31)

{

hang=0x80+y-32

lie=0x88

}

if(y>63)//return

{

lcm_com(0x80)

_nop_()

hanzi("温度超出显示范轿扰围")

while(1)

flash()

}

lie=lie+x/16

if(x%16==0)

{

msb_data=0

lsb_data=0

}

if(x%16<8)

{

msb_data=msb_data|(temp<<(7-x%16))

lsb_data=0x00|lsb_data

}//保留以前的数据,把第x个点亮闹陪

if(x%16==8)

{

msb_data=msb_data|0x00

lsb_data=lsb_data|0x80

}

if(x%16>8)大于24小于32

{

msb_data=msb_data|0x00

lsb_data=lsb_data|(temp<<(15-x%16))

}

lcm_com(0x34)//扩闭弯旦充指令集

lcm_com(hang)

lcm_com(lie)

lcm_dat(msb_data)

lcm_dat(lsb_data)

lcm_com(0x36)//绘图显示开

}

12864要看液御吵好晶屏的驱动IC是什么,不同的话,肯定不通用。

另外,它的指令多,因为复位的时候,大多指令都会自动设到默认值。程序初始化的时候,只需要更改其中几个。

比如显示指令,复位后,默认值是 显示关闭。初始化就要,显示打开。

我看你的命令像是,ST7920这款镇铅IC控制的(猜测),带中文字库的吧?网上驱动碰唤很多,有串并口都有。


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

原文地址: http://outofmemory.cn/yw/8267102.html

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

发表评论

登录后才能评论

评论列表(0条)

保存