|
#include "reg51.h"
#define uchar unsigned char
#define uint unsigend int
#define port P0
uchar table[]="0123456789";
uchar miaog=0,miaos=1,feng=1,fens=1,shig=1,shis=1;
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P2^5;
/***********************************
***00000 5*7 -> 0xff
*****0** /5*8 0x40
*****0** 0x40 ----> I
*****0** 0x40 ---->
*****0** 0x40
*****0** 0x40
***00000 0x1f
??????????
***********************************/
code uchar ziku[]=
{
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //??“?”
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //??“?”
0x01,0x02,0x03,0x05,0x09,0x03,0x00,0x00, //??“?”???
0x00,0x00,0x1e,0x08,0x08,0x1e,0x08,0x08 //??“?”???
};
/*******************************
??lcd1602??
*******************************/
uchar lcd_readcom()
{
uchar temp;
e=0;
port=0xff;
rs=0;
rw=1;
e=1;
temp=port;
e=0;
return temp;
}
/***************************************
?? lcd ???? ??????
***************************************/
check_busy()
{
uchar temp;
do{
temp=lcd_readcom();
}while((temp&0x80)==0x80);
}
/*****************************************
?lcd????
*****************************************/
void lcd_writecom(uchar dat)
{
check_busy();
e=0;
port=dat;
rs=0;
rw=0;
e=1;
e=0;
}
/***************************************
??lcd??????
*****************************************/
uchar lcd_readdat()
{
uchar temp;
check_busy();
e=0;
port=0xff;
rs=1;
rw=1;
e=1;
temp=port;
e=0;
return temp;
}
/****************************************
?lcd????
****************************************/
void lcd_writedat(uchar dat)
{
check_busy();
e=0;
port=dat;
rs=1;
rw=0;
e=1;
e=0;
}
/****************************************
?lcd????
*****************************************/
void lcd_gets(char *dat)
{
while(*dat!=0)
{
lcd_writedat(*dat);
dat++;
}
}
/*****************************************
????????x y ??
******************************************/
void lcd_xy(uchar x,uchar y)
{
switch(y)
{
case 0:lcd_writecom(0x80+x);break;//????X???
case 1:lcd_writecom(0xc0+x);break;//0xc0==0x80+0x50 ????X???
case 2:lcd_writecom(0x94+x);break;//
case 3:lcd_writecom(0xd4+x);break;//4*20
}
}
/****************************************************
??????5*10 ??5*8 MODE=1 5*8 MODE=0 5*10
****************************************************/
add_custom_word(uchar *dat,uchar len,uchar mode)
{
uchar n,m;
for(n=0;n<len;n++)
{
if(mode)
{
lcd_writecom(0x40+8*n);
for(m=0;m<8;m++)
{
lcd_writedat(*dat);
dat++;
}
}
else
{
lcd_writecom(0x40+10*n);
for(m=0;m<10;m++)
{
lcd_writedat(*dat);
dat++;
}
}
}
}
/********************************************
???lcd
********************************************/
void lcd_init()
{
lcd_writecom(0x01) ;//??
lcd_writecom(0x03) ;
lcd_writecom(0x3c) ;
lcd_writecom(0x40) ;
lcd_writecom(0x0c) ;
add_custom_word(ziku,4,1); //????????
}
/********************************************
1ms ??????????
********************************************/
void delay(uchar z)
{
uchar x,y,a;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
for(a=1;a>0;a--) ;
}
/**********************************************
??? ????
***********************************************/
main()
{
lcd_init();
//lcd_xy(0,0);
//lcd_gets(" I LOVE YOU");
//lcd_xy(0,1);
//lcd_gets("Shang Hong Rui");
lcd_xy(2,0) ;
lcd_gets("2011");
lcd_xy(6,0) ;
lcd_writedat(2);
lcd_xy(7,0);
lcd_writedat(3);
lcd_xy(8,0) ;
lcd_gets("03");
lcd_xy(10,0);
lcd_writedat(1);
lcd_xy(11,0) ;
lcd_gets("06");
lcd_xy(13,0);
lcd_writedat(0);
lcd_xy(3,1) ;
lcd_gets("0");
lcd_xy(4,1) ;
lcd_gets("0");
lcd_xy(5,1) ;
lcd_gets(":");
lcd_xy(6,1) ;
lcd_gets("0");
lcd_xy(7,1) ;
lcd_gets("0");
lcd_xy(8,1) ;
lcd_gets(":");
lcd_xy(9,1) ;
lcd_gets("0");
lcd_xy(10,1) ;
lcd_gets("0");
while(1)
{
//for(m=0;m<10;m++)
lcd_xy(10,1);
lcd_writedat(table[miaog]); //???
delay(1000);
miaog++;
if(miaog==10)
{
miaog=0;
lcd_xy(9,1);
lcd_writedat(table[miaos]); //???
miaos++;
if(miaos==6)
{
miaos=0;
lcd_xy(7,1);
lcd_writedat(table[feng]); //???
feng++;
if(feng==10)
{
feng=0;
lcd_xy(6,1);
lcd_writedat(table[fens]); //???
fens++;
if(fens==6)
{
fens=0;
lcd_xy(4,1);
lcd_writedat(table[shig]); //???
shig++;
if(shig==10)
{
shig=0;
lcd_xy(3,1);
lcd_writedat(table[shis]); //???
shis++;
if(shis==6)
{
shis=0;
}
}
}
}
}
}
}
//lcd_xy(0,0);
//lcd_writedat(0);//???????,0?????? ,1??????,????
//lcd_xy(15,0);
//lcd_writedat(3); //???????
}
|
|