资源描述
数字钟的proteus仿真电路及C语言程序设计
———————————————————————————————— 作者:
———————————————————————————————— 日期:
13
个人收集整理 勿做商业用途
河南理工大学万方科技学院
单片机大作业
题 目:数字钟的proteus仿真电路及C语言程序设计
院系名称: 电气与自动化工程系
专业班级: 网络工程一班
学生姓名: 王一帆 学 号: 0926305007
指导教师: 李泉溪 教师职称: 教授
2011 年 月 日
一:概述
1。1数字钟的简介
数字钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。
数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。
这里要求实现一个具有实时时钟显示和闹钟控制功能的数字钟。
通过数字钟的设计与制作,将前面所学的单片机内部定时资源、I/O端口、键盘和显示接口等知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的硬件设计、模块化程序设计及软硬件调试方法等,并掌握单片机应用系统的开发过程。
1.2数字钟设计要求
设计并制作具有如下功能的数字钟:
(1) 自动计时,由6位LED先四起显示时、分、秒。
(2) 具备校准功能,可以设置当前时间.
(3) 具备定时启动功能,可以设置闹钟时间。
1.3数字钟设计方案
(1)采用实时时钟芯片。针对应用系统对实时功能的普遍需求,各大芯片生产厂家陆续推出了一系列实时时钟集成电路,如DS1287、DS12887、DS1302、PCF8563、S35190等。这些实时时钟芯片具备年、月、日、时、分、秒、计时功能和多点定时功能,计时数据每秒自动更新一次,不需程序干预。单片机可通过中断或查询方式读取计时数据.实时时钟芯片的计时功能无须占用CPU时间,功能完善,精度高,软件程序设计相对简单,在实时工业测控系统中多采用这一类专用芯片来实现。
(2)利用单片机并行I/O端口,实现LED动态显示。
该方案直接使用单片机并行口作为显示接口,无须外扩接口芯片,但占用资源较多,且动态扫描显示方式需占用CPU时间。在非实时测控或单片机具有足够并行口资源的情况下可以采用。
二:硬件设计
2。1 数字钟系统硬件描述
1. 控制器用AT89S51 , 12M晶振
2. 数码管动态扫描驱动——P2口
3. 数码管段码驱动—-P1口
4. 闹铃驱动——P1。0
5. 调整键K1——P3。2(外部中断0, 正常、调时、调分、调秒)
6. 定时/正常切换键K2——P3。3
7. 时间参数低位加1键K3——P3。4
8. 时间参数高位加1键K4——P3。5
2.2单片机的介绍
单片机也被称为微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域.它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择.
单片机是靠程序运行的,并且可以修改.通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的.一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!
2.3数字钟系统设计构思
1.主流程是取时间参数,显示时间参数。
2.利用T0中断来完成计时、比较定时时间、驱动闹铃.
3.利用T1中断完成动态显示中,调整时间闪烁效果的定时.
4.利用外部中断0来完成调整选择功能。
5.利用外部中断1完成定时显示,当前时间显示的切换
6.K3、K4键完成时间参数的循环加1操作
2。4数字钟硬件电路图显示
三:软件设计
3.1数字钟主程序设计流程图
3。2 数字钟系统C语言程序代码设计
本系统的软件系统主要可分为显示数字程序、定时计数中断程序、时间调整程序、闹钟设置程序四大模块。
1:显示数字函数
void display(uchar *p)
{ uchar buffer[6]={0,0,0,0,0,0};
uchar k,i,j,m,temp;
uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
buffer[0]=p[0]/10;
buffer[1]=p[0]%10;
buffer[2]=p[1]/10;
buffer[3]=p[1]%10;
buffer[4]=p[2]/10;
buffer[5]=p[2]%10;
for(k=0;k<2;k++)
{temp=0x01;
for(i=0;i<6;i++)
{
j=buffer[i];
P0=~temp;
P1=led[j]; //P1送断码
temp<〈=1;
for(m=0;m〈100;m++);//每一位显示延时
P1=0x00; //关显示
}}}
2:修改时钟函数
void cum()
{ if(secbit==1){ //时钟秒修改标志为1,秒单元内容加1
if(clockbuf[2]==59) clockbuf[2]=0;
else clockbuf[2]++;}
else if(minbit==1){ //时钟分修改标志为1,分单元内容加1
if(clockbuf[1]==59) clockbuf[1]=0;
else clockbuf[1]++;}
else if(hourbit==1){ //时钟小时修改标志为1,小时单元内容加1
if(clockbuf[0]==23) clockbuf[0]=0;
else clockbuf[0]++;}
else if(rminbit==1){ //闹钟分修改标志为1,分单元内容加1
if(bellbuf[1]==59) bellbuf[1]=0;
else bellbuf[1]++;}
else if(rhourbit==1){ //闹钟小时修改标志为1,小时单元内容加1
if(bellbuf[0]==23) bellbuf[0]=0;
else bellbuf[0]++;}
}
3:闹钟设置函数
void ftion1()
{
if(secbit==1||minbit==1||hourbit==1||timdata==1)
{rhourbit=0;rtimbit=0;rtimdata=0;}
else
{
dis_p=bellbuf; //设置闹钟显示标志
rtimdata++; //将闹钟修改记录值加1
switch(rtimdata){
case 0x01:rminbit=1;break;//记录值为1,将闹钟分修改标志置1
case 0x02:rminbit=0;rhourbit=1;break;
//记录值为2,将时钟分修改标志置1
case 0x03:rtimdata=0;rhourbit=0;//按3次则清闹钟单元修改位置记录
armbit=1; //设置闹钟已设置标志位
dis_p=clockbuf;//恢复时钟显示标志
break;
default:break;}
}}
4:定时器中断函数
void clock() interrupt 1
{
EA=0; //关中断
if(msec1!=40) msec1++;
else
{ msec1=0; //到10ms否,不到则msec1加1
if(msec2!=10)msec2++;//到1s否,不到则msec2加1
else
{
if(rtimbit==1)count++;msec2=0;
if(clockbuf[2]!=59)clockbuf[2]++;//到1min否,不到则clockbuf[2]加1
else
{
clockbuf[2]=0;
if(clockbuf[1]!=59)clockbuf[1]++;//到1h否,不到则clockbuf[1]加1
else
{
clockbuf[1]=0;
if(clockbuf[0]!=23)
clockbuf[0]++; //到24h否,不到则clockbuf[0]加1
else clockbuf[0]=0;
}
}}}
EA=1; //开中断
}
3。3数字钟仿真结果显示
电子钟正常显示仿真:
启动闹钟:
设置定时数值:(如图设置为10分钟)
四:设计总计
电子制作不一定一次就能成功,总有个反复过程.因此碰到电路不正常工作的情况时,千万要冷静,不要慌乱.此时既不要埋怨自己,也不要责怪电路,应该集中精力去检查电路。首先应该检查电路的连线。电路越复杂,连线出现错误的几率也就越高,要按照电路图反复检查每一根连线和连接点,每检查一根连线和一个连接点,都在电路图上作一个记录,特别要注意检查接触不好等情况。其次,要检查元件的极性,注意极性方向.经过努力终于找到了电路不正常工作的原因,此时我们的知识技能也一定有了很大的提高。
通过这次实训使我更深刻地感受到Proteus的魅力,完成对数字电子钟的设计与制作调试,使我对单片机应用系统的设计过程进行了掌握.单片机应用系统开发的一般工作流程包括:项目任务的需求分析,制作系统软、硬件方案,系统硬件设计与制作,系统软件模块划分与设计,系统软、硬件联调,程序固化,脱机运行等。当我们接手一个课题或项目的时候,不是马上就动手做,而是先进行可行性论证。首先提出几套方案,然后对各个方案进行对比,最后找出最适合的设计方案。对于芯片的使用,我们应该在了解它的各项功能的前提条件下,灵活巧妙地运用。具体的芯片资料和图片我们通过查阅相关的书籍,在网上能够很方便的查找。
这次大型作业虽然时间很短,但是从中学到很多东西,是自己对以前学的知识有了进一步得了解。并增强了对数字电子技术这门课程的兴趣。同时也发现自对数电知识和电子设计软件掌握得不够.
这次设计仿真我们用到了仿真软件Proteus和编译软件keil,从软件的安装到使用,从网上查阅资料学到了很多课堂之外的专业知识。这次的设计最主要是单片机的应用,从控制到接口.技术是一个多学科的综合,要做到灵活应用需要自我学习各种辅助技术的应用。
这次明显体会到自己知识的匮乏,思考问题不全面,这激励我要学好基础知识的同时要拓展知识面,增强自己的综合能力,从而使得自己成为一个有综合能力的人才而更加适应社会。
参考文献
[1]周景润。基于PROTEUS的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.
[2]单片机AEDK5196ET实验指导书 苏州大学通信与电子工程系
[3]李光才。 单片机课程设计 实例指导[M]。 北京 北京航空航天大学出版社 2004
[4]李朝青。单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998
展开阅读全文