简易秒表设计.docx
《简易秒表设计.docx》由会员分享,可在线阅读,更多相关《简易秒表设计.docx(10页珍藏版)》请在冰豆网上搜索。
简易秒表设计
简易秒表设计
一、任务设计:
1、设计任务
●设计并制作一个简易秒表。
2、设计要求
●设计能记录60秒的秒表;
●秒表功耗小于0.3mA/V。
3、发挥部分
●能记录60秒的时间;
●通过触碰工作或停止。
二、设计方案
显示部分是本次设计的重要部分。
方案完全用软件实现秒表工作。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时
分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。
该方案具有硬件电路简单的
特点,但当单片机不上电,程序将不执行。
而且由于每次执行程序时,定时器都要重新赋初值,所以该秒表精度不高。
4、显示部分
显示部分由两个数码管组成。
5、电源模块
●采用手机使用电池可以满足供电,不需经常更换,更环保。
●供能电源便宜。
三、总体方案
1、工作原理
本设计采用STC89C51RC单片机作为本系统的控制模块。
单片机可把控制两个LED数码管记时的数据由软件来处理,从而把数据传输到显实模板,实现记时的功能。
以两个LED数码管为显示模板,把单片机传来的数据显示出来,来进行60秒记时。
在显示电路中,主要靠按键来开始、调零、复位。
2、总体设计
设计总体框架图如图1
四、系统硬件部分
1.STC89C52RC单片机最小系统
最小系统包括晶体振荡电路、复位开关和电源部分。
图2为STC89C51RC单片机的最小系统。
图2最小系统电路图
2、存储器模块
存储器采用Atmel公司的STC89C52RC芯片。
该芯片内部含有256个8位字节,可通过I2C总线对其接口进行读写操作,而且带有写保护功能。
其接线图如图3所示。
图3T24C02存储器电路
5、数码管显示模块
采用两个数码管进行记时工作,具有很低的功耗,正常工作时电流仅2.0mA/5.0V。
通过编程实现自动关闭屏幕能够更有效的降低功耗。
两个数码管分别记数:
当右边的数字到9后,自动复位;同时左边由1开始。
当左边是5,右边是9时,下一次记时,就全归零。
如图所示:
五、系统软件流程
1、主程序流程如图所示
2.时间设定程序流程如图所示
六、简易秒表的使用说明
1)启动。
在检查输入程序无误后,接通电源,发现现象如同实物工作情况一样:
右边的数码管的数据有1开始一直到9后,下一次记时,左边的数码管的数据显示1,右边清零。
左边由0到5,右边0到9,当左边为5,右边为9,那么下一次记时,就复位。
2)清零。
右边到9后自动回到0;
3)复位。
当左边的数据是5,右边的数据是9,下一次记时,两个数码管的数据都为0.
七、测量及结果分析
1、基本部分测试与分析
(1)测试仪器:
最小系统。
(2)基本要求部分的测试与分析:
●系统通电后,两个数码管都显示0,实物无误。
●显示数据后(设定为60秒),与其他标准的秒表进行比对,发现误差不大,实物完成的很令人满意。
亮度方面有些欠缺,不过总体是令人满意的。
2.发挥部分测试与分析
1)制作的简易秒表可以测59秒的记时,比较精确。
2)环保节能,而且简单方便。
不需要经常更换电池。
3)启动秒表,数据总是:
右边由0到9到0,左边由0到5到0。
八、设计心得体会
经过小组两个星期的努力,终于完成了这次设计任务,设计出了方便实用的简易秒表。
秒表简单实用,但凝聚了小组成员的汗水,最后的成果令人满意,也让我们很开心。
经过这次的实践,也可以说是经过了两个星期的实践,尽管期间有麻烦,但我还是从中学习了秒表的安装和改善方法,也体验到了自己动手的快乐。
参考资料
[1]《单片机原理与接口技术》.牛昱光主编,电子工业出版社.
[2]《单片机技术基础教程与实践》.夏路易编著,电子工业出版社.
[3]《51单片机C语言教程》入门、提高、开发、拓展全攻略.郭天祥著,电子工业出版社.
附录一整体电路
附录二:
程序
/****************************
*****秒表程序*****
**********
*****按键1:
清零*****
*****按键2:
暂停*****
*****按键1:
启动*****
*****led:
秒表运行指示*****
****************************/
#include
unsignedcharmsec,sec;//定义msec为50ms计数变量,sec为秒变量
voiddelay(unsignedchari);//延时函数
voidT0_INT(void)interrupt1//定时器0中断类型为1
{
TH0=0x3c;//50ms定时初值
TL0=0xb0;
msec++;//中断次数增1
if(msec==20)//中断次数到20次了吗
{
msec=0;//是,1s计时到,50ms计数变量清零
sec++;//秒变量加1
if(sec==90)//到90s吗
{
sec=0;//是,秒变量清零
}
}
}
voidmain()//主函数
{
unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0―9
unsignedchartemp;
TMOD=0x01;//定时器0工作方式1
TH0=0x3c;//50ms定时初值
TL0=0xb0;
EA=1;//开总中断
ET0=1;//开定时器0中断
P3=0xff;//P3口做输入
while
(1)
{
temp=~P3;//读入P3口引脚状态并取反
temp=temp&0x2c;//屏蔽掉无关位
if(temp==0x04)//按下停止键
TR0=0;//停止计数
if(temp==0x08)//按下启动键
TR0=1;//开始计数
if(temp==0x20)//按下复位键
{
TR0=0;
sec=0;
msec=0;
}
P2=0x01;//选中P2.0控制的数码管
P1=led[sec%10];//显示秒个位
delay(5);//延时5ms
P2=0x02;//选中P2.1控制的数码管
P1=led[sec/10];//显示秒十位
delay(5);//延时5ms
}
}
voiddelay(unsignedchari)
{
unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}