带温度显示的万年历 数码管显示

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

设计报告万年历时钟的设计班级: 09光电<2>班专业:光电子技术

姓名:阮军峰

学号: 0906010234 完成日期:

2011年06月11日

一、设计目的:

1、掌握C51程序用于实践并实现相应的功能;

2、掌握时钟程序的使用方法;

3、掌握时间函数的使用方法;

4、掌握键盘的程序使用方法;

二、设计任务:

设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。

三、设计要求:

通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。

四、系统方案设计:

1、系统总体设计:

1) 原理构成框图

本设计用STC89C51作为核心控制部分,外接晶振电路和74HC154,74LS138作为位选扩展电路,P3.0、 P3.1 、P3.2接三个个按钮作为时间调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为数据输出部分。具体框图如图1所示:

图1 原理框图

2) 主程序的设计

系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L 软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。

3) 时间调整电路的设计

采用按键设计,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,按下模式可以选择年月日时分秒星期。按下(+)(-)进行调试,程序如下:

while(1)

{

P3_0=1;

if(P3_0==0){

delay(10);

if(P3_0==0)//如果按键被按下

{

Kdelay();

if(P3_0==0)//确定按键按下

{

while(P3_0==0); // 等待按键放开

cursor++;

if(cursor>=9){cursor=0;}//如果cursor大于9则cursor=0

if(P1_0==0){cursor=0;}

} }

}

P3_1=1;

if(P3_1==0){

delay(10);

if(P3_1==0) //如果按键被按下

{

Kdelay();

if(P3_1==0) //确定按键按下

{

if(cursor==1)

{

sec++;//如果cursor=1则按键按下秒数加一

if(sec==60)

sec=0;//如果秒数等于60秒则回到0开始

}

if(cursor==2)

{

min++;//如果cursor=2则按键按下分数加一

if(min==60)

min=0; 如果分数等于60分则回到0开始

}

if(cursor==3)

{

hour++;//如果cursor=3则按键按下时数加一

if(hour==24)

hour=0; //如果时数等于24时则回到0开始

}

if(cursor==4)

{

day++;//如果cursor=4则按键按下天数加一

if(day==31)

day=0; //如果天数等于31天则回到0开始

}

if(cursor==5)

{

month++;//如果cursor=5则按键按下月数加一

if(month==13)

month=0; //如果月数等于13月则回到0开始

}

if(cursor==6)

{

yearl++;//如果cursor=6则按键按下年数低位加一

if(yearl==100)

yearl=0; //如果年数等于100则回到0开始

}

if(cursor==7)

{

yearh++;//如果cursor=7则按键按下年数高位加一

if(yearh==30)

yearh=20; //如果年数大于30则回到0开始

}

if(cursor==8)

{

week++;//如果cursor=8则按键按下星期数加一

if(week==8)

week=1; //如果星期数等于8则回到0开始

}

}

while(P3_1==0);}

}

P3_2=1; //写入时先写1

if(P3_2==0){//按键按下

delay(10);//延时10个毫秒

if(P3_2==0)//确定按键按下

{

Kdelay();

if(P3_2==0)

{

if(cursor==1)

{

sec--;//如果cursor=1则按键按下秒数减一

if(sec==0)

sec=59; //如果秒数小于0则回到59开始

}

if(cursor==2)

{

min--;//如果cursor=2则按键按下分数减一

if(min==0)

min=59; //如果分数小于0则回到59开始

}

if(cursor==3)

{

hour--;//如果cursor=3则按键按下时数减一

if(hour==0)

hour=23; //如果时数小于0则回到23开始

}

if(cursor==4)

{

day--;//如果cursor=4则按键按下天数减一

if(day==0)

day=31; //如果天数小于0则回到31开始

}

if(cursor==5)

{

month--;//如果cursor=5则按键按下月数减一

if(month==0)

month=12; //如果月数小于0则回到12开始

}

相关文档
最新文档