基于51单片机时分秒显示.docx

上传人:b****5 文档编号:7186753 上传时间:2023-01-21 格式:DOCX 页数:18 大小:322.66KB
下载 相关 举报
基于51单片机时分秒显示.docx_第1页
第1页 / 共18页
基于51单片机时分秒显示.docx_第2页
第2页 / 共18页
基于51单片机时分秒显示.docx_第3页
第3页 / 共18页
基于51单片机时分秒显示.docx_第4页
第4页 / 共18页
基于51单片机时分秒显示.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于51单片机时分秒显示.docx

《基于51单片机时分秒显示.docx》由会员分享,可在线阅读,更多相关《基于51单片机时分秒显示.docx(18页珍藏版)》请在冰豆网上搜索。

基于51单片机时分秒显示.docx

基于51单片机时分秒显示

福建农林大学金山学院

《电子器件设计与制作》

课程设计报告

设计题目基于51单片机的时分秒显示

专业年级  12电子科学与技术

姓  名   

学  号  126711029

成  绩          

2015年5月1日

 

目录

前言1

§1设计要求1

§2总体设计过程1

2.1使用的仪器与器材1

2.1.1电路系统框图2

2.1.2系统硬件概述2

2.2电路图(外设部分)2

2.2.174LS138译码器2

2.2.274LS138译码器工作方式4

2.3数码管的结构与工作原理5

§3工作原理5

§4原理图和PCB图6

§5仿真实验7

§6电路板制作8

§7感想与体会8

§8完成效果图9

§9参考文献10

§9附录11

万年历设计

前言

电子万年历是一种日常计时工具,它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能。

数字电子万年历采用直观的数字显示,可以同时显示年、月、日、星期、时、分、秒,还具有时间校准等功能。

本设计要实现硬件与软件两方面的同步设计。

硬件部分主要由AT89C51单片机、74LS138芯片和数码管组成。

AT89C51单片机适合于许多较为复杂控制应用场合,74LS138芯片实现端口扩展和数码管实现显示。

软件方面主要包括时间调整程序和显示程序。

设计中直接采用单片机的定时计数器来提供秒信号,从而实现时、分、秒计数。

程序采用C语言或者汇编语言编写,所有程序编写完成后,首先在KeiluVision3软件中进行调试,然后在Poteus软件中仿真成功,最后通过STC_ISP_V4.80下载到单片机内进行检验,从而完成此次电子万年历的设计。

一、要求

1、设计任务

以AT89C51单片机控制的时钟,在数码管上显示当前的时间。

2、设计要求

2.1使用数码管显示当前时间,显示格式为“时时-分分-秒秒”,并且误差需要在一定范围之内。

2.2在proteus软件中仿真成功。

2.3下载到单片机内现场检验。

2.4熟悉手工制版的过程

二、总体设计过程

1.使用的仪器与器材

51开发板1个,4位八段共阴数码2个,74LS138芯片一个,导线(1梱),排针等。

2.1.1电路系统框图

AT89C52

主控制模块

 

2.1.2系统硬件概述

本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作。

设计中直接采用单片机的定时计数器作为秒信号,从而实现对时、分、秒的计时,74LS138芯片扩展51芯片的端口,使得释放出更多的空闲端口和八位数码管完成显示功能。

2.2电路图(外设部分)

2.2.174LS138译码器

图174LS138管脚图

74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:

当一个选通端(S1)为高电平,另两个选通端(/S2)和/S3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在一个对应的输出端以低电平译出。

 

表13线-8线译码器74LS138的真值表

 

74LS138译码器的接线图

2.2.274LS138译码器工作方式

(74LS138 为3线-8线译码器)

真值表

1.当S1=1、

时,译码器处于工作状态;当S1=

时,译码器处于禁止状态。

2.A2、A1、A0为二进制译码输入端,

为译码输出端(低电平有效)。

A0,A1,A2来控制Y0到Y7之间哪个引脚提供(高)电平来控制显示哪一个位数

2.3数码管的结构与工作原理

我们选用的是4位8段共阴数码管。

A1到A4给予(低)电平控制需要显示的位数A,b,c,d,e,f,g,给予(高)电平控制单个位数现实的数字Dp给予(高)电平控制小数点的显示

三、电路的工作原理

直接将数码管的8个段选接出,直接由单片机控制,位选由译码器控制

四、原理图和PCB图

4.1原理图:

原理图

4.2PCB图:

PCB图

五、仿真实验

六、电路板的制作

61打印电路板。

将绘制好的电路板用转印纸打印出来滑的一面面向自己,打印两张电路板,即一张纸上打印两张电路板。

在其中选择打印效果最好的制作线路板。

6.2裁剪覆铜板。

将覆铜板裁成电路板的大小,不要过大,以节约材料。

6.3预处理覆铜板。

用细砂纸把覆铜板表面的氧化层打磨掉,以保证在转印电路板时,热转印纸上的碳粉能牢固的印在覆铜板上,打磨好的标准是板面光亮,没有明显污渍。

6.4转印电路板

把印有电路板的一面贴在覆铜板上,对齐好后把覆铜板放入热转印机,放入时保证转印纸没有错位。

一般来说经过6-7次转印,热转印机事先就已经预热,温度设定在160-200摄氏度。

6.5腐蚀线路板

检查一下电路板是否转印完整,若有少数没有转印好的地方可以用黑色油性笔修补。

然后拿一个脸盆,在脸盆中放入适当的三氯化铁粉末,用开水化开三氯化铁液体。

把覆铜放入溶液中腐蚀。

等线路板上暴露的铜膜完全被腐蚀掉时,将线路板从腐蚀液中取出清洗干净。

用砂纸清理覆铜表面碳粉或黑色油性笔笔迹。

6.6线路板钻孔

选择合适的钻针,按稳线路板,用便携式台钻对线路板进行钻孔。

在使用钻机钻孔时,钻机速度不能开的过慢。

七、感想与体会

通过对这款基于89C51的万年历及温度显示器的设计,让我更加了解了单片机89C51、时钟芯片74LS138、数码管的原理及使用,更加深刻体会到单片机的神奇。

单片机的智能化控制,在我们生活周围无处不在,使我们的生活更加智能化、便捷化。

 

在设计过程中,我查阅了很多的相关资料,对89C51有了更加深刻的认识,同时对于更加深入的研究单片机有了更强的兴趣。

 

这款基于89C51的万年历,虽然其功能相对而言,可能很简单,但能解决人们现实生活中的实际问题。

在设计过程中,软件设计相对而言,更加的复杂与困难,锻炼了我的逻辑思维能力。

 

通过查阅资料,培养了我的自学能力,并且引导一种创新思维,把学到的知识应用到日常生活当中。

在设计的过程中,我不断的学习、思考,和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难。

通过此设计,我掌握了单片机系统一般的开发流程,学会对常见问题的处理方法,积累了一定的设计系统经,充分使教学与实践相结合,提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。

 

     

八、完成效果图

九、参考文献

[1].谢嘉奎主编《电子线路非线性部分(第四版)》高等教育出版社2000年5月第4版

[2].张肃文陆兆熊编《高频电子线路(第三版)》高等教育出版社

[3]《单片机原理及应用》张毅刚彭善元编著高等教育出版社

[4]DS18B20及高精度温度测量的实现[J]贾振国电子工业出版社

[5] 朱承高.电工及电子技术手册[M].北京:

高等教育出版社,1990

[6] 阎石.数字电子技术基础(第三版)[M].北京:

高等教育出版社,1989

 

附录

*projectfor80C51八段管点亮

*madebyChen_c

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

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

*这次的八段管程序设计以“C”语言语法作为根基,

引入了C++的面向性设计思想,把需要的变量,与函数指针作为成员

非指针变量作为成员,函数指针通过初始化指向特定函数,作为结构体的方法

八段管的设计,需要时分秒三个变量,由于80C51的驱动能力有限,又加上我们做的是外设,

所以我引入了其余六个变量防止出现重影

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

#include

/*宏定义:

把Open_Light作为IO口P2的使用方法*/

#defineOpen_LightP2

/*吧Light作为P0的使用的接口*/

#defineLightP0

#defineLight_twoP1

/*声明一个结构体*/

structTime_show{

inta,b,c,d,e,f;

intshi;

intfen;

intmiao;

void(*init_struct)(structTime_show(*this));

void(*decide_change)(structTime_show(*this));

void(*change_value)(structTime_show(*this));

};

voidinit_struct(structTime_show(*this));

voidshow_time(structTime_show(*this));

voiddecide_change(structTime_show(*this));

voidchange_value(structTime_show(*this));

voiddelay(void);

voidinit(void);

/*138译码器选择亮哪个灯*/

charxuan[]={0xff,0xfb,0xf7,0xf3,0xef,0xeb,0xe7,0xe3};

/*八段管选择亮的是哪个数字*/

charLight_Show[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*和上面相比多一个小数点*/

charLight_Point_Show[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

//定义一个结构体

structTime_shownew_one;

intshi=23;

intfen=59;

intmiao=50;

inti=0;/*用来计数,一秒钟回0*/

intmain(void)

{

/*中断初始化*/

init();

//给结构体赋值

new_one.init_struct=init_struct;

new_one.decide_change=decide_change;

new_one.change_value=change_value;

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

/*初始化结构体*/

new_one.init_struct(&new_one);

new_one.change_value(&new_one);

/*循环语句

每次都显示时间*/

while

(1){

show_time(&new_one);

/*如果到大一分钟就清0然后改变结构体内部的值

*/

if(i>=100){

i=0;

new_one.change_value(&new_one);

new_one.decide_change(&new_one);

}

}

return0;

}

//中断程序代码

//晶振的周期是12T

voidexter(void)interrupt1

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

i++;

}

/*延时函数*/

voiddelay()

{

intf=100;

while(f--);

}

//改变给赋值的IO口赋值的数据

voidchange_value(structTime_show(*this))

{

this->a=this->fen/10;

this->b=this->fen%10;

this->c=this->miao/10;

this->d=this->miao%10;

this->e=this->shi/10;

this->f=this->shi%10;

this->miao++;

}

//当时分秒达到极限的时候改变

voiddecide_change(structTime_show(*this))

{

if(this->miao>=60){

this->miao=0;

this->fen++;

}

if(this->fen>=60){

this->shi++;

this->fen=0;

}

if(this->shi==24){

this->shi=0;

}

}

//给结构体内部的时分秒成员赋值

voidinit_struct(structTime_show(*this))

{

this->shi=shi;

this->fen=fen;

this->miao=miao;

}

/*给端口赋值,亮灯*/

voidshow_time(structTime_show(*this))

{

Open_Light=xuan[0];

Light=Light_Show[this->e];

Light_two=Light_Show[this->e];

delay();

Open_Light=xuan[1];

Light=Light_Show[this->f];

Light_two=Light_Show[this->f];

delay();

Open_Light=xuan[2];

Light=Light_Show[this->a];

Light_two=Light_Show[this->a];

delay();

Open_Light=xuan[3];

Light=Light_Show[this->b];

Light_two=Light_Show[this->b];

delay();

Open_Light=xuan[4];

Light=Light_Show[this->c];

Light_two=Light_Show[this->c];

delay();

Open_Light=xuan[5];

Light=Light_Show[this->d];

Light_two=Light_Show[this->d];

delay();

Open_Light=xuan[6];

Light=0x40;

delay();

Open_Light=xuan[7];

Light=0x40;

delay();

}

voidinit(void)

{

TMOD=0X01;

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

EA=1;

ET0=1;

TR0=1;

}

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

当前位置:首页 > 解决方案 > 解决方案

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

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