三位数字显示计时定时器设计.docx

上传人:b****1 文档编号:10503856 上传时间:2023-05-26 格式:DOCX 页数:17 大小:258.33KB
下载 相关 举报
三位数字显示计时定时器设计.docx_第1页
第1页 / 共17页
三位数字显示计时定时器设计.docx_第2页
第2页 / 共17页
三位数字显示计时定时器设计.docx_第3页
第3页 / 共17页
三位数字显示计时定时器设计.docx_第4页
第4页 / 共17页
三位数字显示计时定时器设计.docx_第5页
第5页 / 共17页
三位数字显示计时定时器设计.docx_第6页
第6页 / 共17页
三位数字显示计时定时器设计.docx_第7页
第7页 / 共17页
三位数字显示计时定时器设计.docx_第8页
第8页 / 共17页
三位数字显示计时定时器设计.docx_第9页
第9页 / 共17页
三位数字显示计时定时器设计.docx_第10页
第10页 / 共17页
三位数字显示计时定时器设计.docx_第11页
第11页 / 共17页
三位数字显示计时定时器设计.docx_第12页
第12页 / 共17页
三位数字显示计时定时器设计.docx_第13页
第13页 / 共17页
三位数字显示计时定时器设计.docx_第14页
第14页 / 共17页
三位数字显示计时定时器设计.docx_第15页
第15页 / 共17页
三位数字显示计时定时器设计.docx_第16页
第16页 / 共17页
三位数字显示计时定时器设计.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

三位数字显示计时定时器设计.docx

《三位数字显示计时定时器设计.docx》由会员分享,可在线阅读,更多相关《三位数字显示计时定时器设计.docx(17页珍藏版)》请在冰点文库上搜索。

三位数字显示计时定时器设计.docx

三位数字显示计时定时器设计

上海工程技术大学

 

课程设计报告

 

课程设计名称:

三位数字显示计时定时器设计

专业班级:

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++;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2