电子计时器综合系统

电子计时器综合系统
电子计时器综合系统

吉林建筑大学

电气与计算机学院

单片机原理与应用A课程设计报告

设计题目:电子计时器综合系统

专业班级:

学生姓名:

学号:

指导教师:

设计时间:2015.09.07-2015.09.18

第一章绪论 (2)

第二章设计方案与论证 (3)

一、总体设计方案 (4)

二、最小系统设计 (4)

2.1时钟电路设计 (4)

2.2复位电路设计 (4)

2.3最小系统设计 (4)

三、数码管显示模块设计 (5)

四、按键控制模块设计 (5)

第三章程序制作 (6)

3.1编程软件介绍 (6)

3.2程序框图设计 (7)

第四章仿真调试 (9)

第五章现象与收获 (11)

第六章参考文献 (12)

附录 (13)

附件1:原理图 (14)

附件2:仿真图 (15)

附件3:程序 (16)

第一章绪论

一、课程设计目的及内容

1、目的:本次课程设计是对理论讲授的一个应用的过程,通过此次课程设计一方面使学生对课堂所学单片机原理知识进一步巩固和验证,另一方面也增加学生的感性认识,有助于加深对所学知识的理解,同时锻炼学生的实际动手能力和分析问题解决问题的能力。

2、内容:利用AT89C51单片机的定时器,中断,串行口,内存等内部资源扩展外部4个键盘,4位LED8段数码管,设计一个具有多种I/O接口的综合性功能电路,并编写出有个性有特色的应用软件用以实现电子计时器的功能。

二、课程设计要求:

(1)有上电指示灯。

(2)能正确手动复位。

(3)能产生12MHz的振荡信号供单片机使用。

(4)4位LED显示:动态扫描方式显示,要求无闪烁,能正确显示程序送显的数据,可以使用液晶屏。

(5)能按照分秒进制规则显示,其中两位LED显示秒,两位LED显示分,每一秒钟秒加一,加到60产生进位同时分加一,当分位加至60则全清零,从零开始重新计时。

(6)外扩4个按键,能够正确识别键值,当某些键按下时,能正确调整LED 显示,能实现计时秒表功能,精确到0.01秒,可以使用键盘。

三、提交设计报告一份要求如下:

(1).简述设计目的;

(2).阐述设计原理;

(3).按步骤设计;

(4).绘制硬件原理图;

(5).用protues仿真;

(6).给出程序清单;

(7).字迹工整,文句通顺,内容涉及公式部分一律用公式编辑器编辑,正文用宋体小四字,标题一律用黑体四号字。同时写出课程设计过程中的运行结果,现象,体验与收获。

第二章设计方案选择与设计

一、总体设计方案

使用STC89C51单片机作为核心控制部件,采用12M晶体振荡器及30PF微小电容构成振荡电路;用1个四位一体共阴极数码显示管作为显示部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的计时、清零、停止、增减初始时间等各项功能。

系统框图:

图1.1系统框图

二、单片机最小系统设计

2.1、时钟电路设计

在XTAL1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。在本设计中采用的12M 的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。当采用石英晶振时,电容可以在20 ~40pF 之间选择。

图2.2.1时钟电路设计

2.2、复位电路设计

复位操作通常有两种基本形式:上电自动复位和开关复位。上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。并联在电容的两端为复位按键,当复位按键没有被按下的时候电路实现上电复位,在芯片正常工作后,通过按下按键使RST管脚出现高电平达到手动复位的效果。

图2.2.2复位电路设计

2.3、最小系统设计

图2.2.3最小系统

2.4、EA/VPP(31 脚)的功能和接法51 单片机的EA/VPP(31 脚)是内部和外部程序存储器的选择管脚。当EA 保持高电平时,单片机访问内部程序存储器;对于现今的绝大部分单片机来说,其内部的程序存储器(一般为flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。2.5.、P0 口外接上拉电阻

51 单片机的P0 端口为开漏输出,内部无上拉电阻。所以在当做普通I/O 输出数据时,由于V2 截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。

三、数码管显示模块设计

显示部分采用动态显示。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的共阴极增加位选通控制电路,位选由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的位选通端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示是利用人眼视觉暂留特性来实现显示的。事实上,显示器上任何时刻只有一个数码管有显示。由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。

图2.3数码管连接

四、按键控制系统设计

由P1口作为独立摁键信号的输入端控制时钟的加1s、减1s、复位60.0s 等操作。用外部中断0作为秒表计时器的开启和暂停的操作。且所有摁键均为低电平有效。其中部分摁键为单刀双掷开关用于控制增计时或减计时以及限60.0s计时和60.0s外计时。

图2.4按键控制电路

第三章程序制作

3.1、Keil C51编程软件介绍

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

3.2、程序流程图制作

软件程序从开始执行,先通过初始化各个寄存器,经过扫描按键来决定是否设定参数来执行相应功能的程序,进而在数码管上显示。如图3-2:

图3-2 主程序流程图

3.3、秒表中断程序流程图

秒表功能通过另一个程序来实现。通过保护主程序的数据来进行秒表功能。程序中需要设置秒表的具体显示方法。如图3-3:

图3-3秒表中断程序流程图

通过设置实现秒表的功能,按key4键实现秒表开始计时,精确到0.01秒,当计数超过100时自动加1,当秒超过60秒时分针加1,可实现自动清零,通过外扩键盘控制。

4、按键程序流程图

图3-4按键程序流程图

第四章仿真调试

1、Proteus ISIS软件介绍

Proteus 是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。

如今基于单片机的嵌入式系统已广泛应用在国防、教育、工业等领域。其核心在于其微处理器。因此单片机的开发越来越受到重视。但是在传统的嵌入式系统学习中,嵌入式开发平台是必不可少的。购买开发平台是一种花费,而且对于初学者来说,原理图设计完成之后,需要自己反复搭电路或多次制PCB板,这大大增加了开发成本。Proteus是一款优秀的单片机仿真与开发软件,他可以以软件的方式模拟整个系统的运行,这样大大节省了开发周期和开发成本。

2、Proteus ISIS软件特点

(1)实现了单片机仿真和SPICE电路仿真相结合

具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统

的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

(2)支持主流单片机系统的仿真

目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、A VR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

(3)提供软件调试功能

在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以

观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB 等软件。

(4)具有强大的原理图绘制功能

总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能

极其强大。

3、Proteus ISIS软件仿真

利用Proteus ISIS软件仿真当电源接通时上电指示灯变亮,当按复位开关时能实现复位功能,能按照分秒进制规则显示,其中两位LED显示秒,两位LED显示分,每一秒钟秒加一,加到60产生进位同时分加一,当分位加至60则全清零,从零开始重新计时,外扩4个按键,能够正确识别键值,当某些键按下时,能正确调整LED显示,能实现计时秒表功能,精确到0.01秒,可以使用键盘,可以实现分秒表的加减。

利用AT89C51单片机的定时器,中断,串行口,内存等内部资源扩展外部4个键盘,4位LED8段数码管,设计一个具有多种I/O接口的综合性功能电路,并编写出有个性有特色的应用软件用以实现电子计时器的功能。外扩4个按键,能够正确识别键值,当某些键按下时,能正确调整LED显示,能实现计时秒表功能,精确到0.01秒,可以使用键盘。key1为功能设置键,key2和key3为加减键key4为秒表功能键。

图4-3系统仿真图

系统仿真实现的功能:通电后,上电指示灯变亮,key4为秒表功能键,当开关闭合实现秒表功能,key1为功能设置键,开关闭合,key2实现分钟加减,key3实现秒钟加减。

第五章现象与收获

单片机课程设计,是对单片机知识的验证,可以帮助我们理解巩固所学知识,激发我们对单片机课程的兴趣,更锻炼了我们独立思考、开拓创新的能力。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计让我充分认识到合作的重要性,只有合作才能保证整个项目的有条不絮。在设计过程中,非常感谢同学们的指导,才使设计进展的比较顺利。另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我的设计以极大的帮助,使我获益匪浅。因此非常感谢张慧老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。

通过本次课程设计较系统地掌握有关单片机控制的设计思想和设计方法,主要对AT89C51的结构、功能、内部资源等了解并对其进行测试和加以应用的知识得到学习。由于是在我们短学期实习之后才来始写的,我们实习做的是电子钟,所以对时钟有了一定的掌握。这个秒表\时钟设计,我在原来的功能上增加了定时报响的功能。这个设计的大部分内容都是在网上找的内容,自己做了一点点小小的改动,在上网找资料的同时也学到了许多东西,找到了很多学习单片机的网站,里面的内容都比较适合我们初学者去学,有些网站还专门介绍这种单片机的类型、用法、功能等等。其实我们平时不懂就应该自己去学习去弄明白,只是平时我们都太懒。通过这个课程设计,使我发现,原来小小的一片单片机有这么强大的功能,能应用于各种领域。都是觉得很神奇,人类都的聪明啊。我应该在自己以后的学习中,不仅要有刻苦努力,要有钻研精神,还要有创新,对自己感兴趣的一定要用心去学。

致谢:我还要再次致谢我的课程设计老师迟耀丹老师,这次课程设计实在她的悉心指导下完成的,迟老师严谨的治学态度个科学的工作方式给了我很大的帮助和影响,在此由衷的感谢迟老师对我的关心和指导。

参考文献:

1.齐志才MCS-51系列单片机原理及接口技术中国建筑工业出版社2005

2.阎石数字电子技术基础高等教育出版社2003

3.蔡美琴MCS--51系列单片机原理及应用高等教育出版社1999

4.张毅刚单片机原理及应用高等教育出版社2004

5.张友德单片微型机原理、应用与试验复旦大学出版社2000

附件一、电路原理图:

附件二、系统仿真图:

附件三、程序:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define out P1

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2;

sbit key1=P3^0;//stop

sbit key2=P3^1;//add

sbit key3=P3^2;//cut

sbit key4=P3^3;//miaobiao

uchar keynum,t;

uchar min,sec;

uchar s,q;

uchar m,n;

uchar i,j;

uchar code date[]=" 00:00 ";//di yi hang uchar code time[]=" TIME 00:00 ";//di er hang uchar code tabs[]="SEC CHANGE ";

uchar code tabm[]="MIN CHANGE ";

uchar min=0,sec=0,s=0,msec=0;

void delay(uchar ms)

{

while(ms--)

{};

}

void write_command(uchar com)

{

E=0;

RS=0;

RW=0;

out=com;

E=1;

_nop_();

E=0;

delay(10);

}

void write_data(uchar dat)

{

E=0;

RS=1;

RW=0;

out=dat;

E=1;

_nop_();

E=0;

delay(10);

}

void lcd_init()

{

write_command(0x38);

delay(10);

write_command(0x0c);

delay(10);

write_command(0x06);

delay(10);

write_command(0x01);

delay(10);

for(i=0;i<16;i++)

{

write_data(date[i]);

}

write_command(0x80+0x40);

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

{

write_data(time[j]);

}

}

void t0_init()

{

TMOD=0x01;

TH0=(65536-56483)/256;

TL0=(65536-56483)%256;

EA=1;

ET0=1;

TR0=1;

}

void t1_init()

{

TMOD=0x10;

TH1=(65536-381)/256;

TL1=(65536-381)%256;

EA=1;

ET1=1;

IT1=1;

TR1=0;

}

void write_wz(uchar add,uchar date)

{

uchar x,y;

x=date/10;

y=date%10;

write_command(0x80+add);

write_data(0x30+x);

write_data(0x30+y);

}

void clock_write(uint s,uint m)

{

write_wz(0x4a,m);

write_wz(0x4d,s);

}

void key()// 键扫描

{

uchar keynum;

uchar t;

if(key1==0)

{

delay(10);

if(key1==0)

{

while(!key1);

TR0=0;

TR1=0;

keynum++;

if(keynum==1)

{

write_command(0x80);

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

{

write_data(tabs[j]);

delay(10);

}

}// sec

if(keynum==2)

{

write_command(0x80);

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

{

write_data(tabm[j]);

delay(10);

}

}// min

if(keynum==3)

{

keynum==0;

TR0=~TR0;

write_command(0x80+0x00);

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

{

write_data(date[j]);

delay(10);

}

}// display normal

}

}

if(key4==0)

{

delay(10);

if(key4==0)

{

while(!key4);

TR0=0;

TR1=1;

t++;

if(t==2)

{

t==0;

TR0=~TR0;

TR1=~TR1;

}

}

}

if(keynum!=0)

{

if(key2==0)

{

delay(10);

if(key2==0)

相关文档
最新文档