#基于STC89C52单片机时钟Word下载.docx

上传人:b****6 文档编号:17941466 上传时间:2022-12-12 格式:DOCX 页数:16 大小:43.28KB
下载 相关 举报
#基于STC89C52单片机时钟Word下载.docx_第1页
第1页 / 共16页
#基于STC89C52单片机时钟Word下载.docx_第2页
第2页 / 共16页
#基于STC89C52单片机时钟Word下载.docx_第3页
第3页 / 共16页
#基于STC89C52单片机时钟Word下载.docx_第4页
第4页 / 共16页
#基于STC89C52单片机时钟Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

#基于STC89C52单片机时钟Word下载.docx

《#基于STC89C52单片机时钟Word下载.docx》由会员分享,可在线阅读,更多相关《#基于STC89C52单片机时钟Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

#基于STC89C52单片机时钟Word下载.docx

//写数据寄存器DR函数声明

voidlcd_clr();

//清屏函数声明

voidlcd_init();

//LCD初始化函数声明

voidkey_mode();

voidyear_moon_day();

uchardis_buf[19];

uchardis[]={'

0'

'

1'

2'

3'

4'

5'

6'

7'

8'

9'

};

ucharcodename1[]={"

helpyourself!

"

ucharcodename2[]={"

holdon!

ucharyear_month_day[3][8]=

{

{0x04,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0},//年

{0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x00},//月

{0x0e,0x0a,0x0a,0x0e,0x0a,0x0a,0x0e,0x02}//日

uchardingshi=0;

//50ms计数

ucharflag=0;

//按键控制变量

charmiao=55,fen=59,shi=23;

charmoon=12,day=31;

intyear=2012;

ucharleap;

ucharshan;

//控制时分的闪烁位

ucharkey_value;

/****************LCD显示部分******************/

//读忙

bitlcd_busy()

bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

_nop_();

result=(bit)(P2&

0x80);

LCD_EN=0;

returnresult;

}

//清屏

voidlcd_clr()

lcd_wcmd(0x01);

delay_ms(5);

//写指令

voidlcd_wcmd(ucharcmd)

while(lcd_busy());

//delay_ms

(2);

LCD_RW=0;

P2=cmd;

//写数据

voidlcd_wdat(uchardat)

LCD_RS=1;

P2=dat;

//显示初始化

voidlcd_init()

//delay_ms(15);

lcd_wcmd(0x38);

//显示模式为16*25*7点阵8位数据

//清屏

lcd_wcmd(0x06);

//移动光标

lcd_wcmd(0x0c);

//开光标

voiddelay_ms(uintxms)

uchari,j;

for(i=xms;

i>

0;

i--)

for(j=110;

j>

j--);

voidlcd_conv(ucharshi,fen,miao)

dis_buf[0]=dis[shi/10];

dis_buf[1]=dis[shi%10];

dis_buf[2]=0x3a;

dis_buf[3]=dis[fen/10];

dis_buf[4]=dis[fen%10];

dis_buf[5]=0x3a;

dis_buf[6]=dis[miao/10];

dis_buf[7]=dis[miao%10];

voidlcd_conv_year(uintyear,ucharmoon,day)

dis_buf[8]=dis[year/1000];

dis_buf[9]=dis[(year%1000)/100];

dis_buf[10]=dis[(year%100)/10];

dis_buf[11]=dis[year%10];

dis_buf[12]=1;

dis_buf[13]=dis[moon/10];

dis_buf[14]=dis[moon%10];

dis_buf[15]=2;

dis_buf[16]=dis[day/10];

dis_buf[17]=dis[day%10];

dis_buf[18]=3;

voidlcd_dis()

uchari;

lcd_conv(shi,fen,miao);

lcd_conv_year(year,moon,day);

lcd_wcmd(0x00|0x80);

for(i=8;

i<

19;

i++)

lcd_wdat(dis_buf[i]);

lcd_wcmd(0x40|0x80);

for(i=0;

8;

//自定义字符图形

voidlcd_wCGROM()//将汉字写入CGROM

for(i=1;

4;

{

for(j=0;

j<

j++)

{

lcd_wcmd(0x40+i*8+j);

lcd_wdat(year_month_day[i-1][j]);

}

}

/*******************按键部分**********************/

//键盘扫描

voidkeyscan()

key1=0;

delay_ms(20);

if(key2==0||key3==0||key4==0)

{

delay_ms(20);

if(key2==0)

flag++;

if(flag==1)

{

lcd_wcmd(0x0e);

//有光标,但是不闪

delay_ms

(1);

lcd_wcmd(0xc0+1);

//时

TR0=0;

if(flag==2)

lcd_wcmd(0xc0+4);

//分

if(flag==3)

lcd_wcmd(0x80+3);

//年

if(flag==4)

lcd_wcmd(0x80+6);

//月

if(flag==5)

lcd_wcmd(0x80+9);

//日

if(flag>

5)

flag=0;

lcd_wcmd(0x0c);

//关光标

TR0=1;

}

if(key3==0)

key_value=2;

if(key4==0)

key_value=3;

while(key2==0||key3==0||key4==0);

}

voidkeyprocess()

switch(flag)

{

case1:

if(key_value==2)

{

shi++;

if(shi>

23)shi=0;

lcd_dis();

lcd_wcmd(0xc0+1);

delay_ms

(1);

}

if(key_value==3)

shi--;

if(shi<

0)shi=23;

}break;

case2:

fen++;

if(fen>

59)fen=0;

lcd_wcmd(0xc0+4);

fen--;

if(fen<

0)fen=59;

case3:

year++;

if(year>

9999)year=2000;

lcd_wcmd(0x80+3);

year--;

if(year<

2000)year=9999;

case4:

moon++;

if(moon>

12)moon=1;

lcd_wcmd(0x80+6);

moon--;

if(moon<

0)moon=12;

case5:

day++;

if(moon==2&

&

((year-2000)%4==0)&

day>

29)day=1;

((year-2000)%4!

=0)&

28)day=1;

if((moon==1||moon==3||moon==5||moon==7||moon==8||moon==10||moon==12)&

31)

day=1;

if((moon==4||moon==6||moon==9||moon==11)&

30)

lcd_dis();

lcd_wcmd(0x80+9);

day--;

day<

1)day=29;

1)day=28;

1)

day=31;

day=30;

default:

flag=0;

key_value=0;

/*********************走时部分**********************/

voidzoushi_inint()

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

EA=1;

ET0=1;

voidtimer0()interrupt1

if(++dingshi>

20)

miao++;

dingshi=0;

if(miao>

59)

miao=0;

fen++;

if(fen>

fen=0;

shi++;

if(shi>

23)

shi=0;

year_moon_day();

//年月日

voidyear_moon_day()

day++;

if((year-2000)%4==0)

leap=1;

else

leap=0;

if(day>

28)

switch(moon)

if(day>

31){day=1;

}break;

if(leap==1)

{

if(day>

29)

{

day=1;

moon++;

}

}

else

}break;

moon++;

30){day=1;

case6:

case7:

case8:

case9:

case10:

case11:

case12:

if(moon>

12)

moon=1;

year++;

if(year>

9999)

year=2000;

voiddisplay()//开机个性化显示

i=0;

while(i<

14)

lcd_wdat(name1[i]);

i++;

8)

lcd_wdat(name2[i]);

voidmain()

inti,j;

lcd_init();

lcd_clr();

display();

5;

for(j=0;

1000;

delay_ms

(2);

zoushi_inint();

lcd_wCGROM();

while

(1)

lcd_dis();

delay_ms(5);

keyscan();

if(flag!

=0)

while

(1)

keyprocess();

keyscan();

if(TR0==1)

break;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1