基于51数码管显示的万年历仿真+程序完整.docx

上传人:b****5 文档编号:8576190 上传时间:2023-01-31 格式:DOCX 页数:12 大小:53.92KB
下载 相关 举报
基于51数码管显示的万年历仿真+程序完整.docx_第1页
第1页 / 共12页
基于51数码管显示的万年历仿真+程序完整.docx_第2页
第2页 / 共12页
基于51数码管显示的万年历仿真+程序完整.docx_第3页
第3页 / 共12页
基于51数码管显示的万年历仿真+程序完整.docx_第4页
第4页 / 共12页
基于51数码管显示的万年历仿真+程序完整.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于51数码管显示的万年历仿真+程序完整.docx

《基于51数码管显示的万年历仿真+程序完整.docx》由会员分享,可在线阅读,更多相关《基于51数码管显示的万年历仿真+程序完整.docx(12页珍藏版)》请在冰豆网上搜索。

基于51数码管显示的万年历仿真+程序完整.docx

基于51数码管显示的万年历仿真+程序完整

基于数码管显示的万年历(proteus仿真+C程序)

Proteus仿真图

C语言程序

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

TITLE:

万年历设计

FUNCTION:

显示:

年-月-日-星期-时-分-秒

WRITER:

LINLIANHUO

TIME:

2014-07-24

REMARK:

译码扫描时间不能过长,否则无法实现调整

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

#include

#defineuintunsignedint

#defineucharunsignedchar

/***********码表***************/

ucharcodesmg_table[]={0xBF,0x86,0xDB,0xCF,0xE6,

0xED,0xFD,0xA7,0xFF,0xEF,0xC0};

ucharcodemonths_days[]={31,28,31,30,31,30,31,31,30,31,30,31};

ucharcodetranscode[]={0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,

0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,

0xee,0xef,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd};

ucharbuffer[22]={0};

/**********数据定义*********/

ucharadd_sub;

ucharkey_detection=0;

ucharcount=0;

typedefstruct

{

ucharyear[2];

ucharmonth;

ucharday;

ucharweek;

}date;

typedefstruct

{

ucharhour;

ucharminute;

ucharsecond;

}moment;

datetoday={{14,20},7,25,5};

momentnow={16,52,45};

/**********延时子程序*************/

voiddelay()

{

uchari,j;

for(i=0;i<=8;i++)

for(j=0;j<40;j++);

}

/**********数码管显示子程序***********/

voidsmg_display()

{

uchari;

buffer[0]=now.second%10;

buffer[1]=now.second/10;

buffer[2]=10;

buffer[3]=now.minute%10;

buffer[4]=now.minute/10;

buffer[5]=10;

buffer[6]=now.hour%10;

buffer[7]=now.hour/10;

buffer[8]=today.week%10;

buffer[9]=today.week/10;

buffer[10]=10;

buffer[11]=today.day%10;

buffer[12]=today.day/10;

buffer[13]=10;

buffer[14]=today.month%10;

buffer[15]=today.month/10;

buffer[16]=10;

buffer[17]=today.year[0]%10;

buffer[18]=today.year[0]/10;

buffer[19]=today.year[1]%10;

buffer[20]=today.year[1]/10;

buffer[21]=10;

for(i=0;i<22;i++)

{

P0=smg_table[buffer[i]];

P2=transcode[i];

delay();

P2=0xff;

}

}

/***********初始化子程序************/

voidinit()

{

TMOD=0X01;

TH0=55535/256;

TL0=55535%256;

EA=1;

ET0=1;

TR0=1;

P1=0XFF;

}

/**********按键扫描子程序********/

voidkey_scan()

{

key_detection=P1&0xff;

add_sub=key_detection&0x80;

switch(add_sub)

{

case0x80:

switch(key_detection)

{

case0xfe:

{EA=1;EX0=1;IT0=1;}break;

case0xfd:

{EA=1;EX0=1;IT0=1;}break;

case0xfb:

{EA=1;EX0=1;IT0=1;}break;

case0xf7:

{EA=1;EX0=1;IT0=1;}break;

case0xef:

{EA=1;EX0=1;IT0=1;}break;

case0xdf:

{EA=1;EX0=1;IT0=1;}break;

case0xbf:

{EA=1;EX0=1;IT0=1;}break;

default:

{EA=1;EX0=0;TR0=1;}break;

}break;

case0x00:

switch(key_detection)

{

case0x7e:

{EA=1;EX0=1;IT0=1;}break;

case0x7d:

{EA=1;EX0=1;IT0=1;}break;

case0x7b:

{EA=1;EX0=1;IT0=1;}break;

case0x77:

{EA=1;EX0=1;IT0=1;}break;

case0x6f:

{EA=1;EX0=1;IT0=1;}break;

case0x5f:

{EA=1;EX0=1;IT0=1;}break;

case0x3f:

{EA=1;EX0=1;IT0=1;}break;

default:

{EA=1;EX0=0;TR0=1;}break;

}break;

}

}

/***********闰年计算子程序***********/

ucharleap_year(uchara,ucharb)

{

ucharx,y;

x=a*100+b;

if((x%4==0)&&(x%100!

=0)||(x%400==0))

y=1;

else

y=0;

returny;

}

/***********主程序************/

voidmain()

{

init();

while

(1)

{

key_scan();

}

}

/**********T0中断服务子程序************/

voidT0_int()interrupt1using0

{

ucharl;

TH0=55535/256;

TL0=55535%256;

count++;

if(count==30)

{

count=0;

now.second++;

if(now.second>=60)

{

now.second=0;

now.minute++;

if(now.minute>=60)

{

now.minute=0;

now.hour++;

if(now.hour>=24)

{

now.hour=0;

today.day++;

today.week++;

if(today.week>=8)

{

today.week=1;

}

l=leap_year(today.year[1],today.year[0]);

if((l==1)&&(today.month==2))

{

if(today.day>=30)

{

today.day=1;

today.month++;

}

}

else

if(today.day>=months_days[today.month-1]+1)

{

today.day=1;

today.month++;

if(today.month>=12)

{

today.month=1;

today.year[0]=today.year[0]+1;

if(today.year[0]>=100)

{

today.year[0]=0;

today.year[1]=today.year[1]+1;

if(today.year[1]==100)

{

today.year[1]=0;

}

}

}

}

}

}

}

}

smg_display();

}

/*************INT0中断服务子程序*****************/

voidint0_int()interrupt0using1

{

uchark;

switch(add_sub)

{

case0x80:

switch(key_detection)

{

case0xfe:

{

now.second++;

if(now.second>=60)now.second=0;

smg_display();

}break;

case0xfd:

{

now.minute++;

if(now.minute>=60)now.minute=0;

smg_display();

}break;

case0xfb:

{

now.hour++;

if(now.hour>=24)now.hour=0;

smg_display();

}break;

case0xf7:

{

today.week++;

if(today.week>=8)today.week=1;

smg_display();

}break;

case0xef:

{

today.day++;

k=leap_year(today.year[1],today.year[0]);

if((k==1)&&(today.month==2))

{

if(today.day>=30)today.day=1;

}

else

if(today.day>=months_days[today.month-1])

today.day=1;

smg_display();

}break;

case0xdf:

{

today.month++;

if(today.month>=13)

today.month=1;

smg_display();

}break;

case0xbf:

{

today.year[0]=today.year[0]+1;

if(today.year[0]>=100)

{

today.year[0]=0;

today.year[1]=today.year[1]+1;

if(today.year[1]==100)

today.year[1]=0;

}

smg_display();

}break;

default:

{EA=1;EX0=0;TR0=1;}break;

}break;

case0x00:

switch(key_detection)

{

case0x7e:

{

//now.second++;

if(now.second>0)now.second--;

elsenow.second=59;

smg_display();

}break;

case0x7d:

{

//now.minute++;

if(now.minute>0)now.minute--;

elsenow.minute=59;

smg_display();

}break;

case0x7b:

{

//now.hour++;

if(now.hour>0)now.hour--;

elsenow.hour=23;

smg_display();

}break;

case0x77:

{

//today.week++;

if(today.week>1)today.week--;

elsetoday.week=1;

smg_display();

}break;

case0x6f:

{

//today.day++;

k=leap_year(today.year[1],today.year[0]);

if((k==1)&&(today.month==2))

{

if(today.day>1)today.day--;

elsetoday.day=29;

}

else

{

if(today.day>1)today.day--;

elsetoday.day=months_days[today.month-1];

}

smg_display();

}break;

case0x5f:

{

//today.month++;

if(today.month>1)

today.month--;

elsetoday.month=12;

smg_display();

}break;

case0x3f:

{

//today.year[0]=today.year[0]+1;

if(today.year[0]>0)

today.year[0]=today.year[0]-1;

else

{

today.year[0]=99;

today.year[1]=today.year[1]-1;

}

smg_display();

}break;

default:

{EA=1;EX0=0;TR0=1;}break;

}break;

}

}

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

当前位置:首页 > 高等教育 > 工学

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

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