您的位置:首页 > 其它

1602液晶显示

2015-11-03 19:09 295 查看
#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//这三个引脚参考资料

sbit E=P2^7; //1602使能引脚

sbit RW=P2^6; //1602读写引脚

sbit RS=P2^5; //1602数据/命令选择引脚

uchar aa[]=" 23:56:50 ";

uchar bb[]=" 2013-11-09 " ;

uint temp=0;

uchar k = 0,n= 0;

uchar *p=&k;

void delay()

{

uchar cnt;

for(cnt=80;cnt>0;cnt--);

}

void wcmd(uchar del)

{

RS = 0;

RW = 0;

E = 0;

delay();

P0 = del;

delay();

E = 1;

delay();

E = 0;

}

void wdata(uchar del)

{

RS = 1;

RW = 0;

E = 0;

delay();

P0 = del;

delay();

E = 1;

delay();

E = 0;

}

void L1602_init(void)

{

wcmd(0x38);

wcmd(0x0c);

wcmd(0x06);

wcmd(0x01);

}

void L1602_char(uchar hang,uchar lie,char sign)

{

uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

wcmd(a);

wdata(sign);

}

void L1602_string(uchar hang,uchar lie,uchar *p)

{

uchar a,b=0;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

while(1)

{

wcmd(a++);

b++;

if((*p == '\0')||(b==16)) break;

wdata(*p);

p++;

}

}

void int_2(void)

{

int temp;

n++ ;

if(n != 0)

switch ( k )

{

case 1: for(;n>0;n--)

{

aa[12]++;

if(aa[12]==10+'0')

{

aa[12] = '0';

aa[11]++;

}

if(aa[11]=='6')

{ aa[11] = '0';aa[12]= '0'; }

}break;

case 2: for(;n>0;n--)

{ aa[9]++;

if(aa[9]==10+'0')

{

aa[9] = '0';

aa[8]++;

}

if(aa[8]=='6')

{aa[8] = '0';aa[9]='0';}}break;

case 3: for(;n>0;n--){

aa[6]++;

if(aa[6]==10+'0')

{

aa[6] = '0';

aa[5]++;

}

if(aa[5]=='2'&&aa[6]=='4')

{ aa[5] = '0';aa[6]='0';} }break;

case 4: for(;n>0;n--){

bb[12]++;

if(bb[12]==10+'0')

{

bb[11]++;

bb[12]='0';

}

if(bb[8]=='0'&&bb[9]=='2'&&bb[11]=='2' &&bb[12]=='9')

{ bb[11]='0';bb[12]='1';bb[8]='0';bb[9]='2';}

else if (bb[8]=='0'&&(bb[9]=='4'||bb[9]=='6'||bb[9]=='9')||bb[8]=='1'&&bb[9]=='1')

if(bb[11]=='3' &&bb[12]=='1')

{

bb[11]='0';bb[12]='1';

}

if(bb[8]=='0'&&(bb[9]=='5'||bb[9]=='7'||bb[9]=='3'||bb[9]=='1'||bb[9]=='8'))

if(bb[11]=='3' &&bb[12]=='2')

{

bb[11]='0';

bb[12]='1';

}

if(bb[8]=='1'&&(bb[9]=='0'||bb[9]=='2'))

if(bb[11]=='3' &&bb[12]=='2')

{

bb[11]='0';

bb[12]='1';

bb[8] ='1';

}} break;

case 5:for(;n>0;n--){

bb[9]++;

if(bb[9]==10+'0')

{

bb[9] = '0';

bb[8]++;

}

if(bb[8]=='1'&&bb[9]=='3')

{ bb[8] = '0';bb[9]='1'; } }

break;

case 6 : for(;n>0;n--){

bb[6]++;

if(bb[6]==10+'0')

{

bb[6] = '0';

bb[5]++;

if(bb[5]==10+'0')

{

bb[4]++;

bb[5] = '0';

}

}

}break;

default : ;break;

}

// for(temp=55000;temp>0;temp--);

for(temp=11000;temp>0;temp--);

}

void Main()

{

uchar i = 0;

uchar j,k1;

TMOD = 0x01; //方式

TH0 = 0xfc;TL0 = 0x18; //装初值1ms

EA = 1; ET0 = 1; //开中断

EX0 = 1;IT0 = 1; //

TR0 = 1;

L1602_init();

L1602_string(1,1," 2012-11-09 ");

while(1)

{

j = P3;

if(k!=0)

{

j = j&0x08;

if(j==0)

{ for(k1=50;k1>0;k1--)

{

delay();

}

if(j==0)

int_2();

}

}

for(i=2;i<16;i++)

L1602_char(1,i,bb[i]);

for(i=5;i<16;i++)

L1602_char(2,i,aa[i]);

}

}

void int_0(void) interrupt 0

{

int cnt=55000;

ET0 = 0;

(*p)++;

k= k % 7;

if(k==0)

{

ET0 = 1;

n = 0 ;

}

//for(cnt=55000;cnt>0;cnt--);

for(cnt=22000;cnt>0;cnt--);

}

void time0_int (void) interrupt 1

{

TH0 = 0xfc;

TL0 = 0x18+6;

if(k==0)

temp++; // 装初值10ms

if(temp==1000 && k==0)

{

temp = 0;

aa[12]++;

if(aa[12]==10+'0')

{

aa[12] = '0';

aa[11]++;

}

if(aa[11]=='6'&&aa[12]=='0')

{

aa[11]='0';

aa[9]++ ;

}

/*************************************/

if(aa[9]==10+'0')

{

aa[9] = '0';

aa[8]++;

}

if(aa[8]=='6' &&aa[9]=='0')

{

aa[8]='0';

aa[6]++ ;

}

/********************************************/

if(aa[6]==10+'0')

{

aa[6] = '0';

aa[5]++;

}

if(aa[5]=='2' &&aa[6]=='4')

{

aa[6]='0';

aa[5]='0';

bb[12]++;/*******/

}

if(bb[12]==10+'0')

{

bb[11]++;

bb[12]='0';

}

if(bb[8]=='0'&&bb[9]=='2'&&bb[11]=='2' &&bb[12]=='9')

{bb[11]='0';bb[12]='1';bb[9]++;}

else if (bb[8]=='0'&&(bb[9]=='4'||bb[9]=='6'||bb[9]=='9')||bb[8]=='1'&&bb[9]=='1')

if(bb[11]=='3' &&bb[12]=='1')

{

bb[11]='0';bb[12]='1';

bb[9]++;

}

if(bb[8]=='0'&&(bb[9]=='5'||bb[9]=='7'||bb[9]=='3'||bb[9]=='1'||bb[9]=='8'))

if(bb[11]=='3' &&bb[12]=='2')

{

bb[9]++;

bb[11]='0';

bb[12]='1';

}

if(bb[8]=='1'&&(bb[9]=='0'||bb[9]=='2'))

if(bb[11]=='3' &&bb[12]=='2')

{

if(bb[9]=='2')

{

bb[8] = '0';

bb[9] = '1'; //

bb[11]='0';

bb[12]='1'; //

bb[6]++;

if(bb[6]==10+'0')

{

bb[5]++;

bb[6]='0';

}

}

else

{

bb[9]++;

bb[11]='0';

bb[12]='1';

}

}

}

}

很久以前写的了,感觉单片机挺好玩的。跟大家分享一下吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: