基于STC89C51单片机的万年历制作方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的万年历论文

学校华侨大学

学院信息科学与工程学院

班级10级集成电路设计与集成系统一、摘要

1、

2、74lLS245摘要:

74LS245是我们常用的芯片,用来驱动led 或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

3、四位一体共阴数码管管脚图:

二、所用到的元器件:

1、天关及其功能:

P1_0 //时钟秒或日历天调整

P1_1 //时钟分或日历月调整

P1_2; //时钟时或日历年调整

P1_3 //时间与日历间的切换

RST:复位。

三、protues仿真图:

四1、Altium designer下的原理图:

2、Altium designer下的PCB图:

五、c语言源代码:

#include

#include

#define uchar unsigned char

#define uint unsigned int

/*七段共阳管显示定义*/

uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x80}; //此表为LED 的字模, 共阳数码管0-9 ,_ 和.

/*定义并初始化变量*/

uchar seconde=0;//秒

uchar minite=0;//分

uchar hour=12; //时

uchar day=24;//日

uchar month=3;//月

uint year=2012,a=1,b=1,c=1; //年和下降沿变量

uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1

int dateadd1=0;

sbit P1_0=P1^0; //时钟秒或日历天调整

sbit P1_1=P1^1; //时钟分或日历月调整

sbit P1_2=P1^2; //时钟时或日历年调整

sbit P1_3=P1^3; //时间与日历间的切换

/*函数声明*/

void delay(uint k ); //延时子程序

void time_pro( ); //时间处理子程序

void display( ); //时间显示调整子程序

void dateadd(int m); //日历处理子程序

void calendar( ); //日历显示调整子程序

/*延时子程序*/

void delay (uint k)

{

uchar j;

while(k--)

{

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

{;}

}

}

/*时间处理子程序*/

void time_pro(void)

{

if(seconde==60)

{

seconde=0;

minite++;

if(minite==60)

{

minite=0;

hour++;

if(hour==24)

hour=0;

dateadd1++;

}

}

}

}

/*时间显示调整子程序*/

void display(void)

{

if(P1_3==1)

{

/*时间调整键盘扫描子程序*/

if(P1_0!=a)//秒位的调整,下降沿有效{

delay(10);

if(P1_0==0)

{

seconde++;

if(seconde==60)

{

seconde=0;

}

}a=P1_0;

}

if(P1_1!=b)//分位的调整,下降沿有效{

delay(10);

if(P1_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

}b=P1_1;

}

if(P1_2!=c)//时位的调整,下降沿有效{

delay(10);

if(P1_2==0)

{

hour++;

if(hour==24)

hour=0;

}

}c=P1_2;

}

/*时间显示子程序*/

P3=0Xfe;

P0=dispcode[hour/10];//时十位

delay(2);

P3=0Xfd;

P0=dispcode[hour%10];//时个位

delay(2);

P3=0Xfb;

P0=dispcode[10];//间隔符-

delay(2);

P3=0Xf7;

P0=dispcode[minite/10];//分十位

delay(2);

P3=0Xef;

P0=dispcode[minite%10];//分个位

delay(2);

P3=0Xdf;

P0=dispcode[10];//间隔符-

delay(2);

P3=0Xbf;

P0=dispcode[seconde/10];//秒十位delay(2);

P3=0X7f;

P0=dispcode[seconde%10];//秒个位delay(2);

}

}

/*日历处理子程序*/

void dateadd( int m) //日期加1函数{

if(m)

{

dateadd1--;

switch(month)

{

case 1: if( day==31)

{ day=1;

month++;

break;

相关文档
最新文档