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

更新时间:2024-01-09 22:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

Proteus仿真图

项目名称:万年历U6B03B14B27B38B413B514B61718D0D1D2D3D4D5D6D7OELE74S373Q0Q1Q2Q3Q4Q5Q6Q7256912151619D0D1D2D3D4D5D6U119D0D1D2D3D4D5D6XTAL1A21A20A19A18A17A1618XTAL29SEC_SETRSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617B0B1B2B3B4B5B6111U3123ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097A0A1A2A3A4A5A6A7MIN_SET293031PSENALEEAHOU_SET12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51MON_SET645E1E2E374LS138WEEK_SETU4123ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097A8A9A10A11A12A13A14A15D0D1D2D3D4D5D6A15A14A13A12A11A10A9A8DAY_SET645YEAR_SETE1E2E374LS138ADD_SUB123U5ABCY0Y1Y2Y3Y4Y5Y6Y715141312111097A16A17A18A19A20A21A7A6A5A4A3A2A1A0645E1E2E374LS138说明:通过数码管显示一个初始时间,不能记忆时间作者:LINLIANHUO日期:2014年07月25日D0D1D2D3D4D5D6 C语言程序

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

TITLE: 万年历设计

FUNCTION: 显示:年-月-日-星期-时-分-秒 WRITER: LINLIANHUO TIME: 2014-07-24

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

***/

#include #define uint unsigned int #define uchar unsigned char

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

uchar code smg_table[]={0xBF,0x86,0xDB,0xCF,0xE6,

uchar code months_days[]={31,28,31,30,31,30,31,31,30,31,30,31};

uchar code transcode[]={0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,

uchar buffer[22]={0};

/**********数据定义*********/ uchar add_sub; uchar key_detection=0; uchar count=0;

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

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

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

typedef struct {

uchar year[2];

uchar month; uchar day; uchar week;

}date;

typedef struct {

uchar hour;

uchar minute; uchar second;

}moment;

date today={{14,20},7,25,5}; moment now={16,52,45};

/**********延时子程序*************/ void delay() {

uchar i,j; }

/**********数码管显示子程序***********/ void smg_display() {

uchar i;

buffer[8]=today.week; buffer[9]=today.week/10; buffer[10]=10;

buffer[0]=now.second; buffer[1]=now.second/10; buffer[2]=10;

buffer[3]=now.minute; buffer[4]=now.minute/10; buffer[5]=10;

buffer[6]=now.hour; buffer[7]=now.hour/10; for(i=0;i<=8;i++)

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

}

buffer[11]=today.day; buffer[12]=today.day/10; buffer[13]=10;

buffer[14]=today.month; buffer[15]=today.month/10;

buffer[16]=10;

buffer[17]=today.year[0]; buffer[18]=today.year[0]/10; buffer[19]=today.year[1]; 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;

}

}

}

}

}

{

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中断服务子程序*****************/

void int0_int() interrupt 0 using 1 {

uchar k; switch(add_sub) {

case 0x80:switch(key_detection) {

case 0xfe: {

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

smg_display();

}break; case 0xfd: {

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

smg_display();

}break; case 0xfb: {

now.hour++;

now.second=0; now.minute=0;

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

}break; case 0xf7: {

today.week++;

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

}break; case 0xef: {

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; case 0xdf: {

today.month++;

if(today.month>=13) today.month=1; smg_display();

}break; case 0xbf: {

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

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

today.year[0]=0;

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

smg_display();

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

}break;

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

}break;

case 0x00:switch(key_detection) {

case 0x7e: {

//now.second++;

if(now.second>0) now.second--; else now.second=59; smg_display();

}break; case 0x7d: {

//now.minute++;

if(now.minute>0) now.minute--; else now.minute=59; smg_display();

}break; case 0x7b: {

//now.hour++;

if(now.hour>0) now.hour--; else now.hour=23; smg_display();

}break; case 0x77: {

//today.week++;

if(today.week>1) today.week--; else today.week=1; smg_display();

}break; case 0x6f: {

//today.day++;

k=leap_year(today.year[1],today.year[0]); if((k==1)&&(today.month==2)) {

if(today.day>1) today.day--; } else {

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

else today.day=29;

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

}

smg_display();

}break; case 0x5f: {

//today.month++;

if(today.month>1) today.month--; else today.month=12; smg_display();

}break; case 0x3f: {

//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;

本文来源:https://www.bwwdw.com/article/byzo.html

Top