请教12864(ST7920)液晶滚动显示的程序问题

请教12864(ST7920)液晶滚动显示的程序问题,第1张

7920只能驱动32路,12864为两个7920控制,你想一个一个的卷动必须设置CS1,CS2,加入CS1上屏,CS2,下屏,你先控制CS1=0,CS2=1然后COM地址加一,32以后,CS2=0,CS1=1然后COM地址加一就搞定

http://www.waveshare.net/Datasheet_PDF/LCD_PDF/LCD12864-ST_PDF_cn.RAR

把这个下载下来看看是不是你要的

#include <reg51.h>

#include <intrins.h>

#include <stdio.h>

#define uchar unsigned char

#define Fisrt_Addr 0 //定义字符/汉字显示起始位置

typedef unsigned char uint8

sbit LCD_RS=P2^2

sbit LCD_RW=P2^3

sbit LCD_E=P2^4

sbit PCB=P2^5

uchar i,j

uint8 AC_TABLE[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

}

void delay(int ms)

{

while(ms--)

{

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

}

}

bit lcd_busy()

{ bit result

LCD_RS=0

LCD_RW=1

LCD_E= 1

result=(bit)(P0&0x80)

LCD_E=0

return result

}

void lcd_wcmd(uchar cmd)

{

while(lcd_busy())

LCD_RS=0

LCD_RW=0

LCD_E=0

P0=cmd

LCD_E=1

LCD_E=0

}

void lcd_wdata(uchar dat)

{

while(lcd_busy())

LCD_RS=1

LCD_RW=0

LCD_E=0

P0=dat

LCD_E=1

LCD_E=0

}

void lcd_initial()

{

lcd_wcmd(0x30)

delay(1)

lcd_wcmd(0x0C)//开显示,关光标,不闪烁

delay(1)

lcd_wcmd(0x06)//指定在资料写入或读取时,光标的移动方向

delay(1)

lcd_wcmd(0x01)

delay(10)//这里要延时长一点,否侧会影响下面的 *** 作

}

/*------------------清屏命令--------------------------*/

void Clr_Screen()

{

lcd_wcmd(0x30)//考虑到前面出现0x34

lcd_wcmd(0x01)

delay(10)

}

/*------------------整屏写入数据:全亮,或者竖条-----------------------------*/

//先写0x34关绘图,写地址数据,0x360x绘图

void Lcd_Fill(uchar disdata)

{ uchar x,y//参考PDF写GDRAM的步骤,显示坐标

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

for(x=0x<16x++)

{ lcd_wcmd(0x34)

lcd_wcmd(y+0x80) //行地址

lcd_wcmd(x+0x80)//列地址

lcd_wdata(disdata)

lcd_wdata(disdata)

lcd_wcmd(0x36)

}

lcd_wcmd(0x30)//考虑到前面出现0x34

}

/*------------------显示字符串--------------------------*/

void Zi_FU(uchar code *s)

{

while(*s!=0)

{ lcd_wdata(*s)

s++

delay(10)

}

}

//注意:中文显示时空格符或数字ASCII码必需两个一起用,标点符号注意中英文

void intruction()

{

Clr_Screen()

lcd_wcmd(0x80)//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示)

Zi_FU("我真的很爱你")

lcd_wcmd(0x90)//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示)

Zi_FU("很在乎很在乎你 ")

lcd_wcmd(0x88)//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示)

Zi_FU("我把我的心交给你")

lcd_wcmd(0x98)//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示)

Zi_FU("想你啦")

delay(1000)

}

void feeling1()

{

lcd_wcmd(0x30)

Zi_FU("我真的很爱你")

delay(300)

lcd_wcmd(0x90+Fisrt_Addr)

Zi_FU("很在乎很在乎你 ")

delay(300)

lcd_wcmd(0x88+Fisrt_Addr)

Zi_FU("我把我的心交给你")

delay(300)

lcd_wcmd(0x98+Fisrt_Addr)

delay(500)

Zi_FU("想你哦")

}

/*------------------显示图片---------------------------*/

void Disp_Img(uchar code *bmp)

{

uchar count=2,X=0x80

lcd_wcmd(0x34)//扩展指令

lcd_wcmd(0x36)//打开绘图

for(count>0count--)

{

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

{ lcd_wcmd(0x80|i)

lcd_wcmd(X)//X地址坐标,自动加1.

for(j=0j<16j++) //16*8=128

lcd_wdata(*bmp++)

}

X=0x88//下半屏

}

}

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

函数名称:去字摸函数 ,取模方式是横向,顺序

函数功能:

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

void ZK(uchar *zk)

{

uchar i, j

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

{

lcd_wcmd(0x34)//扩展指令

lcd_wcmd(0x36)//打开绘图

lcd_wcmd(0x80|j)

lcd_wcmd(0x80) //X地址坐标,自动加1.

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

{

lcd_wdata(*zk++)

}

}

}

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

函数名称: 向某一行写字符

函数功能:

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

void Lcd_Write_Poss(uchar x,uchar y,uchar *ZiFu)

{

uchar addr,i=0

if(x==1)addr=0x80

if(x==2)addr=0x90

if(x==3)addr=0x88

if(x==4)addr=0x98

addr=addr+y

lcd_wcmd(0x30)

lcd_wcmd(addr)

while(*ZiFu!='\0')

{

lcd_wdata(*ZiFu++)

}

}

void main()

{

PCB=1

while(1)

{

lcd_initial()

delay(1000)

Clr_Screen()

feeling1()

delay(3000)

for(i=8i>0i--)

{

lcd_wcmd(0x18) //一二行与三四行调换了,液晶分为上下两个半屏,

delay(1000) //有时会乱,与上面程序有关,要加lcd_wcmd(0x30), clrscreen()

}

Clr_Screen() //清屏

feeling1()

lcd_wcmd(0x34)

lcd_wcmd(0x04) //0X04第一行和第三行反白显示,

delay(3000)//0X05第二行和第四行反白显示,与PDF不符

lcd_wcmd(0x04)//恢复正常

delay(3000)

lcd_wcmd(0x34)

lcd_wcmd(0x03) //允许输入滚动地址

for(i=0x40i<0x7fi++)

{

lcd_wcmd(i) //垂直滚动屏幕的内容

delay(500)

}

}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存