高级会员
主题
回帖0
积分3145
阅读权限30
注册时间2013-5-25
最后登录1970-1-1
在线时间 小时
|
本帖最后由 zjhchp 于 2013-8-22 15:14 编辑
现在手头上有两个的SET1602液晶,使用KS0074控制器,论坛上有介绍。现在可以点亮,现在想让它左右滚屏显示,请高手指点下程序如何写!
先谢谢了!!!!!
KS0074
#include <reg52.H>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA_PORT P2
/***********************************************************************/
sbit lcdrs=P2^0;
sbit lcden=P2^2;
/***********************函数申明***********************************/
void delay_ms(uint z);
void write_com_lcd(uchar com);
void write_data_lcd(uchar date);
void init_lcd();
void write_string_lcd(uchar x,uchar y,uchar *str);
void LocateXY(uchar posx,uchar posy);
/******************************************************************/
void delay_ms(uint z)
{ uint x,y;
for(x=z;x>0;x--)
for(y=452;y>0;y--);
}
/******************************************************************/
void LocateXY(uchar posx,uchar posy)
{ char temp=0;
if(posy==0)temp=0x80+posx;
if(posy==1)temp=0x90+posx;
if(posy==2)temp=0xc0+posx;
write_com_lcd(temp);
}
/******************************************************************/
void write_com_lcd(uchar com)
{ lcdrs=0;
DATA_PORT &=0x0f ; //清高四位,低四位不变
DATA_PORT |=(com&0xf0); //高四位传送
lcden=1;
delay_ms(1);
lcden=0;
com= com<<4; //低四位移到高四位
DATA_PORT &=0x0f ; //清高四位,低四位不变
DATA_PORT |=(com&0xf0); //高四位传送
lcden=1;
delay_ms(1);
lcden=0;
}
/******************************************************************/
void write_data_lcd(uchar dat)
{ lcdrs=1;
DATA_PORT &=0x0f ; //清高四位,低四位不变
DATA_PORT |=(dat&0xf0); //高四位传送
lcden=1;
delay_ms(1);
lcden=0;
dat=dat<<4;
DATA_PORT &=0x0f ; //清高四位,低四位不变
DATA_PORT |=(dat&0xf0); //高四位传送
lcden=1;
delay_ms(1);
lcden=0;
}
/******************************************************************/
void write_string_lcd(uchar x,uchar y,uchar *str)
{ uchar i;
LocateXY(x,y);
for(i=0;i<strlen(str);i++){
write_data_lcd(str);
}
}
/******************************************************************/
void init_lcd()
{
DATA_PORT=0;
write_com_lcd(0x02); //归位 AC=0 指令至少1.64ms
delay_ms(3);
write_com_lcd(0x28); //功能设置,4位总线
delay_ms(1);
write_com_lcd(0x22);
delay_ms(1);
write_com_lcd(0x2c); //re=1,2c
delay_ms(1);
write_com_lcd(0x07);
delay_ms(1);
write_com_lcd(0x08);
delay_ms(1);
write_com_lcd(0x2a); //re=0,2a
delay_ms(1);
write_com_lcd(0x0c); // 0x0c:1100 光标不显示, 字符不闪
// 0x0d:1101 光标显示闪, 字符闪
// 0x0e:1110 光标显示不闪,字符不闪
// 0x0f:1111 光标显示不闪,字符闪
// bit2=0:显示功能关 bit2=1:显示功能开
delay_ms(1);
write_com_lcd(0x07);
delay_ms(1);
}
/******************************************************************/
void main()
{
init_lcd();
delay_ms(3);
write_string_lcd(0,0," LCD_1602 TEST OK !");
write_string_lcd(0,1,"ABCDEFGHIJKLMNOPQRSTUVWXYZ ");
while(1)
{
}
}
|
|