如果LCD为串口,数据线1,数据同步时钟1,片选1。
使用定时器,启动定时滚屏动作
如果lcd支持滚屏,只要刷新一行即可。
否则,只能重画了
增设一个N行的输出缓冲区,要输出的内容先写到缓冲区中,记录缓冲区实际数据行数每次新输出一行时,缓冲区数据行数未满则直接添加一行,如果满则先移动:第二行复制到第一行,第三行复制到第二行...第N行复制到第N-1行,然后新内容写到第N行
然后清屏把缓冲区内容全部重新输出到LCD屏, 大体的思路如此,应当可以实现你的想法
求驱图液晶程序请帮忙看看程序 ,LCD1602没显示,背光
##include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code tabel1[]="U:5V"
void delaynms(uint x)
void init()//液晶屏初始化
bit lcd_bz()//LCD忙检测
void LCD_RegWrite(uchar Command)//寄存器进行写 *** 作
void LCD_DataWrite(uchar Data)//写字节显示数据至 LCD
sbit LCD_RS =P3^4
sbit LCD_RW =P3^5
sbit LCD_E =P3^6
void delaynms(uint x) //延1ms程序
{
uchar j
while(x--)
{
for(j=0j<120j++)
}
}
void init()
{
delaynms(50)
LCD_RegWrite(0x38)//功能设置8位双行显示5*7点阵
delaynms(5)
LCD_RegWrite(0x38)//功能设置8位双行显示5*7点阵
delaynms(5)
LCD_RegWrite(0x38)//功能设置8位双行显示5*7点阵
delaynms(5)
LCD_RegWrite(0x08)//关闭显示
LCD_RegWrite(0x01)//清屏
LCD_RegWrite(0x06)//输入式设置光标左向右移显示屏移
LCD_RegWrite(0x0C)//显示显示光标光标闪烁
}
bit lcd_bz()
{ // 测试LCD忙碌状态
bit result
P0=0xFF
LCD_RS = 0
LCD_RW = 1
LCD_E = 0
delaynms(1)
LCD_E = 1
result = (bit)(P0 &0x80)
delaynms(5)
LCD_E = 0
return result
}
//*************写命令***************
void LCD_RegWrite(uchar Command)
{
while(lcd_bz())
LCD_RS = 0//RS 置低示意进行寄存器 *** 作
LCD_RW = 0//RW 置低示意进行写入 *** 作
LCD_E= 0
P0=Command
delaynms(5)
LCD_E= 1
delaynms(5)
LCD_E = 0
}
//**************写数据**************
void LCD_DataWrite(uchar Data)
{
while(lcd_bz())
LCD_RS= 1//RS 置高示意进行显存数据 *** 作
LCD_RW= 0//RW 置低示意进行写入 *** 作
LCD_E = 0
P0=Data//装载数据置总线
delaynms(5)
LCD_E= 1
delaynms(5)
LCD_E= 0//产效跳变沿
}
void LCDxianshi()
{
uchar i
LCD_RegWrite(0x80+0x01)//设置第行第2列显示
for(i=0i<4i++)
{LCD_DataWrite(tabel1[i])
delaynms(10)
}
}
void main()
{
delaynms(400)
init()
delaynms(50)
LCDxianshi()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)