江阴职业技术学院
项目设计报告
项目: 数字钟的设计与实现
专 业 应用电子技术专业
学生姓名 **
班 级 09应用电子(2)班
学 号 **
指导教师 **
完成日期 20XX年4月30日
摘 要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域.
本文介绍了一款基于AT89C51单片机数字钟的设计,通过多功能数字钟的设计思路,详细叙述了系统硬件、软件的具体实现过程。具体介绍应用Proteus的ISIS软件进行单片机系统的电子钟设计与仿真的实现方法。该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。
Abstract
In recent years, with computers in the infiltration and the development of large-scale integrated circuits. SCM application is steadily deepening, as it has strong function, small size, low power dissipation, low prices, reliable, easy to use features, it is particularly suited to and control of the system, increasingly widely used in various fields.
This paper introduced the design of digital clock based on SCM of AT89C51, the specific process of how the system hardware and software achieved were detailed description through the design of multifunction digital clock. Describes the application of Proteus's ISIS software of the electronic single-chip system clock to achieve the design and simulation methods in details.The method can not only test the property of the system precisely,but also improve development efficiency and reduce development cost,which values in popularity.
目 录
摘 要 1
Abstract 1
目 录 2
第一章 绪论 3
1.1单片机发展史 3
1.2单片机的特点 4
1.3课程设计目的和要求 3
第二章 总体方案 5
2.1硬件电路设计 错误!未定义书签。
2.3软件电路设计 错误!未定义书签。
第三章 仿真调试 错误!未定义书签。
3.1 keil调试 错误!未定义书签。
3.2 proteus调试 错误!未定义书签。
第四章 结论 1
4.1 总结 1
致 谢 2
参考资料 2
第一章 绪论
1.1 单片机发展史
如果将8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段:
(1)第一阶段(1976-1978):单片机的控索阶段。以Intel公司的MCS 48为代表。MCS 48的推出是在工控领域的控索,参与这一控索的公司还有Motorola 、Zilog等,都取得了满意的效果。这就是SCM的诞生年代,“单机片”一词即由此而来。
(2)第二阶段(1978-1982)单片机的完善阶段。Intel公司在MCS 48 基础上推出了完善的、典型的单片机系列MCS 51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。
①完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口。
②CPU外围功能单元的集中管理模式。
③体现工控特性的位地址空间及位操作方式。
④指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。
(3)第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS 96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS 51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。
(4)第四阶段(1990—):微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。
1.2 单片机的特点
由于单片机的这种结构形式及它所采取的半导体工艺,使其具有很多显著的特点,因而在各个领域都得到了迅猛的发展。单片机主要发如下特点:
(1)有优异的性能价格比。
(2)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。
(3)控制功能强。为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。
(4)低功耗、低电压,便于生产便携式产品。
(5)外部总线增加了I C(Inter-Integrated Circuit)及SPI(Serial Peripheral Interface)等串行总线方式,进一步缩小了体积,简化了结构。
(6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。
1.3课程设计目的和要求
1.目的
(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤;
(4)掌握半导体数码管显示器的使用;
(5)连接数字钟的工作原理。
2、要求
(1)设计能支持时、分、秒的时钟。
(2)时钟有时间调整功能。
(3)时钟具有闹钟功能。
第2章 总体方案
2.1硬件电路设计
1.硬件电路
图2-1 电子钟硬件电路图
2.Protel电路图设计
图2-2 Protel 设计的电子钟电路原理图
3.Proteus 电路图设计
2.2 软件电路设计
1.程序流程图设计
2.源程序设计
以下为源程序:
#include<reg51.H>
#define s0 0x01 //调时/工作/移位
#define s1 0x02 //+1调时、调闹
#define s2 0x04 //调闹/工作/移位
#define s3 0x08 //开/停闹钟
unsigned char seg[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff};
char count=0,sec=0,min=0,hour=0,asec=0,amin=0,ahour=0,time[8]={0,0,10,0,0,10,0,0};
//时分秒,闹时分秒变量
bit Cflag=0,Aflag=0,alarm=0;
//工作/调时标志,工作/调闹标志,闹有效标志
sbit spk=P1^0;//蜂鸣器
unsigned char test(void);//键盘测试
unsigned char scan(void);//键盘扫描,返回键值
void secadd(void);//调时调闹+1
void minadd(void);
void houradd(void);
void display(void);//显示
void delay(void);//延时
void alarmspk(bit flag);//闹钟控制
unsigned char comp();//闹时比较
void change(void);//时分秒对显示缓冲刷新
void shanchange(void);
void schange(unsigned char a);
void mchange(unsigned char a);
void hchange(unsigned char a);
main()
{
unsigned char t,work=0;
//WORK为工作状态标志0:准备调时 1:调秒,2调分,3:调时
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
ET0=1;
EA=1;
while(1)
{
display();
if(alarm)
{
if(comp())alarmspk(1);
}
t=scan();
switch(t)
{
case s0:if(!Aflag)
if(work==0)
{
Cflag=1;ET0=0;work++;
}
else if(work<=2)work++;
else
{
work=0;ET0=1;Cflag=0;
}break;
case s1:if(work==1)secadd();
else if(work==2) minadd();
else houradd();break;
case s2:if(!Cflag)
if(work==0)
{
Aflag=1; ET0=0;work++;
}
else if(work<=2)work++;
else {work=0; ET0=1; Aflag=0;}break;
case s3:alarm=~alarm;if(!alarm) alarmspk(0);
}//switch(t)
}//while(1)
}//main()
void houradd(void)
{
unsigned char temp;
if(Cflag)
{
temp=hour;
temp++;
if(temp>=24)temp=0;
hour=temp;
}
else
{
temp=ahour;
temp++;
if(temp>=24)temp=0;
ahour=temp;
}
hchange(temp);
}
void minadd(void)
{
unsigned char temp;
if(Cflag)
{
temp=min;
temp++;
if(temp>=60)temp=0;
min=temp;
}
else
{
temp=amin;
temp++;
if(temp>=60)temp=0;
amin=temp;
}
mchange(temp);
}
void secadd(void)
{
unsigned char temp;
if(Cflag)
{
temp=sec;
temp++;
if(temp>=60)temp=0;
sec=temp;
}
else
{
temp=asec;
temp++;
if(temp>=60)temp=0;
asec=temp;
}
schange(temp);
}
unsigned char scan(void)
{
unsigned char k,i;
if(test())
{
i=5;
while(i--)display();
if(k=test())
{
while(test())display();
return k;
}
}
return 0;
}
at0()interrupt 1 using 1
{
unsigned char cout;
TH0=0X3C;
TL0=0XB0;
cout++;
if(cout==20)
{
cout=0;
sec++;
if(sec>=60){sec=0;min++;}
if(min>=60){min=0;hour++;}
if(hour>=24)hour=0;
change();
}
}
void change(void)
{
if(!Aflag)
{
hchange(hour);
mchange(min);
schange(sec);
}
else
{
hchange(ahour);
mchange(amin);
schange(asec);
}
}
void hchange(unsigned char a)
{
time[0]=a/10;
time[1]=a%10;
}
void mchange(unsigned char a)
{
time[3]=a/10;
time[4]=a%10;
}
void schange(unsigned char a)
{
time[6]=a/10;
time[7]=a%10;
}
void shanchange(void)
{ unsigned char cout;
if(cout<=10)
{
time[2]=10;
time[5]=10;
}
else
{
time[2]=11;
time[5]=11;
}
}
void display(void)
{
unsigned char t,i;
for(i=0;i<8;i++)
{
t=time[i];
P0=~seg[t];
P2=i;
delay();
P0=0x00;
}
}
unsigned char test(void)
{
unsigned char k;
P3=0XFF;
k=P3;
k=~k;
return k;
}
void delay(void)
{
unsigned char i=250;
while(i--);
}
void alarmspk(bit flag)
{
if(flag) spk=0;
else spk=1;
}
unsigned char comp(void)
{
return(hour==ahour)&&(min==amin)&&(sec==asec)
}
第三章 仿真调试
3.1 Keil调试
(1)在Windows下运行Keil μVisiion3软件,进入Keil μVisiion3开发环境。
(2)在Keil μVisiion3选择Project/New Preject…,建立一个新的工程项目。
(3)给工程项目取名为clock,然后保存。
(4)紧接着自动化弹出器件选择窗,选择Atmel公司的AT89C51,并在弹出窗口中选择否。
(5)在Keil μVisiion32中选择File/New,打开程序编辑器。
(6)输入程序,检查无误后保存文件(扩展名.c)在工程项目相同的目录中。
(7)在Preject Workspace窗口中,选择Source Group1条目并单击右键,在 弹出的菜单在选择Add Files to Group ‘Source Group 1’。
(8)加入刚才保存的汇编程序源文件clock.c。注意,按一次Add按键即可,选完后单击Close退出。
(9)在Project Workspace窗口中,选择Target 1条目并单击右键,在弹出的菜单中选择Option for Target ‘Target 1‘,准备为Target 1配置编译环境。
(10)在Output页为Create HEX File项打勾,以便输出单片机烧写用HEX格式文件。
(11)选项配置好后,在Keil μVisiion3中选择Project/Build target,编译工程项目。
(12)编译结果显示在Output Windows中,若有错,可双击错误提示行,然后定位到源程序中修改;若无误就可进行下面的软件调试。
3.2 Proteus进行电子钟系统仿真
启动Proteus软件,按照元件清单选择所需要的元件,按照电路图连接好电路图,选择单片机,载入已编译好的程序(格式为HEX文件),然后运行,显示普通电子计时器的功能。
第四章 结论
4.1 总结
本文的电子钟系统是以单片机(AT89C52)为核心,具体介绍应用Protel DXP进行电路原理图设计,Keil C51软件调试程序以及Proteus的ISIS软件进行单片机系统的电子钟设计与仿真。实现了硬件软化的目的。
设计过程中我初步找到了单片机开发规律,更加了解了元原件的具体内容,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在完成单片机课程设计后,我们发现我们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。但通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是硬件方面。
致 谢
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多的难题,开阔的思维、敏锐的洞察力以及详细的修改意见一直给我很大的启发,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过和我一组的同学,他们也为我解决了不少我不太明白的设计上的难题以及对我的鼓励与建议。不断得到他们的关心与帮助,使我在学习和生活中不断得到友谊的温暖与关怀,最重要的是一种精神上的激励,让我非常感动。同时也想在此课题上帮助过我的同学和老师表示衷心的感谢。
参考资料
[1]杨立民.单片机技术及应用[M].西安:西安电子科技大学出版社.1997.90~120.
[2]包军卫,单片机课件.江阴职业技术学院.20XX.3-