存储多组数据的秒表.docx
《存储多组数据的秒表.docx》由会员分享,可在线阅读,更多相关《存储多组数据的秒表.docx(17页珍藏版)》请在冰豆网上搜索。
![存储多组数据的秒表.docx](https://file1.bdocx.com/fileroot1/2023-2/1/9fb745f9-6910-457a-b56f-c83172c641ec/9fb745f9-6910-457a-b56f-c83172c641ec1.gif)
存储多组数据的秒表
课程设计说明书
(2012/2013学年第二学期)
课程名称:
单片机应用
题目:
存储多组数据的秒表
专业班级:
电气10-2
学生姓名:
焦奇
学号:
100062226
指导教师:
苗敬利等
设计周数:
2周
设计成绩:
2013年7月11日
目录
一、课程设计目的、任务1
1.1课设设计目的1
1.2设计任务1
二、各单元硬件设计及计算方法1
2.1设计所需材料1
2.2硬件部分2
三、程序流程图与原理图5
四、软件设计6
五、心得体会13
六、参考文献14
一、课程设计目的、任务
1.1课设设计目的
1.1掌握单片机的定时器、按键和显示电路的设计,从而学会制作可存储多组数据的秒表。
1.2通过秒表的制作进一步了解各种在制作中用到的中小规模集成电路的作用及使用方法。
1.3学习与掌握单片机软硬件的基本设计思路、方法。
1.2设计任务
(1)用5位数码管进行秒数时间显示,分别是分2位,秒2位,1/10秒1位;
(2)有5个按键,分别是开始、记录、停止、清零、回显。
(3)开始上电时显示00:
00:
0,按下“开始”键开始定时;每按下一次“记录”键将当前时间记录、存储;按下“停止”键定时结束,同时显示数据保持不变;按下“清零”键显示数据为00:
00:
0;每按下一次“回显”键将所存储的数据依次显示。
二、各单元硬件设计及计算方法
2.1设计所需材料
名称
数量(单位:
个)
共阳数码管
5
9013
5
按键
5
LED
5
10uF电容
1
22pF电容
2
4.7K电阻
7
10K电阻
6
1.5K电阻
1
晶振
1
单片机
1
2.2硬件部分
2.2.1STC90C52RC的功能参数介绍图1如下:
STC90C52RC是由宏晶公司生产的高性能八位单片机。
如图1所示。
该芯片采用FLASH存储技术,内部具有8KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机。
STC90C52RC可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。
只要程序长度小于8K,四个I/O口全部提供给用户。
可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之
一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。
工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。
STC90C52RC芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。
STC90C52RC单片机为40引脚芯片如图一所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。
P0口:
可作为通用I/O口,但须外接上拉电阻,所以在设计显示数码管我们避免了使用P0口这样大大简化了动态显示电路。
P1口:
8位、双向I/0口,内部含有上拉电阻。
P1口可作普通I/O口。
输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。
P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。
在FLASH并行编程和校验时,P1口可输入低字节地址。
在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。
P2口:
具有内部上拉电阻的8位双向I/O口。
P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。
若负载为低电平,则通过内部上拉电阻向外部输出电流。
在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:
具有内部上拉电阻的8位双向口。
P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。
若外部的负载是低电平,则通过内部上拉电阻向输出电流。
在本设计中,P3口作为时间设置的4按键输入,因为有上拉电阻,所以可以通过按键直接接地,简化了电路。
在与FLASH并行编程和校验时,P3口可输入某些控制信号。
P3口除了通用I/O口功能外,还有替代功能如表1所示。
表1P3口的第二功能
端口引脚
各个功能
P3.0
RXD(串行口输入端)
P3.1
TXD(串行口输出端)
P3.2
INT0(外部中断0请求输入端,低电平有效)
P3.3
INT1(外部中断1请求输入端,低电平有效)
P3.4
T0(定时/计数器0计数脉冲输入端)
P3.5
T1(定时/计数器1计数脉冲输入端)
P3.6
WR(外部数据存储器写选通信号输出端,低电平有效)
P3.7
RD(外部数据存储器读选通信号输出端,低电平有效)
8个引脚每个均可吸收TTL的灌电流。
作为输入时,首先应将引脚置1。
P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。
在该模式下,P0口含有内部上拉电阻。
在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。
单片机使用宏晶公司支持串口下载程序(ISP)的单片机,为STC90C52RC课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图见下图。
该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。
课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。
2.2.2时钟电路与复位电路的设计
时钟电路是计算机最核心的部分,它控制着计算机的工作。
STC90C52RC单片机允许的时钟频率典型值为6MHZ。
STC90C52RC单片机内部有一个高增益反相放大器,用于构成振荡器。
反相放大器的输入端为XTAL1,输出端为XTAL2,分别是STC90C52RC的19脚和18脚。
在XTAL1和XTAL2两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
石英晶振起振后要能在XTAL2线输出一个3V左右的正弦波,使STC90C52RC片内的OCS电路按石英晶振相同的频率自激振荡。
通常,OCS的输出时钟频率fosc为0.5MHZ-16MHZ,典型值为6MHZ,电容器C1和C2通常取30pF左右,对振荡频率有微调作用。
调节它们可以达到微调振荡周期fosc的目的。
单片机的RST管脚为主机提供一个外部复位信号输入端口。
复位信号是高电平有效,高电平有效的持续时间应为2个机器周期以上。
单片机的复位方式有上电自动复位和手工复位两种。
图2-2所示是52系列单片机常用的上电复位电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。
复位后,单片机内各部件恢复到初始状态。
RET按键可以选择专门的复位按键,也可以选择轻触开关。
三、程序流程图与原理图
四、软件设计
#include
#include
codeunsignedcharnum[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};//段选
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbits0=P2^3;//位选
sbits1=P2^4;//位选
sbits2=P2^5;//位选
sbits3=P2^6;//位选
sbits4=P2^7;//位选
voidinit();//初始化
voiddelay();//延迟程序
voiddisplay();//显示程序
voidkey_1();//按键程序,开始,停止,清零
voidkey_2();//记录
voidkey_3();//回显
staticunsignedcharMs0[10],Ms1[10],Sec0[10],
Sec1[10],Min0[10],Min1[10];//记录,最大记录限制10组
staticintkey_n,j,x;
unsignedcharms0=0,ms1=0,sec0=0,sec1=0,min0=0,min1=0;
voidmain()
{
init();
while
(1)
{
key_1();
key_2();
key_3();
display();
}
}
voiddelay()
{
unsignedinti;
for(i=0;i<600;i++);
}
voidkey_1()
{
if(!
key1)
{
delay();
if(!
key1)
{
while(!
key1)
{;}
TR0=1;
}
}
if(!
key2)
{
delay();
if(!
key2)
{
TR0=0;
while(!
key2);
}
}
if(!
key3)
{
delay();
if(!
key3)
{
ms0=ms1=0;
sec0=sec1=0;
min0=min1=0;
for(j=0;j<10;j++)
{
Min0[j]=0;Min1[j]=0;
Sec0[j]=0;Sec1[j]=0;
Ms0[j]=0;Ms1[j]=0;
}
j=0;x=0;
}
}
}
voidkey_2()
{
if(!
key4)
{
delay();
if(!
key4)
{
while(!
key4)
{;}
if(j==10)
TR0=0;
Min0[j]=min0;Min1[j]=min1;
Sec0[j]=sec0;Sec1[j]=sec1;
Ms0[j]=ms0;Ms1[j]=ms1;
j++;
}
}
}
voidkey_3()
{
if(!
key5)
{
delay();
if(!
key5)
{
while(!
key5)
{;}
if(x==j)
x=0;
else
x+=1;
min0=Min0[x];sec0=Sec0[x];ms0=Ms0[x];
min1=Min1[x];sec1=Sec1[x];ms1=Ms1[x];
x++;
}
}
}
voiddisplay()
{
s0=1;
s1=0;
s2=0;
s3=0;
s4=0;
P0=num[ms1];delay();
s0=0;
s1=1;
s2=0;
s3=0;
s4=0;
P0=num[sec0];delay();
s0=0;
s1=0;
s2=1;
s3=0;
s4=0;
P0=num[sec1];delay();
s0=0;
s1=0;
s2=0;
s3=1;
s4=0;
P0=num[min0];delay();
s0=0;
s1=0;
s2=0;
s3=0;
s4=1;
P0=num[min1];delay();
}
voidinit()
{
ms0=ms1=sec0=sec1=min0=min1=0;
key_n=0;j=0;x=0;
P2=0xff;
P1=0xff;
TMOD=0x01;
TH0=0xd8;
TL0=0xef;
EA=1;
ET0=1;
TR0=0;
}
voidtiem0(void)interrupt1using1
{
TH0=0xd8;
TL0=0xef;
TR0=1;
ms0++;
if(ms0==10)
{
ms0=0;
ms1++;
if(ms1==10)
{
ms1=0;
sec0++;
if(sec0==10)
{
sec0=0;
sec1++;
if(sec1==6)
{
sec1=0;min0++;
if(min0==10)
{
min0=0;
min1++;
if(min1==6)min1=0;
}
}
}
}
}
}
五、心得体会
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
六、参考文献
[1]张毅刚.单片机原理及应用.北京:
高等教育出版社.2010.5(4)
[2]彭为,黄科,雷道仲.单片机典型系统设计实例精讲.北京:
电子工业出版社.2006.5(3,4)248~268
[3]刘刚,秦永左.单片机原理及应用.北京:
中国林业出版社,2006.9
[4]李建忠.单片机原理及应用.西安:
西安电子科技大学出版社,2002
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日