|

楼主 |
发表于 2011-11-13 21:50:17
|
显示全部楼层
回复 2# liangkan
可以!
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=0XA7;
sbit RW=0XA6;
sbit EC=0XA5;
sbit BF=0X97;
uchar ppp[]={'2','0','1','1',0x0,'1','1',0x1,'1','3',0x2,0x3,0x4,0x6};
uchar code year[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
uchar code month[]={0x0f,0x09,0x0f,0x9,0xf,0x9,0xb,0x11};
uchar code day[]={0x0f,0x09,0x9,0x0f,0x9,0x9,0xf,0x0};
uchar code wu[]={0x08,0xf,0x14,0x4,0x1f,0x4,0x4,0x4};
uchar code shang[]={0x04,0x4,0x4,0x7,0x4,0x4,0x1f,0x0};
uchar code xia[]={0x1f,0x4,0x4,0x6,0x5,0x4,0x4,0x0};
uchar code jun[]={0x1f,0x11,0xe,0x14,0x1f,0x4,0x1f,0x4};
uchar code *pd[]={year,month,day,shang,wu,xia,jun};
void dis_one_char(uchar posx,bit posy,uchar date);
void lcd_cmd(uchar,bit,bit);
void delay(uchar ms)
{
uchar i;
while(--ms)
for (i=124;i>0;i--);
}
void lcd_Rst()
{
P1=0Xf;
delay(15);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,1);delay(5);
lcd_cmd(0x08,0,1);delay(5);
lcd_cmd(0x01,0,1);delay(5);
lcd_cmd(0x06,0,1);delay(5);
lcd_cmd(0x0c,0,1);delay(5);
}
void set_cgram(uchar dat[],uchar addr,uchar posx,bit posy)
{
uchar i=0,k;
addr&=0x3f;
k=addr<<3;k&=0x3f;
k|=0x40;
for (i=0;i<8;i++)
{
lcd_cmd(k++,0,1);
lcd_cmd(dat,1,1);
}
dis_one_char( posx, posy,addr);
}
void lcd_wait()
{
P1=0XFF;
RS=0;
RW=1;
EC=1;
_nop_();
_nop_();
while(BF);
EC=0;
}
void locate(uchar posx,bit posy)
{
posx&=0xf;
posy&=0x1;
if(posy)posx|=0x40;
posx|=0x80;
lcd_cmd(posx,0,1);
}
void lcd_cmd(uchar wcdate,bit rs,bit bf)
{
if (bf) lcd_wait();
P1&=0x0f;
if (rs) RS=1;
else RS=0;
RW=0;
EC=1;
P1|=(wcdate&0xf0);
EC=0;
P1&=0x0f;
EC=1;
P1|=(wcdate<<4);
EC=0;
}
void dis_one_char(uchar posx,bit posy,uchar date)
{
locate(posx,posy);
lcd_cmd(date,1,1);
}
void dis_lcd_str(uchar posx,bit posy,uchar *str)
{
while(*str!='\0')
{
dis_one_char(posx++,posy,*str++);
if(posx>15)
{
posx=0;posy^=1;
}
}
}
void main()
{
uchar i,k,p=100;
while(p--)
{
set_cgram(jun,0,0,0);
delay(10);
}
lcd_cmd(0x1,0,1);
lcd_Rst();
lcd_cmd(0x40,0,1);
while(1)
{
lcd_cmd(pd[k],1,1);
if(++i>7)
{
i=0;
if(++k>6)
break;
}
}
lcd_cmd(0x81,0,1);
while(1)
{
lcd_cmd(ppp,1,1);
if(++i>13)
{
i=0;
lcd_cmd(0xc1,0,1);
}
}
} |
|