电子时钟课程设计文档格式.docx

上传人:b****4 文档编号:8110638 上传时间:2023-05-10 格式:DOCX 页数:27 大小:293.80KB
下载 相关 举报
电子时钟课程设计文档格式.docx_第1页
第1页 / 共27页
电子时钟课程设计文档格式.docx_第2页
第2页 / 共27页
电子时钟课程设计文档格式.docx_第3页
第3页 / 共27页
电子时钟课程设计文档格式.docx_第4页
第4页 / 共27页
电子时钟课程设计文档格式.docx_第5页
第5页 / 共27页
电子时钟课程设计文档格式.docx_第6页
第6页 / 共27页
电子时钟课程设计文档格式.docx_第7页
第7页 / 共27页
电子时钟课程设计文档格式.docx_第8页
第8页 / 共27页
电子时钟课程设计文档格式.docx_第9页
第9页 / 共27页
电子时钟课程设计文档格式.docx_第10页
第10页 / 共27页
电子时钟课程设计文档格式.docx_第11页
第11页 / 共27页
电子时钟课程设计文档格式.docx_第12页
第12页 / 共27页
电子时钟课程设计文档格式.docx_第13页
第13页 / 共27页
电子时钟课程设计文档格式.docx_第14页
第14页 / 共27页
电子时钟课程设计文档格式.docx_第15页
第15页 / 共27页
电子时钟课程设计文档格式.docx_第16页
第16页 / 共27页
电子时钟课程设计文档格式.docx_第17页
第17页 / 共27页
电子时钟课程设计文档格式.docx_第18页
第18页 / 共27页
电子时钟课程设计文档格式.docx_第19页
第19页 / 共27页
电子时钟课程设计文档格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子时钟课程设计文档格式.docx

《电子时钟课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计文档格式.docx(27页珍藏版)》请在冰点文库上搜索。

电子时钟课程设计文档格式.docx

2、秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。

将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。

“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用24进制计时器,可实现对一天24小时的累计

3、软件程序通过单片机将“时”、“分”、“秒”计数器的输出状态通过液晶显示器显示出来。

4、整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时

5、校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。

三、总体设计

3.1设计方案

1)方案讨论和设计:

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

一,LCD液晶显示器如何显示数字0—9;

二,如何用单片机来控制LCD的显示;

三,单片机最小模式下的设计。

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

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

2)主要任务:

软件的调试和烧录

3.2硬件设计设计

1)CPU部分

P2.0口是“时间”按键,即是调时分秒端口

P2.1口是“加”按键,可以是时分秒加一

P2.2口是“减”按键,可以使时分秒减一

P2.3口是给轰鸣器送触发信号口

主要有ATC852、按键构成

2)时钟振荡模块

时钟振荡电路用于产生单片机正常工作时所需要的时钟信号,电路由两个30pF的瓷片电容和一个12MHz的晶振组成,并接入到单片机的XTAL1和XTAL2引脚处,使单片机工作于内部振荡模式。

此电路在加电后延迟大约10ms振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率决定。

电路中两个电容C4、C5的作用使电路快速起振,提高电路的运行速度。

3)LCD显示部分

D1-D7口分别依次接单片机的P1.0-P1.7;

RS,RW,E分别接P3.0-P3.3口

3)键盘及蜂鸣器部分

3.2电子钟软件部分设计

程序流程图

开始

初始化定时器T0,T1

开T0定时分秒

显示时分秒

YN

YN

四、方案实施

4.1单片机简介

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

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

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

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

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

AT89C51引脚图

从图中可以看到AT89C51有P0、P1、P2、P3四个输出输入口,其中P2.1口接开关用来LCD数字显示的起停,其中+5V的高电平有电源电路提供。

4.2动态LCD液晶显示器显示

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

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

如图1,是液晶模块的基本时序图。

图1DMF5001液晶模块基本时序图

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

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

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

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

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

图2DMF5001液晶映射方式

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

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

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

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

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

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

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

对于160×

128像素的显示屏,图形缓冲区一共占用(160×

128)/8=2560字节的空间,每一个字节对应一个地址,也就是一共有2560个地址。

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

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

4.3软件调试及调试方法

1)启动keiluVision,编写倒计时汇编语言程序,然后点击Project菜单——〉Newproject,新建一个工程,接着选择CPU类型,我们选择最常用的AT89C51。

2)在工程中加入文件。

新建一个文件倒计时.C保存,汇编语言文件建好后把文件加入到工程中。

程序调试图如下:

3)编译工程及文件,发现错误更改后再重新编译文件,直到没有错误并且产生了xxx.hex的文件。

4)用单片机仿真软件ISIS7Professionl来仿真此次设计的单片机是否能够完成设计的要求。

仿真图如下:

五、课程设计总结

本次课程设计是用8052单片机CPU及接口电路设计一个数字时钟,经过近一个星期的调试,结果满足设计要求,验证无误。

设计主要用到了多种芯片,程序也比较长比较麻烦,同时也遇到了不少困难,尤其是关于校时模块的设计实现。

关于显示模块,在以前的实验中做过,所以问题很容易解决。

通过本次设计,系统的了解了实时时钟的设计流程,尤其是硬、软件的设计方法,掌握了键盘显示电路的基本功能及编程方法,掌握了键盘电路和显示电路的一般原理,也进一步掌握了定时器的使用和中断处理器程序的编程方法。

开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。

六.参考文献

[1]李广弟单片机基础[M]北京:

航空航天大学出版社2001年1月

[2]迟荣强单片机原理及接口技术[M]北京:

高等教育出版2004年9月

[3]张毅刚单片机原理及应用[M]北京:

高等教育出版社2008年5月

七、附件

7.1软件设计程序:

#include<

reg52.h>

#defineucharunsignedchar

sbitrs=P3^0;

sbitrw=P3^1;

sbiten=P3^2;

sbittshi=P2^0;

sbitjia=P2^1;

sbitjian=P2^2;

sbitfm=P2^3;

ucharjishu=0,miao=0,fen=30,shi=12;

uchartiaoshi=0,xian1,xian2;

ucharcodemytab[8]={0x01,0x1b,0x1d,0x19,0x1d,0x1b,0x01,0x00};

//小喇叭形状定义

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

voidDelay1ms(ucharcount)

{

uchari,j;

for(i=0;

i<

count;

i++)

for(j=0;

j<

120;

j++);

}

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

voidwrite_com(ucharcom)

rs=0;

rw=0;

en=0;

Delay1ms

(2);

P1=com;

Delay1ms(4);

en=1;

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

voidwrite_data(uchardt)//bunengyongdata

rs=1;

P1=dt;

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

voidinitial_lcd()//henyongyiwangjigaibufen

Delay1ms(20);

write_com(0x38);

//16*2xianshi,5*7xianshi,8weishijujiekou

Delay1ms(5);

write_com(0x0c);

//kaixianshi,buxianshiguangbiao

write_com(0x06);

//xueyigezifuhouacjia1

write_com(0x01);

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

voidtime0(void)interrupt1using0

TH0=0x3c;

TL0=0xb0;

jishu++;

if(jishu==20)

jishu=0;

miao++;

if(miao==60)

miao=0;

fen++;

if(fen==60)

fen=0;

shi++;

if(shi==24)

shi=0;

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

voidchaixian(ucharmiao,fen,shi)

ucharshi1,shi2,fen1,fen2,miao1,miao2;

shi1=shi/10;

shi2=shi%10;

fen1=fen/10;

fen2=fen%10;

miao1=miao/10;

miao2=miao%10;

write_com(0x80+0x04);

write_data(0x30+shi1);

write_data(0x30+shi2);

write_data(0x2d);

write_com(0x80+0x07);

write_data(0x30+fen1);

write_data(0x30+fen2);

write_com(0x80+0x0a);

write_data(0x30+miao1);

write_data(0x30+miao2);

//*********************液晶闪烁*****************************

voidshanshuo(ucharadd,shu1,shu2)

write_com(0x80+add);

write_data(0x01);

Delay1ms(250);

write_data(0x30+shu1);

write_data(0x30+shu2);

//***********************拆字*******************************

voidchai(ucharchai)

xian1=chai/10;

xian2=chai%10;

//*******************键盘扫描调时定时程序*******************

voidkeyscan()

TR0=0;

if(tshi==0)

Delay1ms(10);

tiaoshi++;

if(tiaoshi==4)

tiaoshi=0;

while(tiaoshi!

=0)

{

switch(tiaoshi)

case1:

chai(shi);

shanshuo(4,xian1,xian2);

if(jia==0)

if(shi==25)

if(jian==0)

shi--;

if(shi==255)

shi=24;

break;

case2:

chai(fen);

shanshuo(7,xian1,xian2);

fen--;

if(fen==255)

fen=59;

case3:

chai(miao);

shanshuo(10,xian1,xian2);

if(miao==59)

miao--;

if(miao==255)

miao=59;

while(tshi==0)

}

TR0=1;

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

voidtime1(void)interrupt3using0

TH1=0xff;

TL1=0x44;

chaixian(miao,fen,shi);

fm=~fm;

//**************整点报时程序*************************

voidbaoshi()

while(fen==0&

&

miao<

7)

TR1=1;

write_com(0x80+0x0e);

write_data(0x00);

TR1=0;

//*自定义字符写入CGRAM*

voidwritetab()

{

unsignedchari;

write_com(0x40);

//写CGRAM

for(i=0;

8;

i++)

write_data(mytab[i]);

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

voidmain()

TMOD=0x01;

IE=0x8e;

IP=0x02;

initial_lcd();

write_data(0x00);

writetab();

while

(1)

keyscan();

baoshi();

7.2电子钟电路原理图

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

当前位置:首页 > 求职职场 > 简历

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

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