#include<STC12C5A60S2.h>
#define LCD1602_DB P0
sbit LCD1602_RS = P2^0;
sbit LCD1602_RW = P2^1;
sbit LCD1602_E = P1^2;
void InitLcd1602();
void LcdshowStr(unsigned char x , unsignedchar y , unsigned char *str,unsigned char len);
void LcdSetCursor(unsigned char x ,unsigned char y);
void LcdWaitReady();
void LcdWritecmd(unsigned char cmd);
void LcdSetCursor(unsigned char x ,unsigned char y);
void delay(int ms);
bit flag500ms=0;
void ConfigTimer0(unsigned int ms);
unsignedchar T0RH=0;
unsignedchar T0RL=0;
unsignedchar code str1[] = "wangyu";
unsignedchar code str2[] = "karyl!";
void main()
{
unsignedchar i =0;
unsignedchar index = 16+sizeof(str1) ;
unsignedchar pdata bufMove1[16+sizeof(str1)+16];
unsignedchar pdata bufMove2[16+sizeof(str2)+16];
EA=1;
ConfigTimer0(10);
InitLcd1602();
for(i=0;i<16;i++)
{
bufMove1='';
bufMove2='';
}
for(i=0;i<sizeof(str1)-1;i++)
{
bufMove1[16+i]=str1;
bufMove2[16+i]=str2;
}
for(i=(16+sizeof(str1)-1);i<sizeof(bufMove1);i++)
{
bufMove1='';
bufMove2='';
}
while(1)
{
if(flag500ms)
{
flag500ms=0;
LcdshowStr(0,0,bufMove1+index,16);
LcdshowStr(0,1,bufMove2+index,16);
index--;
if(index<1)
{
index=16+sizeof(str1);
}
}
}
}
void ConfigTimer0(unsigned int ms)
{
unsignedlong tmp;
tmp=32000000/12;
tmp=(tmp*ms)/1000;
tmp=65536-tmp;
tmp=tmp+12;
T0RH=(unsignedchar)(tmp>>8);
T0RL=(unsignedchar)tmp;
TMOD=0x01;
TH0=T0RH;
TL0=T0RL;
ET0=1;
TR0=1;
}
void LcdWriteDat(unsigned char dat)//???
{
LcdWaitReady();
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB= dat;
delay(1);
LCD1602_E=1;
delay(1);
LCD1602_E=0;
}
void LcdWaitReady() //??STA7=0
{
unsigned char sta;
LCD1602_RS=0;
LCD1602_RW = 1;
LCD1602_DB= 0xFF;
do{
LCD1602_E=1;
sta=LCD1602_DB;
LCD1602_E=0;
}while(sta&0x80);
}
void LcdWritecmd(unsigned char cmd) //???
{
LcdWaitReady(); //??STA7=0
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DB= cmd;
delay(1);
LCD1602_E=1;
delay(1);
LCD1602_E=0;
}
void LcdSetCursor(unsigned char x ,unsigned char y) //????????
{
unsigned char addr;
if(y==0)
addr=0x00 + x;
else
addr=0x40 + x ;
LcdWritecmd(addr+0x80);
}
void LcdShowStr(unsigned char x, unsignedchar y ,unsigned char*str,unsigned char len)//?????
{
LcdSetCursor(x,y);
while(len--)
{
LcdWriteDat(*str++);
}
}
void InitLcd1602() //????
{
LcdWritecmd(0x38);
LcdWritecmd(0x0c);
LcdWritecmd(0x06);
LcdWritecmd(0x01);
}
void delay(int ms)
{
ms*=180;
while(ms)
{
ms--;
}
}
void InterruptTimer0() interrupt 1
{
static unsigned char tmr500ms=0;
TH0=T0RH;
TL0=T0RL;
tmr500ms++;
if(tmr500ms>=50)
{
tmr500ms=0;
flag500ms=1;
}
}