倒计时秒表.docx

上传人:b****8 文档编号:9727625 上传时间:2023-02-06 格式:DOCX 页数:23 大小:102.57KB
下载 相关 举报
倒计时秒表.docx_第1页
第1页 / 共23页
倒计时秒表.docx_第2页
第2页 / 共23页
倒计时秒表.docx_第3页
第3页 / 共23页
倒计时秒表.docx_第4页
第4页 / 共23页
倒计时秒表.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

倒计时秒表.docx

《倒计时秒表.docx》由会员分享,可在线阅读,更多相关《倒计时秒表.docx(23页珍藏版)》请在冰豆网上搜索。

倒计时秒表.docx

倒计时秒表

 

单片机课程设计

 

题目:

倒计时秒表

 

系别:

电气与电子工程系

专业:

电气工程及其自动化

姓名:

学号:

指导教师:

 

河南城建学院

2011年12月30日

成绩评定·

一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。

二、成绩评定

成绩等级:

 

指导教师签字:

年月日

目录

一、设计目的4

二、设计要求4

三、电路的总体结构设计4

1.方案讨论和设计和主要任务4

2.硬件电路设计5

3.软件程序设计5

1)程序流程图5

2)源程序7

四、各部分电路设计18

1.单片机简介18

2.动态LCD液晶显示器显示19

五、整体电路图20

六、设计总结20

1.设计过程中遇到的问题及解决方法20

2.设计体会21

3.对设计的建议21

七、参考文献21

 

一、设计目的

1.熟悉整个项目的流程即单片机系统设计过程

2.学会使用各种仿真软件

3.熟练的使用汇编语言编写小的应用程序

4.掌握系统的调试与安装

5.提高学生的自学能力和动手能力

二、设计要求

1.可以实现正常秒表的所有功能,包括启动,暂停,复位等

2.可以自由设定倒计时时间(10s,20s,30s....),并进行倒计时

3.显示方式自选

4.任选一款51单片机

5.扩展功能:

在秒表基础上增加时钟功能;倒计时完成时加入报警单元,如声音,灯光等。

三、电路的总体结构设计

1.方案讨论和设计和主要任务

1)方案讨论和设计:

倒计时数字秒表的设计主要考虑以下几个问题:

一,液晶显示器如何显示数字0—9及文字;二,如何用单片机来控制液晶显示器的显示;三,单片机最小模式下的设计。

处理好这些问题此设计才能完整,为此必须先了解液晶显示器的显示原理和接线方法,再了解单片机的组成原理和控制方法。

硬件电路的绘制和软件程序的编写是此次设计的关键和基础,只有硬件电路的设计是正确的、合理的,软件设计才可以根据硬件电路编程,以下的设计才能够进行。

2)主要任务:

软件的调试和烧录

2.硬件电路设计

 为了在硬件上节省东西,我们选择了让单片机的P2.4接上限流电阻接通数码管来显示十位数字,P2.5接上限流电阻接通数码管来显示个位数字;通过软件编程来控制单片机的P2.0-P2.3来控制数码管显示的数字;最小系统的设计是指给单片机供上+5V的电源电路、12M的晶振电路、上电复位电路等等。

本设计中这些都得以体现并且经过计算得知图中的各种数据的,例如有单片机的复位必须要两个机器周期才能实现复位的理解,可以大致的按公式RC>2t来计算电阻R、电容C,其中t为一个机器周期,在本设计中t=1us。

图3-1硬件电路原理图

 

3.软件程序设计

1)程序流程图

      Y

N

Y

                  N

       N                

                  Y

 

2)源程序

程序是按照上图所示的流程图编写的,A的进栈保存和出栈恢复是很重要的,没有它的存在就不会有倒计时倒计的功能的实现。

#include

#include

#defineucharunsignedchar

sbitrs=P3^0;

sbitrw=P3^1;

sbiten=P3^2;

sbittiao=P1^0;

sbitkaishi=P1^1;

sbitfanhui=P1^2;

sbitfm=P1^3;

sbitzanting=P3^4;

ucharnum,miao,jishu;

uchartmiao,zz=0;

//********************延时程序**************************

voidDelay1ms(ucharcount)

{

uchari,j;

for(i=0;i

for(j=0;j<120;j++);

}

//*********************写液晶命令程序****************

voidwrite_com(ucharcom)

{

rs=0;

rw=0;

en=0;

Delay1ms

(2);

P2=com;

Delay1ms(4);

en=1;

Delay1ms(4);

en=0;

}

//*********************写液晶数据程序*********************

voidwrite_data(uchardt)//bunengyongdata

{

rs=1;

rw=0;

en=0;

Delay1ms

(2);

P2=dt;

Delay1ms(4);

en=1;

Delay1ms(4);

en=0;

}

//**********************液晶初始化程序***********************

voidinitial_lcd()//henyongyiwangjigaibufen

{

Delay1ms(20);

write_com(0x38);//16*2xianshi,5*7xianshi,8weishijujiekou

Delay1ms(5);

write_com(0x0c);//kaixianshi,buxianshiguangbiao

Delay1ms(5);

write_com(0x06);//xueyigezifuhouacjia1

Delay1ms(5);

write_com(0x01);

}

//***********************定时器0定时1S****时钟程序************************

voidtime0(void)interrupt1using0

{

TH0=0x3c;

TL0=0xb0;

jishu++;

if(jishu==20)

{

jishu=0;

miao++;

}

}

//***********************定时器1蜂鸣器************************

voidtime1(void)interrupt3using0

{

TH1=0xff;

TL1=0x44;

fm=~fm;

}

//**********************拆分显示显示程序*************

voidchaixian(ucharxmiao)

{

ucharxmiao1,xmiao2,xmiao3;

xmiao1=xmiao/100;

xmiao2=xmiao%100/10;

xmiao3=xmiao%10;

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

if(xmiao==100)

{

write_data(0x30+xmiao1);

write_data(0x30+xmiao2);

write_data(0x30+xmiao3);

}

if(xmiao<100)

{

write_com(0x80+0x0c);

write_data(0x00);

write_com(0x80+0x0a);

write_data(0x30+xmiao2);

write_data(0x30+xmiao3);

}

}

//******************************定时程序

voiddingshi(uchari)

{

write_com(0x01);

TR0=1;

while(miao-1!

=i)

{

tmiao=i-miao;

chaixian(tmiao);

if(zz==1)

{

break;

}

if(fanhui==0)

{

miao=0;

jishu=0;

write_com(0x01);

write_com(0x80+0x02);

write_data('T');

write_data('i');

write_data('a');

write_data('o');

write_data(0x00);

write_data('M');

write_data('o');

write_data(0x00);

write_data('S');

write_data('h');

write_data('i');

break;

}

}

if(zz==0&&(miao-1)==i)

{

TR1=1;

write_com(0x01);

write_com(0x80+0x04);

write_data('T');

write_data('i');

write_data('m');

write_data('e');

write_com(0x80+0x09);

write_data('E');

write_data('n');

write_data('d');

while(fanhui==1)

{

}

TR1=0;

miao=0;

jishu=0;

write_com(0x01);

write_com(0x80+0x02);

write_data('T');

write_data('i');

write_data('a');

write_data('o');

write_data(0x00);

write_data('M');

write_data('o');

write_data(0x00);

write_data('S');

write_data('h');

write_data('i');

}

TR0=0;

}

//******************************键盘扫描程序***************************

voidkeyscan()

{

ucharnum1;

if(tiao==0)

{

Delay1ms(10);

if(tiao==0)

{

num++;

if(num==6)

{

num=0;

}

if(num==1)

{

write_com(0x01);

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

write_data(0x30+1);

write_data(0x30+0);

}

if(num==2)

{

write_com(0x01);

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

write_data(0x30+2);

write_data(0x30+0);

}

if(num==3)

{

write_com(0x01);

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

write_data(0x30+3);

write_data(0x30+0);

}

if(num==4)

{

write_com(0x01);

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

write_data(0x30+5);

write_data(0x30+0);

}

if(num==5)

{

write_com(0x01);

write_com(0x80+0x04);

write_data('n');

write_data('u');

write_data('m');

write_data(0x30+num);

write_com(0x80+0x0a);

write_data(0x30+1);

write_data(0x30+0);

write_data(0x30+0);

}

while(tiao==0)

{

}

}

}

if(kaishi==0)

{

Delay1ms(10);

if(kaishi==0)

{

while(kaishi==0)

{

}

switch(num)

{

case1:

num1=10;break;

case2:

num1=20;break;

case3:

num1=30;break;

case4:

num1=50;break;

case5:

num1=100;break;

}

if(zz==0)

{

ucharmiao=0;

TR0=1;

dingshi(num1);

}

if(zz==1)

{

zz=0;

TR0=1;

dingshi(num1);

}

}

}

}

//*****************************暂停键*****************************

voidint1(void)interrupt2using0

{

zz=1;

TR0=0;

while(zanting==0)

{

}

}

//**************************主程序********************************

voidmain()

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=0xff;

TL1=0x44;

IE=0x8e;

initial_lcd();

while

(1)

{keyscan();

}

}

 

四、各部分电路设计

1.单片机简介

单片机是把中央处理器(CPU),存储器和输入输出接口电路等主要微型机部件集成在一块芯片上,因此称为单片机,主要用于测控领域。

自从1976年Intel公司推出第一代8位的MCS—48系列单片机,它以体积小、控制功能全、价格低等优点为单片机的发展打下了坚实的基础。

随后单片机发生了深刻的变革,目前市面上最常用的51系列单片机也是8位的,因为其品种全、兼容性强、软硬件资料丰富的特点,因此历经几十年仍然是最常用的单片机系列。

随着技术的进步和发展,16位单片机32位单片机相继产生,其性能也有了长足的提高,但是其基本组成仍然没有改变。

设计中应用到的STC89C52是Atmel公司生产的51系列单片机中的一个典型代表。

图4-1STC89C52引脚图

从图中可以看到STC89C52有P0、P1、P2、P3四个输出输入口,其中P3.2口接开关用来控制数码管显示的起停,当开关闭合时P3.2为低电平可以控制数码管的显示,当P3.2为高电平时可以关闭数码管或显示实时时间。

其中+5V的高电平有电源电路提供,晶振电路是接到18、19管脚上用来给单片机提供12M赫兹的脉冲,复位电路接成上电复位电路的形式。

2.动态LCD液晶显示器显示

液晶是人机交互最重要的通道,液晶不光要显示文字信息,还要显示波形信息,所以,编写一套完善的函数库是必不可少的,其中应该包括显示ASCII码、字符串、整型数字、浮点数、汉字、画点、画线等一系列函数。

       上层函数的建立离不开底层的驱动,最底层驱动应该是建立在液晶基本时序与指令的基础上。

如图4-21,是液晶模块的基本时序图。

 

                                      图4-21DMF5001液晶模块基本时序图

       根据时序图和控制指令,不难写出基本的读写函数。

这些函数就是构建上层的基础。

之后,还必须了解液晶的基本显示方式和充填方式。

如图4-22,是液晶模块的缓冲区与显示屏的映射关系。

T6963控制芯片内部有64KB的缓冲区,可以由程序划分为图形、文本、文本特征3类缓冲区,在不同缓冲区里写入不同数据,在液晶屏上将映射相应的信息,这也就是液晶模块显示信息的原理。

    

                                      图4-22DMF5001液晶映射方式

       因为T6963内部含有ASCII码字库,所以要想显示字符信息,只需在文本区内填入相应的信息即可。

       如果要显示汉字或图形,则必须先在单片机内部的ROM区建模,然后将这些信息写入液晶的图形缓冲区,在液晶控制模块的控制下,相应的信息就会映射在显示屏上,也就是我们看到的汉字或图形信息了。

       如果要实时显示AD采集的波形图以及FFT处理后的频谱图,这里将就动态波形显示用到的技术加以详细介绍。

       波形的显示离不开“点”的显示,所谓“点动成线”也就这个道理,对于只有黑白两级灰度的液晶来说,画一个“点”就是将一个像素点亮。

所以我们根据时序图,先建立在LCD屏上显示“点”的底层函数。

在液晶屏上绘制“点”,有两点需要注意,一是缓冲区空间的大小,二是像素的充填方式。

在DMF5001液晶模块中,“点”的绘制需要在图形缓冲区中进行。

对于160×128像素的显示屏,图形缓冲区一共占用(160×128)/8=2560字节的空间,每一个字节对应一个地址,也就是一共有2560个地址。

考虑到DMF5001图形的充填方式是从上到下,横向填充,加上控制指令本身就支持对一个像素亮灭的控制。

所以很容易根据缓冲区的地址,控制液晶屏上某一个点的亮灭,也就是所谓的画“点”了。

五、整体电路图

见附图

六、设计总结

1.设计过程中遇到的问题及解决方法

本设计是以AT89C51为核心的倒计时秒表,对该系统的硬件和软件结构进行了相应的描述。

开始是电路焊接过程中出现的问题,比如说电路板焊接短路、LCD端口连接错误等,结果造成不能实现预期功能,经过不断实验,细心焊接,最后终于实现了LCD的显示,并且正常工作。

2.设计体会

经过紧张而有辛苦的一周的课程设计结束了。

当我快要完成老师下达给我的任务的时候,我仿佛经过一次翻山越岭,登上了高山之颠,顿感心旷神意,眼前豁然开朗。

课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。

”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。

我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。

3.对设计的建议

这样的课程设计可以学到很多东西,在与老师和同学的交流过程中,互动学习,将知识融会贯通。

老师提出的革新非常的好,认为本学期的实验模式非常实用。

但是提议可以申请将课程延长,由于时间有限没有完成实物,因此我感觉有足够的时间和精力才能作出好的东西。

时间的紧缺成为一个很大的问题。

也希望老师可以为我们指导一下以后的发展方向。

如果可以让每个人都有目的性的学习,会提高学习效率和热情。

七、参考文献

1.张培仁,张志坚,高修峰.十六位单片微处理器原理及应用[M].北京,清华大学出版社.2005.

2.田会方,吴兴强.基于LabVIEW与凌阳SPCE061A实现串口数据采集[J].微计算机信息.2006.

3.BC7281B中文技术手册[M].北京比高科技公司.2002.

 

附图

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

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1