简易秒表设计报告.docx
- 文档编号:12290323
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:13
- 大小:131.58KB
简易秒表设计报告.docx
《简易秒表设计报告.docx》由会员分享,可在线阅读,更多相关《简易秒表设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
简易秒表设计报告
简易秒表设计报告
一.前言
在电子科学技术高速发展的今天,高科技产品越来越多的应用在我们的日常生活中,给我们的生活带来了非常大的方便,每时每秒我们都能感受到产品的更新换代。
产品和技术革新的日新月异都让人非常惊讶。
像平常我们工作所用的电脑、手机和生活所用的电视机,收音机,Mp3等等,这些高科技产品给我们带来了极大的方便,但这要归功于科学技术的高速发展。
简易秒表是我们的单片机课程设计题目。
简易秒表涉及到《模拟电子技术》和《电路分析》中的相关知识。
本文介绍的简易秒表电路设计新颖具有电路结构简单、成本较低、操作方便、灵敏可靠等优点,经使用效果良好,具有较高的推广价值。
二.系统设计要求
⑴硬件设计:
根据任务要求,完成单片机最小系统及其扩展设计。
⑵软件设计:
根据硬件设计完成显示功能要求,完成控制软件的编写与调试;利用单片机定时器中断和定时器计数方式实现秒定时。
通过LED显示程序的调整,熟悉LED动态显示的控制过程。
⑶功能要求:
用PB1启动秒表和停止秒表,PB2键将秒表归零,按一下PB1,即开始定时,在数码管上每秒加1,加到99,归零,秒表在暂停状态下,按下PB3键可对秒数加1,按下PB4键可对秒数减1。
(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。
三.设计思路分析
本设计以单片机为核心设计的简易秒表方案是:
用按钮PB1启动秒表和停止秒表,开启后立刻进入计时状态,用定时器T0进行1s的计数,每隔1s就把预设时间加1,用一个两位的LED数码管显示时间,按钮PB2将秒表归零,如果第二次按一下S1键,计时会立即停止,在数码管上显示当前秒数,这时如果按下PB2键,数码管会显示00,直到再次按下PB1键计时才会开始,当秒数加到99后,下一秒数码管会归零,即从0开始重新每秒加1计时。
另外在P1口的0和1引脚各连接一个按钮,一个进行加1,另一个进行减1。
四.系统硬件电路设计
4.1简易秒表显示模块
显示模块主要是显示秒表当前秒数,我考虑有以下两种显示方案。
方案1:
使用传统的数码管显示。
数码管具有低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高低温,对外界环境要求低,易于维护,同时其精度高,称量快,精确可靠,操作简单。
数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。
根据以上的论述,采用方案二,如图:
4-1。
根据以上的论述,采用方案2,在本系统中采用了独立式键盘,其按键比较少,且键盘中各个按键的工作互不干扰。
五.简易秒表电路原理图设计
5.1系统总电路图
图:
5-1系统总电路图
5.2时钟电路设计
AT89C51的时钟可以由两种方式产生,一种是内部方式,利用芯片内部的振荡电路,另外一种为外部方式。
本设计根据实际需要和方便,采用内部振荡方式,如图5-2。
AT89C51内部有一个用于构成振荡器的高增益放大器,引脚ATAL1和XTAL2分别是此放大器的输入端和输出端,这个放大器与作为反馈元件的片内晶体或陶瓷谐振器一起构成一个自激振荡器。
AT89C51虽然有内部振荡电路,但要形成时钟,必须外接元件,所以实际构成的震荡时钟电路,外接晶体以及微调电容C1和C2构成并联谐振电路接在放大器的反馈电路中。
对接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性、起针的快速性和温度的稳定性。
晶体频率可在1.2MHz-12MHz之间任选,电容C1-C2的典型值在20pF-100Pf之间任选,考虑到本系统对于外接晶体的频率稳定性要求不高,所以采取比较廉价的12MHz陶瓷谐振器,根据调试电容选择30pF。
如图5-2时钟电路
5.3输入模块电路设计
秒表的输入信号由两个小按钮控制。
当有键按下的时候,就产生了有效地输入信号,本设计的PB1键与P3.2引脚连接,该按钮被按下时,就产生外部中断,程序跳转执行外部中断1,对秒表进行开始和暂停。
本设计的PB2键与P3.3引脚连接,该按钮被按下时,就产生外部中断,程序跳转执行外部中断0,对秒表进行清零。
5.4显示模块电路设计
该模块由1个共阳极的两位7段LED数码管构成,由P2口控制两位7段LED数码管的显示,用来显示当前秒表的秒数
六.简易秒表软件系统设计
6.1定时模块
设计中,一开始不运行定时器T0,只要按下PB1键,定时器T0立即运行,进行1s的计时。
这里我们采用的是定时器T0工作方式1,定时0.05s,在中断程序设置变量叠加的方法来得到一秒的基本定时,定时器T1工作方式2,也是在中断程序设置变量叠加的方法来得到定时8ms,每隔8ms两位7段LED数码管的两个公共端会交替通电,动态扫描当前简易秒表的秒数,即定时器定时一秒之后,单片机立即就会通过两位7段LED数码管显示出来。
当计时99s后,下一秒从0开始计时。
·
现把定时器T0,T1和外部中断0,1中断程序介绍如下:
voidT0_1s(void)interrupt1//定时器T0中断函数
{TH0=TH_M1;//给定时器T0装入初值
TL0=TL_M1;
if(++count_T0==20)//每0.05sT0中断一次,重叠20次得到1s,对计时加1
{count_T0=0;
seconds++;
if(seconds==100)
seconds=0;
}
disp[0]=TAB[seconds/10];//得到十位数
disp[1]=TAB[seconds%10];//得到个位数
}
voidT1_8ms(void)interrupt3//定时器T1中断函数
{if(++count_T1==32)//每0.25msT0中断一次,重叠32次得到8ms
{count_T1=0;
if(++scan==3)scan=1;
SEG=0xff;
P1_6=!
P1_6;
P1_7=!
P1_7;//对两位LED数码管进行交替显示
SEG=disp[scan-1];
}
}
voidint0_sw(void)interrupt0//外部中断0中断函数
{TR0=!
TR0;
while(PB0==0);
ys(10);
}
voidint1_RST(void)interrupt2//外部中断1中断函数
{while(PB1==0);
ys(10);
seconds=0;//对计数清零
disp[0]=disp[1]=0xc0;
TH0=TH_M1;//给定时器T0装入初值
TL0=TL_M1;
}
6.2主程序流程图
主程序流程图,如图6-1所示。
N
NY
NY
Y
图6-1抢答器主程序流程图
七.系统的调试
整个程序设计如下:
#include
#defineSEGP2
#definecount_M150000//宏定义
#defineTH_M1(65536-count_M1)/256
#defineTL_M1(65536-count_M1)%256
intcount_T0=0;
#definecount_M2250
#defineTH_M2(256-count_M2)
#defineTL_M2(256-count_M2)
Charcount_T1=0;
charcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,//定义字符型数组,装入0到9的数字
0x92,0x82,0xf8,0x80,0x90};
chardisp[2]={0xc0,0xc0};
charseconds=0;
charscan=0;
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
sbitPB0=P3^2;
sbitPB1=P3^3;
voidys(inti)
{//消除抖的动子函数定义
intj;
for(;i>0;i--)
for(j=0;j<200;j++);
}
main()
{
P1=0x7f;
IE=0x8f;//开启KA总中断开关,允许外部中断0、1和定时器0、1
TCON=0x00;//所有中断响应标志位清零
TMOD=0x21;//定时器T0工作方式1,T2工作方式2
TH0=TH_M1;TL0=TL_M1;//给定时器T0装入初值
TR0=0;//关闭定时器T0
TH1=TH_M2;//给定时器T1装入初值
TL1=TL_M2;
TR1=1;//关闭定时器T1
P3=0xff;//P3的八个引脚全为高电平
while
(1)//判断加1或减1语句
{
if((TR0==0)&(P1_1&P1_0))
{ys(10);
if((P1_1==0)&(seconds>0))seconds--;//对秒数减1
if(P1_0==0)seconds++;//对秒数加1
disp[0]=TAB[seconds/10];//显示加1或减1后的秒数
disp[1]=TAB[seconds%10];
while((P1_0&P1_1)==0);
}
}
}
voidT0_1s(void)interrupt1//定时器T0中断函数
{TH0=TH_M1;//给定时器T0装入初值
TL0=TL_M1;
if(++count_T0==20)//每0.05sT0中断一次,重叠20次得到1s,对计时加1
{count_T0=0;
seconds++;
if(seconds==100)
seconds=0;
}
disp[0]=TAB[seconds/10];//得到十位数
disp[1]=TAB[seconds%10];//得到个位数
}
voidT1_8ms(void)interrupt3//定时器T1中断函数
{if(++count_T1==32)//每0.25msT0中断一次,重叠32次得到8ms
{count_T1=0;
if(++scan==3)scan=1;
SEG=0xff;
P1_6=!
P1_6;
P1_7=!
P1_7;//对两位LED数码管进行交替显示
SEG=disp[scan-1];
}
}
当秒表走到6时,按下PB1键暂停时的状态,即第二次按下PB1键
voidint0_sw(void)interrupt0//外部中断0中断函数
{
TR0=!
TR0;
while(PB0==0);
ys(10);
}
voidint1_RST(void)interrupt2//外部中断1中断函数
{
while(PB1==0);
ys(10);
seconds=0;//对计数清零
disp[0]=disp[1]=0xc0;
TH0=TH_M1;//给定时器T0装入初值
TL0=TL_M1;
}
八.总结体会
经过近一个多星期的努力,在老师和同学们的帮助下,我较好的完成了设计任务。
通过此次课程设计,我重新认识到了自学的重要性,以及学以致用的道理。
我在图书馆查阅了大量的资料,同时也认识到了图书馆的重要作用。
通过此次的简易秒表的设计,更加巩固了所学的知识并在设计的过程中增长了C语言编程能力,克服了编程的枯燥感,给我的收获非常大。
在学习单片机这门课程的时候,我们应该好好你的记笔记,课下好好的做练习题才能把C程序设计灵活的运用到单片机程序的设计上。
在今后的学习过程中,我要多到图书馆看一些专业方面的书籍,以丰富自己的专业知识。
也使我加深了对单片机及接口技术的理解和应用。
由于自己对单片机的运用能力有限,C程序编写能力一般,设计中可能会有一些不足,我非常愿意接受老师的批评和指正。
九.参考文献
【1】、《单片机原理及应用技术》上官同英清华大学出版社
【2】、《单片机课程设计指导》实验指导书楼然苗李光飞北京航空航天大学出版社
【3】、《C程序设计》谭浩强清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 秒表 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)