三位数字显示计时定时器设计.docx
- 文档编号:10503856
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:17
- 大小:258.33KB
三位数字显示计时定时器设计.docx
《三位数字显示计时定时器设计.docx》由会员分享,可在线阅读,更多相关《三位数字显示计时定时器设计.docx(17页珍藏版)》请在冰点文库上搜索。
三位数字显示计时定时器设计
上海工程技术大学
课程设计报告
课程设计名称:
三位数字显示计时定时器设计
专业班级:
0212112
**********************************************
学号:
*********
同组人员:
***************************************
课程设计时间:
2周
三位数字显示计时定时器设计
1设计任务、要求以及文献综述
3位数字显示计时定时器是一个典型的利用数字系统的例子。
所谓数字系统,是指由若干数字电路及逻辑部件组成并且能够进行采集、加工、处理及传送数字信号的设备。
一个完整的数字系统通常由输入电路、输出电路、控制电路、若干个子系统和时基电路等部分组成。
设计要求如下:
1、计时功能。
能任意启停,保持计时结果;
2、开机自动复位;
3、最大计时显示为9分59秒;
4、定时报警。
2原理叙述和设计方案
2.1设计方案选择和论证
方案一:
设计的3位数字显示计时定时器则分别有4个子系统组成:
秒脉冲时间标准产生电路、计数器、译码器和显示器、开机自动清零电路、计时启停控制电路
方案二:
实现一个三位数字显示的秒表系统,单片机,lcd1602显示屏,矩阵键盘等组成部分。
秒计数电路满60向分计数电路进位(显示00~59s),分计数电路满足10(显示0~9)后停止并且灯亮,等待重新复位计时。
论证:
方案二比方案一好。
理由一:
方案二显示的最终结果比较直观。
理由二:
方案二可更改性好,方便日后的改进。
2.2电路的功能框图及其说明
根据原理正确、易于实现、且实验室有条件实现的原则确定设计方案,画出总体设计功能框图,如图2.1所示。
图2.1三位数字显示计时定时器功能框图
单片机:
对LCD1602的显示控制,还能实现计时启停的控制。
LCD1602:
将结果以直观的形式表现出来。
2.3功能块及单元电路的设计、计算与说明
4×4矩阵键盘
当键盘中按键数量较多时,为了减少对I/O口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。
矩阵式键盘由行线和列线组成,按键位于行、列的交叉点上。
当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU通过检测行或列线上的电平变化可以确定哪个按键被按下。
如图2.2所示。
图2.24×4矩阵键盘
显示程序
本系统使用LCD1602实现显示,只要参照LCD1602的使用手册进行初始化和程序编写就可以显示,即在程序编写中添加LCD1602的驱动程序。
这里的驱动程序主要包括:
初始化函数、设置显示坐标、写字符函数及写字符串函数。
用LCD1602实现对时间的显示。
LCD1602的部分读写控制时序程序如图2.3所示:
图2.3LCD1602显示屏
2.4总体电路原理图
图2.4三位数字显示计时定时器电路原理图
如图2.4所示,通过对单片机编程,对LCD1602显示屏先初始化,然后开始进行走数。
矩阵键盘就用右边的三个按键,分别实现启停,对数字加,对数字减的功能。
当时间到达9分59时,灯亮并且计时停止。
3电路的仿真与调试
3.1电路仿真
利用电子线路仿真软件Protues,将所设计的电路原理图在Protues界面下创建并用其仪器库中的模拟仪表进行仿真测试。
若发现问题,立即修改参数,重新调试直至得到满意的设计。
如图3.1
图3.1三位数字显示计时定时器仿真结果
3.2调试中出现的问题及解决方法
将编好的程序导入到单片机,调试时有时候发现,显示的时间走的太快,这个时候对程序进行修改便可。
有时候会发现找不到我需要的元器件,这个时候就要上网查找相似的元器件进行代替。
4制作与调试
4.1元件清单、实物照片
元件清单:
图4.1三位数字显示计时定时器元件清单
实物:
图4.2三位数字显示计时定时器实物
4.2制作与调试过程中遇到的问题及解决办法
焊接元件时期:
一:
焊接是没有严格按照仿真图焊接,导致运行结果出不来,后来去实验室把实物板的焊接改回来。
二:
焊接单片机时候,因为管脚难插进板子,用力太猛,导致某些管脚不能用。
解决方法是换其他好的管脚继续焊接。
三:
焊接震荡电路时候,忘记接地了,后来修改回来了。
编程时期:
一:
思路卡住时候,多想想,慢慢就有思路了。
二:
编程时候要注意逻辑思路和代码安放位置,我之前思路搞错了,导致遇到瓶颈,画了很多时间和请教别人,最终在仿真的时候才得到要的结果。
5心得体会
经过一段时间的努力,该项设计也快接近尾声了,但遗憾的是我的实物虽然做出来了,但是经过多次调试还是没有出现预期的结果。
在设计实物时,不但要你有紧密的逻辑思维能力,还要细心、有耐心。
元件多,布线多,钻的孔自然也多。
一不留神把焊盘打没了,就会给焊接带来很大的难度。
而且孔很多,一定要慢慢焊接,工程量确实很大。
在调试过程中,一定要细心、耐心,一点小小的断线都会导致整个电路无法工作。
可以说,调试时本次设计的难点。
但是遗憾的是,经过多次的调试,我的设计却不能出现预期的结果,让我有点头痛。
于是,我开始从硬件焊接上找找自己的原因,向老师询问后,从输出到输入一级一级开始找自己的焊接错误,在比对仿真图的时候从中也发现了一些错误,但在焊接正确后还是不能出现结果。
然后,我就开始在我的程序里面找一下可能的错误,最后由于能力有限和时间问题,还是没能找到错误,有点失败。
在次课程设计中,不仅培养了我们综合应用所学知识解决实际问题的能力,也提高了我的动手能力,让我学会了独立思考问题,并通过各种途径来解决问题。
此次课程设计不单是一个实验设计,也是善于思考的最佳机会。
在这个过程中,我懂得了很多专业知识,也学到了很多运用技巧。
更大的一点是:
激起了我对实验设计这方面的兴趣。
虽然在此过程中遇到很多挫折及困难,也很有多情绪问题。
比如说,气馁,灰心等情绪。
但是由于水平有限,我的课程设计还没有完善,存在一些错误,我还想在后期改进该设计功能,让其实现原有功能基础之上,还要实现动态显示数码管。
但我却连基本的计时功能还没实现,有点遗憾。
6参考文献
[1]陈晰.数字电路试验技术基础.北京:
电子工业出版社,1999
[2]李元.数字电路与逻辑设计.南京:
南京大学出版社,1997
[3]郝波.数字电子技术,西安:
西安电子科技大学出版社,2004
[4]郭斌.数字逻辑电路.北京:
电子科技大学出版社,1995
[5]程震先.数字电路实验与应用.北京:
北京理工大学出版社,1999
[6]曹琳琳.[C]单片机原理及接口技术.国防科技大学出版社,200
附录
三位数字显示计时定时器设计源程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P0^5;
sbitrw=P0^6;
sbite=P0^7;
sbitled=P0^1;
sbitkeyg=P2^0;
sbitkey1=P2^7;
sbitkey2=P2^6;
sbitkey3=P2^5;
uintnum,count,ge,shi,a,flag,flag1;
intfen,miao;
ucharcodetable[]="dingshiqi";
ucharcodetable1[]="00:
00";
/***延时函数***/
voiddelay(ucharz)
{
ucharx,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
/***写指令***/
voidwrite_zl(ucharzl)
{
rw=0;
rs=0;
e=0;
P1=zl;
delay(5);
e=1;
delay(5);
e=0;
}
/***写数据***/
voidwrite_sj(ucharsj)
{
rw=0;
rs=1;
e=0;
P1=sj;
delay(5);
e=1;
delay(5);
e=0;
}
/***分秒动态显示***/
voidwrite_sm(ucharadd,uchardate)
{
shi=date/10;
ge=date%10;
write_zl(0x80+0x40+add);
write_sj(0x30+shi);
write_sj(0x30+ge);
}
/***初始化***/
voidinit()
{
led=0;
write_zl(0x38);
write_zl(0x0c);
write_zl(0x06);
write_zl(0x01);
write_zl(0x80);
for(num=0;num<11;num++)
{
write_sj(table[num]);
delay
(2);
}
write_zl(0x80+0x40);
for(num=0;num<9;num++)
{
write_sj(table1[num]);
delay
(2);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/***键盘扫描***/
voidkeyscan()
{
keyg=0;
/****************第一按键**************************/
if(key1==0)
{
delay(5);
if(key1==0)/**消抖**/
{
a++;/**a表示按第一个键盘的次数**/
while(!
key1);
delay
(2);
while(!
key1);/**判断是否松手**/
if(a==1)/**秒处暂停,光标在秒处闪烁**/
{
TR0=0;/**定时器关**/
write_zl(0x0f);
write_zl(0x80+0x40+8);
}
if(a==2)/**秒处暂停,光标在分处闪烁**/
{
write_zl(0x80+0x40+5);
}
if(a==3)/**秒处走动,光标隐藏**/
{
a=0;
TR0=1;
write_zl(0x0c);
}
}
}
/****************第二按键**************************/
if(a!
=0)
{
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!
key2);
delay
(2);
while(!
key2);
if(a==1)/***按一下,秒处数字加1***/
{
miao++;
if(miao==60)
{
miao=0;
}
write_sm(7,miao);
write_zl(0x80+0x40+8);
}
if(a==2)/***按一下,分处数字加1***/
{
fen++;
if(fen==10)
{
fen=0;
}
write_sm(4,fen);
write_zl(0x80+0x40+5);
}
}
}
}
/****************第三按键**************************/
if(a!
=0)
{
if(key3==0)
{
delay(5);
if(key3==0)
{
while(!
key3);
delay
(2);
while(!
key3);
if(a==1)/***按一下,秒处数字减1***/
{
miao--;
if(miao==-1)
{
miao=59;
}
write_sm(7,miao);
write_zl(0x80+0x40+8);
}
if(a==2)/***按一下,分处数字减1***/
{
fen--;
if(fen==-1)
{
fen=9;
}
write_sm(4,fen);
write_zl(0x80+0x40+5);
}
}
}
}
}
/***主函数***/
voidmain()
{
init();
while
(1)
{
if(count==20)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==10)
{
fen=0;
}
write_sm(4,fen);
}
write_sm(7,miao);
}
if(fen==9&&miao==59)
{
TR0=0;
led=1;
}
keyscan();
}
}
/***定时器***/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三位 数字 显示 计时 定时器 设计