当前位置:首页 > 范文大全 > 整改报告 >

整改报告

片机实验报告--电子时钟制作

2021-11-05 09:15:33整改报告
片机实验报告--电子时钟制作本文关键词:时钟,实验,报告,制作,电子片机实验报告--电子时钟制作本文

片机实验报告--电子时钟制作 本文关键词:时钟,实验,报告,制作,电子

片机实验报告--电子时钟制作 本文简介:淮北师范大学电子时钟制作学院计算机科学与技术专业计算机科学与技术(师范)学号学生姓名1一、设计内容与设计目的1、编写出一个电子钟,六个数码管每两个一组来分别显示小时、分和秒;一个蜂鸣器来实现报时或闹铃等声音功能;八个二极管玩花样设计,完美电子的整体设计。2、熟悉整个电路图,练习一下焊接操作。3、熟练

片机实验报告--电子时钟制作 本文内容:

淮北师范大学

电子时钟制作

计算机科学与技术

计算机科学与技术(师范)

1

一、设计内容与设计目的

1、编写出一个电子钟,六个数码管每两个一组来分别显示小时、分和秒;一个蜂鸣器来实现报时或闹铃等声音功能;八个二极管玩花样设计,完美电子的整体设计。

2、熟悉整个电路图,练习一下焊接操作。

3、熟练掌握C51的编程方法与技巧。

4、能够有效地控制数码管、二极管、蜂鸣器和键盘的操作(可采用多种形式)。

5、能够根据原理图焊接电路板,经过调试,保证整个电路板没有虚焊点。

硬件设计要求

1、根据项目要求,去选择相应的电路,比如MCU系统,输入输出驱动电路,电源供电电路。

2、整体布局合理,标注规范、明确、美观、不产生歧义。

3、列出完整的元件清单(标号、型号及大小、封装形式、数量)。

4、估算电路板的功耗,并对供电形式提出要求。

5、根据设计好的原理图,焊接实物。

软件设计要求

1、所编代码要能够实现以下基本功能,当时时间的设定,定点闹铃,秒针走一下四个二极管同时向右移一位

2、根据项目要求,设计软件整体规划,人机对话,各模块的关联,底层驱动模块。

3、程序在必要的地方进行注释。

每个函数的出入口要有输入输出参数的说明。

程序必须具有具有良好的可读性,可重用,容易调试和维护。

4、使用c语言进行编程。

二、硬件系统设计

1.STC12C5A60S2控制模块

考虑到设计功能需要,控制器的功能用于外部键盘信号的接收和识别、数码管的显示控制等,我们选择了学习过的12C5A60S2系列单片机,具有反应速度极快,工作效率特高的特点。

12C5A60S2

是一种低功耗、高性能得微控制器,具有

8K

在系统可编程Flash

存储器。使用Atmel

公司高密度非易失性存储器技术制造,与工业80C51

产品指令和引脚完全兼容。另外掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.键盘功能模块

根据系统的基本的要求,基于时间的观看和设定等功能,采用由四个键构成的独立式键盘分别接在单片机的P3.2-P3.5口,非常的方便,同时相对于独立式键盘大大节省了空间,在软件的设计时带来了极大的方便,使程序简易明了,可读性强。

本次设计中,五个功能键分别定义为KEY1键、KEY2键、KEY3键、KEY4键对应着小时加一、小时减一、分钟加一、分钟减一及同时组合键KEY1和KEY2同时按下实现显示年月的操作,KEY3和KEY4同时按下实现显示日的操作,使得操作起来十分的清晰与方便。

3.数码管显示模块

显示模块要具有显示时分秒,年月日的功能,共需要六位数码管。数码管的六个位控口接在12C5A60S2单片机的P0口线上,从左到右顺序连接,段控制线接在12C5A60S2单片机的P2口线上,从低位到高位对应连接.再由于数码管的本身显示亮度不够,所以一般都会在其位控和段控口前加上一定的驱动电路,本次设计中采用三极管作为驱动。

4.蜂鸣器模块

电子钟的另外一个功能是秒走一下,会有声音提示一下,本次设计利用蜂鸣器来实现。具有电路结构非常简单,控制极其方便等优点。

5.二极管显示模块

二极管采用共阳接法,其负极接在P1口线上。在正常运行时,二极管会随着秒的走动来亮和灭,周期为2秒。

6.系统电路图

总原理图.总布局图.PCB图见附录(1)

7.系统的元器件清单

本系统中所用到的元件如表2.1所示。

表2.1

系统元器件表

器件

型号

数量

器件

型号

数量

单片机

12C5A60S2

1个

按键

普通

5个

三极管

普通

8个

开关

6脚双路

1个

排阻

A103J,A427J,A102J

1个,1个,1个

二极管灯

普通

8个

电容

10μF

2个

数码管

CPS056AR

6个

电阻

普通

若干

下载接口

4针接口

1个

蜂鸣器

压电式

1个

单排针

普通

若干

三.软件系统设计

1.使用单片机资源介绍

12C5A60S2单片机的P0、P1、P2、P3口作为输入输出口。

RST:

复位输入。

2.软件系统各功能模块介绍

2.1独立式键盘模块

独立式键盘软件设计通过在主程序中调用子程序key去执行相应的功能,单片机P3口在复位后保持高电平,当键按下相应口线为低电平,此时CPU做初期判断,之后延时,确定为按键后等待键松,之后执行子程序。达到通过键功能程序的分支执行相应的程序段,完成对应的操作。

2.2数码管显示模块

数码管显示是通过调用子程序displaypro来实现的,由于数码管动态显示,所以在执行其他的程序的时候依然要经常调用显示子程序DISP。数码管的段控由单片机改变P2口相应位电平来实现,为实现不同的显示功能,设置了不同的显示缓冲单元,通过控制标志位控制。数码管的位控由CPU改变P0口相应位电平来实现,基于人的视觉延迟性,通过从右到左的循环保证所有数码管都被点亮。

2.3中断函数模块

这个程序运用了两个中断函数,分别为定时器0和定时器1的中断,定时器0是用来计时,定时器1是用来动态扫描,这样使得电子钟的性能更稳定。

2.4系统的整体设计思路

1.明确要实现的功能:主要有数字时钟时间的显示,时间的调试。另外还有附加功能的实现。

2.编写函数利用P2引脚控制三极管的基极用来控制6个数码管的工作状态,利用时间片分别显示不同数码管的显示,根据P0的8个引脚控制数码管的8段显示。

3.编写函数利用键盘控制P3实现时间的调试功能。利用P3.2(key1)作为模式选择,P3.3~P3.5作为不同功能的调试按键。

4.编写函数P1引脚控制发光二极管的闪烁,实现花样式闪烁。

5.接着就是闹钟功能的实现,其中包括定时的显示、调试、蜂鸣器的声音等。

当定时的闹钟时间与实际时间相同时,蜂鸣器响动。

2.5流程图

见附录(2)

附录1:

数码管:

二极管:

蜂鸣器:

按键:

单片机:

开始

key_board()

0

1

2

show_time()

show_time()

show_dell()

set_dell()

set_time()

Y

Y

N

Y

N

time()

walk_up_bell();

结束

四.程序源代码

#include

#include

#define

uchar

unsigned

char

#define

uint

unsigned

int

uchar

num[]={0xbd,0x90,0xa7,0xb6,0x9a,0x3e,0x3f,0xb0,0xbf,0xbe};

uchar

hour=0,min=0,second=0,time1;

uchar

set_hour=0,set_min=0,set_switch=1,key1_time,function;

uchar

bell[]={0x17,0x13,0x2b};

uchar

temp;

sbit

key1=P3^2;

sbit

key2=P3^3;

sbit

key3=P3^4;

sbit

key4=P3^5;

sbit

bell_ring=P2^1;

int

i;

void

timer()

interrupt

1

using

0

//中断函数

{

TH0

=

(65536

-

50000)/256;

TL0

=

(65536

-

50000)%256;

time1

++;

}

void

delay(uchar

i)//循环的次数等于i*125,一次循环8微秒

{

uchar

j,k;

for(j=0;j

for(k=0;k<125;k++)

;

}

void

Beep()

//控制蜂鸣器函数

{

bell_ring=0;

delay(1);

bell_ring=1;

delay(1);

}

void

time()

//

时间函数

{

if(time1==20){

time1=0;

for(i=0;i<25;i++)

Beep();

second++;

P1=_crol_(P1,1);

if(second==60){

second=0;

min++;

}

if(min==60)

{

min=0;

hour++;

}

if(hour==24){

hour=0;

}

}

}

void

set_time()

//调节时间函数

{

if(key2==0){

delay(200);

if(key2==1){

hour++;

if(hour==25){

hour=0;

}

}

}

if(key3==0){

delay(200);

if(key3==1){

min++;

if(min==60)

min=0;

}

}

if(key4==0){

delay(200);

if(key4==1){

second++;

if(second==60)

second=0;

}

}

}

void

show_bell()

//显示设置的闹铃时间

{

P2=0x04;//显示ON,OF

if(set_switch%2==0){

P0=bell[2];//OF

delay(6);

}

else{

P0=bell[1];//ON

delay(6);

}

P2=0x08;

P0=bell[0];

delay(6);

P2=0x10;

P0=num[set_min%10];

delay(6);

P2=0x20;

P0=num[set_min/10];

delay(6);

P2=0x40;

P0=num[set_hour%10]+0x40;

delay(6);

P2=0x80;

P0=num[set_hour/10];

delay(6);

}

void

set_bell()

//设置闹铃函数

{

if(key2==0){

delay(200);

if(key2==1){

set_hour++;

if(set_hour==24)

set_hour=0;

}

}

if(key3==0){

delay(200);

if(key3==1){

set_min++;

if(set_min==60){

set_min=0;

}

}

}

if(key4==0){

delay(200);

if(key4==1){

set_switch++;

}

}

}

void

show_time()

//显示时间

{

P2=0x04;

P0=num[second%10];

delay(6);

P2=0x08;

P0=num[second/10];

delay(6);

P2=0x10;

P0=(num[min%10]+0x40);

delay(6);

P2=0x20;

P0=num[min/10];

delay(6);

P2=0x40;

P0=num[hour%10]+0x40;

delay(6);

P2=0x80;

P0=num[hour/10];

delay(6);

}

void

walk_up_bell(){

if((min==set_min)

else

temp=0;

if((temp==1)i<2;i++)

Beep();

}

else

bell_ring=0;

}

void

key_board()

{

P3=0xff;

if(key1==0){

delay(200);

if(key1==1){

key1_time++;

}

}

function=key1_time%3;

switch(function){

case

0

:

show_time();break;

case

1

:

show_time();set_time();break;

case

2

:

show_bell();set_bell();break;

}

}

void

main(){

TMOD

=

0x01;//TMOD

寄存器工作模式选择工作模式1,M1=0,M0=1,使用16位计数器

TH0

=

(65536

-

50000)/256;/*TL0、TH0

作为16

位寄存器用,计数值从初值开始(初值由软

件设定),计数到0xFFFF即十进制的65536

后,再加1,计数器被溢出复位,并把溢出标志TF0

置1。*/

TL0

=

(65536

-

50000)%256;//50000表50000*0.1微妙=毫秒,

EA=1;

//EA:CPU

的中断开放标志

ET0=1;

//ET0:定时器/计数器T0

溢出中断允许位

TR0=1;

//TR0:定时器0

运行控制位

P1=0xf0;

//

led灯只有第一个亮

while(1)

{

key_board();

time();

walk_up_bell();

}

}

四.调试

通过键盘,按key1(P3^2)若干次可以循环显示不同的功能,0时为显示时间,1次为调节时间,按key2(P3^3)能调节时分,key3(P3^4)调节分钟,key4(P3^5)可以调节秒钟。2次时可以调节闹铃key2(P3^3)调节闹铃时分,key3(P3^4)调节闹铃分钟,key4(P3^5)调节开或关即ON或OF。依次摸三循环,实现3个功能即显示时间、调节时间、显示调节闹铃。

五.总结

在于雷老师的耐心指导下,我们顺利的完成了这次基于单片机的电子钟时钟的设计,对单片机的知识和技能有所认知,把专业知识与实践相结合,既锻炼了我们的动手能力,又加深了我们对专业知识的理解,为我们以后的工作奠定基础,这对我们以后的课程设计和毕业设计都会有所帮助。

12

篇2:数字电子时钟的实习报告

数字电子时钟的实习报告 本文关键词:时钟,实习报告,数字,电子

数字电子时钟的实习报告 本文简介:重庆机电职业技术学院实训报告设计名称:单片机原理与应用实训题目:数字电子时钟学生姓名:专业:11级机电一体化技术班级:学号:指导教师:日期:*年*月*日重庆机电职业技术学院实训任务书专业年级班一、设计题目数字电子时钟设计二、主要内容1、利用CPU的定时器定时,设计一个电子时钟,使七段数码管输出记时值

数字电子时钟的实习报告 本文内容:

重庆机电职业技术学院

实训报告

设计名称:

单片机原理与应用实训

目:

数字电子时钟

学生姓名:

业:

11级机电一体化技术

级:

号:

指导教师:

期:*年*月*日

重庆机电职业技术学院

实训任务书

年级

一、设计题目

数字电子时钟设计

二、主要内容

1、利用CPU的定时器定时,设计一个电子时钟,使七段数码管输出记时值,格式如下:

XX

XX

XX

由左向右分别为:时、分、秒

2、利用蜂鸣器实现整点报时功能

3、利用AN1~AN4实现时,分的分别加减。

三、具体要求

1、硬件电路实验连线板上已经接好,无需另外接线。

①本次实训中要把跳线JP1(板子右上角,LED灯正上方)跳到DIG上,J23(在黄色继电器右上方)接到右端。

②本次实训中要把跳线J9(紧贴51插座右方,蜂鸣器下方,RST复位键上方)跳到右端

③本实训设计要把跳线J6跳到AN端,AN1(P0.0)~

AN4(P0.4),J6在51插座右下方,4×4键盘左上方。

2、实训说明

与定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。本实训中用定时器T0产生1秒钟基本时间单位,本系统fosc=11.0592MHz,当定时器T0工作在方式1(16位)时,最大定时时间为:

216*

0.9216μs=

60397.9776μs

再利用软件记数,当T0中断17次时,所用时间为

60397.9776*17=1026765.6192μs≈1s

因此在T0中断处理程序中,要判断中断次数是否到17次,若不到17次,则只使中断次数加1,然后返回,若到了17次,则使电子秒表记时值加1(十进制),请参考硬件实验四有关内容。

电路中共阴极数码管的段码a、b、c、d、e、f、g、dp分别与单片机的P2.0~

P2.7依次相连,控制数码管中显示的字型;6个数码管的位选通信号由6个非门控制,分别接到单片机的P1.0~

P1.5端口上。程序中通过P1.0~

P1.5输出高低电平控制数码管的显示和关闭,高电平时对应数码管显示,显示内容由P2.0~

P2.7输出的段码控制。要将实时时钟值送到6个共阴极数码管中显示,这可通过调用编写的显示子程序来实现,实现过程是:先将(时、分、秒)3个记时值按个位和十位拆开成6个数字,然后查(0~9)段码表,再将段码分别送到显示缓冲区(片内数据存储30H~35H设定为显示缓冲区,用于存放段码)中去,最调用显示子程序送到6个共阴极数码管中显示。

蜂鸣器由单片机的P0.7口控制:当P0.7输出高电平时,三极管截止,没有电流流过线圈,蜂鸣器不发声;当P0.7输出低电平时,三极管导通,有电流流过线圈,蜂鸣器发出声音。

使用独立式按键AN1(P0.0)

~AN4(P0.3)时要注意采用软件消抖动的方法,一般采用软件延时(10ms)的方法,通过P0.0~P0.4的变化控制时,分的分别加减(手动调整时间)。

3、实训仪器和设备:PC机、WAVE软件、Proteus软件、51超级板等。

4、参考资料见附件

5、实训报告含封面、任务书、目录、正文、总结、参考资料。

四、进度安排

第1天:查阅资料,绘制硬件电路原理图;

第2天:编写显示子程序;

第3-4天:编写主程序和T0中断子程序

第5-6天:完成硬件仿真调试

第7天:实现实训项目要求,完成实训报告

五、成绩评定

指导教师

签名

日期*年*月*日

系主任

审核

日期*年*月*日

目录

第一章

整体设计方案

1.1

单片机的基本结构……………………………………………………………………………

1.2数字电子时钟整体设计框图………………………………………………………………

第二章

数字钟的硬件设计

2.1

最小系统设计……………………………………………………………………………

2.2

LED显示电路……………………………………………………………………………

2.3

键盘控制电路……………………………………………………………………………

第三章

数字钟的软件设计

3.1

系统软件设计流程图……………………………………………………………………

3.2

数字电子钟的原理图……………………………………………………………………

3.3

主程序……………………………………………………………………………………

第四章

系统仿真

4.1

PROTUES软件介绍………………………………………………………………………

4.2

电子钟系统PROTUES仿真………………………………………………………………

第五章

调试与功能说明

5.2

系统性能测试与功能说明………………………………………………………………

5.3

系统时钟误差分析………………………………………………………………………

5.1

硬盘调试…………………………………………………………………………………

5.4

软件调试问题及解决……………………………………………………………………

结束语………………………………………………………………………………………….

参考文献………………………………………………………………………………………

第一章

整体设计方案

1.1单片机的基本构成

AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,AT89C51单片机单片机内包含下列几个部件:

(1)

一个8位CPU;

(2)一个片内振荡器及时钟电路;

(3)4K字节ROM程序存储器;

(4)128字节RAM数据存储器;

(5)两个16位定时器/计数器;

(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;

(7)32条可编程的I/O线(四个8位并行I/O端口);

(8)一个可编程全双工串行口;

(9)具有五个中断源、两个优先级嵌套中断结构。

其内部机构框图如图2.2所示:

1.3振荡器(晶振)特性

XTAL1(19脚)和XTAL2(18脚)分别为反向放大器的输入和输出,通过这两个引脚接上晶振,其频率为12.000MHz。

1.4芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms

来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51单片机设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作,但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

1.5

AT89C51单片机的引脚说明

AT89C51单片机采用40条引脚双列直插式器件,引脚除5V(

40脚)和电源地(

20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.4(a)(b)所示

第三章

数字钟的硬件设计

3.1

最小系统设计

图3-1

单片机最小系统的结构图

单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。

1.电源引脚

Vcc

40

电源端

GND

20

接地端

工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。

2.外接晶体引脚

图3-2

晶振连接的内部、外部方式图

XTAL1

19

XTAL2

18

XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。AT89单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。

3.

复位

RST

9

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。复位操作不会对内部RAM有所影响。

常用的复位电路如下图所示:

图3-3

常用复位电路图

4.输入输出引脚

(1)

P0端口[P0.0-P0.7]

P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。

对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

(2)

P1端口[P1.0-P1.7]

P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收低8位地址信息。

(3)

P2端口[P2.0-P2.7]

P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(4)

P3端口[P3.0-P3.7]

P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,具体请看下表。

P3引脚兼用功能

P3.0串行通讯输入(RXD)

P3.1串行通讯输出(TXD)

P3.2外部中断0(

INT0)

P3.3外部中断1(INT1)

P3.4定时器0输入(T0)

P3.5定时器1输入(T1)

P3.6外部数据存储器写选通WR

P3.7外部数据存储器写选通RD

P3引脚

兼用功能

P3.0

串行通讯输入(RXD)

P3.1

串行通讯输出(TXD)

P3.2

外部中断0(

INT0)

P3.3

外部中断1(INT1)

P3.4

定时器0输入(T0)

P3.5

定时器1输入(T1)

P3.6

外部数据存储器写选通WR

P3.7

外部数据存储器写选通RD

表3-1

P3端口引脚兼用功能表

3.2

LED显示电路

显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有:

发光二极管LED显示器、液晶LCD显示器、CRT显示器等。LED显示器是现在最常用的显示器之一,如下图所示。

图3-4

LED显示器的符号图

发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。LED数码管有共阳、共阴之分。图是共阳式、共阴式LED数码管的原理图和符号

.

图3-5

共阳式、共阴式LED数码管的原理图和数码管的符号图

显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,另需两个数码管来显示横。采用动态显示方式显示时间,硬件连接如下图所示,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第四个和第五个数码管,秒的十位和个位分别显示在第七个和第八个数码管,其余数码管显示横线。LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。对于多位LED显示器,通常

都是采用动态扫描的方法进行显示,其硬件连接方式如下图所示。

图3-6

数码管的硬件连接示意图

数码管使用条件:

a、段及小数点上加限流电阻

b、使用电压:段:根据发光颜色决定;

小数点:根据发光颜色决定

c、使用电流:静态:总电流

80mA(每段

10mA);动态:平均电流

4-5mA

峰值电流

100mA

数码管使用注意事项说明:

(1)数码管表面不要用手触摸,不要用手去弄引角;

(2)焊接温度:260度;焊接时间:5S

(3)表面有保护膜的产品,可以在使用前撕下来。

3.3

键盘控制电路

该设计需要校对时间,所以用三个按键来实现。按khour来调节小时的时间,按

kmin来调节分针的时间,按

ksec来调节秒的时间。下图是按键硬件连接图。

图3-7

按键控制电路的硬件连接图

当用手按下一个键时,如图3-8所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。

第四章数字钟的软件设计

系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:

(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;

(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改;

(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;

(4)绘制程序流程图;

(5)合理分配系统资源;

(6)为程序加入注释,提高可读性,实施软件工程;

(7)注意软件的抗干扰设计,提高系统的可靠性。

4.1

系统软件设计流程图

这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。

主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间

图4-1

主程序流程图

按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示出来

图4-3

定时器中断流程图

时间显示是先秒个位计算显示,然后是秒十位计算显示,再是分个位计算显示,再然后是分十位显示,再就是时个位计算显示,最后是时十位显示。

4.2

数字钟的原理图

用PROTUES软件,根据要求画出数字电子钟的原理图如下所示。

图4-5

数字钟的原理图

在此有必要介绍一下数字电子钟的工作原理。

工作原理

数字电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。因此,一个基本的数字钟电路主要由显示器“时”,“分”,“秒”和单片机,还有校时电路组成。6个数码管的段选接到单片机的P0口,位选接到单片机的P2口。数码管按照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分单元”的时钟脉冲。“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。“时单元”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”通过七段显示器显示出来。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整,按一下ksec,秒单元就加1

,按一下kmin,分就加1,按一下khour,时就加1。

主程序

ORG

0000H

LJMP

MAIN

ORG

0050H

MAINN:

MOV

30H,#1

MOV

31H,#2

MOV

32H,#0

MOV

33H,#0

MOV

34H,#0

MOV

35H,#0

MOV

R4,#0DH

MOV

TMOD,#01

XS0:

SETB

TR0

MOV

TH0,#3cH

MOV

TL0,#0b0H

XS:

MOV

40H,#0FEH

MOV

DPTR,#TAB

MOV

P2,40H

MOV

A,30H

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

MOV

P2,40H

MOV

A,31H

ADD

A,#10

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

MOV

P2,40H

MOV

A,32H

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

MOV

P2,40H

MOV

A,33H

ADD

A,#10

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

MOV

P2,40H

MOV

A,34H

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

MOV

P2,40H

MOV

A,35H

MOVC

A,@A+DPTR

MOV

P0,A

LCALL

YS1MS

MOV

P0,#0FFH

MOV

A,40H

RL

A

MOV

40H,A

JB

TF0,JIA

JNB

P1.0,P100

JNB

P1.1,P1000

JNB

P1.2,P10000

AJMP

XS

P100:

MOV

30H,#0

MOV

31H,#0

MOV

32H,#0

MOV

33H,#0

MOV

34H,#0

MOV

35H,#0

JIA:

CLR

TF0

MOV

TH0,#3CH

MOV

TL0,#0B0H

DJNZ

R4,XSS

MOV

R4,#0DH

MOV

A,35H

CJNE

A,#9,JIA1

MOV

35H,0

MOV

A,34H

CJNE

A,#5,JIA10

MOV

34H,#0

P10000:

JNB

P1.2,P10000

MOV

A,33H

CJNE

A,#9,JIA100

MOV

33H,#0

MOV

A,32H

CJNE

A,#5,JIA1000

MOV

32H,#0

P1000:

JNB

P1.1,P1000

MOV

A,31H

CJNE

A,#9,JIA10000

MOV

31H,#0

MOV

A,30H

CJNE

A,#2,JIA100000

MOV

30H,#0

AJMP

XS0

XSS:

AJMP

XS

JIA100000:

INC

30H

AJMP

XS0

JIA10000:

CJNE

A,#3,JIAJIA

MOV

A,30H

CJNE

A,#02,JIAJIA

MOV

30H,#0

MOV

31H,#0

AJMP

XS0

JIAJIA:

INC

31H

AJMP

XS0

JIA1000:INC

32H

AJMP

XS0

JIA100:

INC

33H

AJMP

XS0

JIA10:

INC

34H

AJMP

XS0

JIA1:

INC

35H

AJMP

XS0

RET

YS1MS:

MOV

R6,#1H

YL1:

MOV

R7,#0FAH

DJNZ

R7,$

DJNZ

R6,YL1

RET

TAB:

DB

0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

DB

040H,079H,024H,030H,019H,012H,002H,078H,000H,010H

END

第五章

系统仿真

5.1

PROTUES软件介绍

Proteus软件是Labcenter

Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。

5.2

电子钟系统PROTUES仿真

用PROTUES软件,根据数字电子钟的原理图,画出仿真图,得到的图如下所示

图5-1

数字钟的PROTES仿真

第六章调试与功能说明

单片机应用系统的调试包括硬件和软件两部分,但是他们并不能完全分开。一般的方法是排除明显的硬件故障,再进行综合调试,排除可能的软/硬件故障。

6.1

硬盘调试

拿到电路板后,首先要检查加工质量,并确保没有任何方面的错误,如短路和断路,尤其要避免电源短路;元器件在安装前要逐一检查,用万用表测其数值,看是否与所用相同;完成焊接后,应先空载上电(芯片座上不插芯片),并检查各引脚的电位是否正确。若一切正常,方可在断电的情况下将芯片插入,再次检查各引脚的电位及其逻辑关系。将万用表的探针放到单片机接电源的引脚上检测一下,看是否符合要求。

6.2

系统性能测试与功能说明

走时:默认为走时状态,按24小时制分别显示“时时-分分-秒秒”,有2个“-”动态显示,时间会按实际时间以秒为最少单位变化。

走时调整:按ksec对秒进行调整,按一下加一秒;按kmin对分进行调整,按一下加一分;按khour对时进行调整,按一下加一小时,从而达到快速设定时间的目的。

6.3

系统时钟误差分析

时间是一个基本物理量,具有连续、自动流逝、不重复等特性。我国时间基准来自国家授时中心,人们日常使用的时钟就是以一定的精度与该基准保持同步的。结合时间概念和误差理论,可以定义电子钟的走时误差S=S1-S2,S1表示程序实际运行计算所得的秒;S2表示客观时间的标准秒。S>0时表示电子钟秒单元数值刷新滞后,即走时误差为“慢”;反之,S<0表示秒单元数值的刷新超前,即走时误差为“快”。

本次设计的单片机电子钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在下一秒溢出,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。

6.4

软件调试问题及解决

软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。软件调试可以采取离线调试和在线调试两种方式。前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。本次课题,伟福软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。

仿真部分采用protus

7

professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。

首先打开protus

7

professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求

总结

我在这一次数字电子钟的设计过程中,遇到了很多的困难,在解决问题的同时我也收获了很多。通过对自己在大学二年时间里所学的知识的回顾,和到图书馆查阅书籍,并充分发挥对所学知识的理解和对毕业设计的思考及动手的能力,最终完成了。这其中也离不开老师和同学的帮助。

通过这次课程设计我发现,只有把理论学的很扎实了;才能够将课本知识与实践相整合,理论知识服务于教学实践,这样才能圆满的完成自己的作品,以增强自己的动手能力。这个实验十分有意义

我获得很深刻的经验。通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。

我们的学习不但要立足已经学过的书本知识,更多的是来源于课外的知识积累,我们不能只限于老师讲的,我们应该通过其他的方面学习。以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,通过自己的手来解决问题比用脑子解决问题更加深刻。学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。

还有就是在这次的设计中我也遇到了很多的困难,首先我在这个书本学到的知识有限,还有就是我学的也不是太好,就让我在设计程序的时候有很大困难。我通过问同学我才完成的。还望老师加以批改。

参考文献、资料索引

文献、资料名称编著者出版单位

《51系列单片机高级实例开发指南》

《MCS—51/96系列单片机原理及应用》

《AT89系列单片机原理与接口技术》

《单片机原理及应用》

《C程序设计》

《单片机原理与实用技术》

《电子技术基础》

《电路基础》

《电路与电子技术》

《电路基本分析》

孙涵芳

王幸之

欧阳斌林

潭浩强

付晓光

邹寿彬

许熙文

卢尔健

石生北京航空航天大学出版社

北京航空航天大学出版社

北京航空航天大学出版社

中国水利水电出版社

北京航空航天出版社

清华大学出版社

清华大学出版社

高等教育出版社

科学技术出版社

高等教育出版社

篇3:基于51单片机和8279芯片的电子时钟设计报告

基于51单片机和8279芯片的电子时钟设计报告 本文关键词:单片机,时钟,芯片,报告,设计

基于51单片机和8279芯片的电子时钟设计报告 本文简介:任务书题目基于51单片机和8279芯片的电子时钟设计时间安排目的:通过《单片机原理与应用》这门课的课程设计,学生应能对MCS-51单片机有一个全面的认识,掌握以MCS-51单片机为核心的电子电路的设计方法和应用技术。1.进一步掌握8279键盘显示电路的编程方法。2.进一步掌握定时器的使用和编程方法。

基于51单片机和8279芯片的电子时钟设计报告 本文内容:

任务书

基于51单片机和8279芯片的电子时钟设计

间安排

的:

通过《单片机原理与应用》这门课的课程设计,学生应能对MCS-51单片机有一个全面的认识,掌握以MCS-51单片机为核心的电子电路的设计方法和应用技术。

1.进一步掌握8279键盘显示电路的编程方法。

2.进一步掌握定时器的使用和编程方法。

3.进一步掌握中断处理程序的编程方法。

求:

(1)

利用AT89C51作为主控器组成一个电子钟并具有闹钟功能。

(2)

利用8位LED用于显示当前时间。

(3)

利用8279芯片进行键盘和LED的管理和显示。

(4)

发挥自己的创造力,实现尽可能多的功能。

总体方案实现:

用AT89C51作为主控制器,并采用8279作为辅助芯片,控制键盘、LED数码管等的操作和显示。

指导教师评语:

评分等级:(

指导教师签名:

目录

一、系统总体设计方案规划与选定3

二、系统硬件功能及参数简介4

2.1

AT89C51单片机简介.4

2.2

AT89C51单片机的引脚说明.5

2.3

LED简介.7

2.4

8279基本原理说明.10

2.5

DS1302介绍及基本原理说明.13

2.6

DS18B20介绍及基本工作方式说明17

三、系统硬件电路设计19

3.1

proteus仿真接线图19

3.2分块硬件电路射界.20

4、

软件设计及实现过程.25

4.1程序设计简述.25

4.2系统程序流程图设计.26

五、系统的调试过程27

5.1程序性问题及解决.27

5.2调试过程出现问题及解决.27

六、新增功能及实现方法.29

6.1新增功能.29

6.2实现方法.29

7、

小节与体会.31

参考文献.33

附录34

硬件连接图.34

程序清单.36

一、系统总体设计方案规划与选定

首先,我们对于整个系统做了总体的规划,大致列了一下我们设想中的一些附加功能。由于附加功能较多,我们最终决定,先实现基本功能,然后在基本功能的基础上,对系统进行改进,逐步加入我们设想的拓展功能。

其次,是编程语言的选择,我们学习过的编程语言有两种:C语言与汇编语言。经过比较后决定使用C51编程,因为C语言结构整齐,各个子函数可以独立来写,思路更加清晰显得简单,所以选用C语言来进行编程。同时,利用C语言进行编程也有利于我们后续对系统的改进,也就是增加辅助功能,只要利用子函数实现就行,并且可以独立于整个系统运行,可以单独对子函数进行测试。对于所设想的附加功能,我们首先进行相关资料的查询,然后可以对子函数进行编写,并进行单独的调试。可以说,使用C语言编程在软件方面增加了我们系统的可拓展性。

最后,是有关硬件的设计,为了实现基本功能,我们对8979芯片以及DS1302芯片进行了仔细的学习,从网上查阅了不少资料。对于电路图的设计,我们也是按照老师的要求,先实现按照实现基本功能进行设计,按照课本进行电路图的链接,同时查阅了关于8279芯片的使用说明书。基本电路图设计完成之后,便查阅有关资料,对我们设想的附加功能所用到的DS1302时钟芯片和DS18B20温度传感器进行学习了解硬件的连接和测试过程。而且由于一开始对软件的使用不熟练,在页面的排版布局上也没有计划,最终显得整个电路硬件仿真连接图较乱,最后有进行了重新整理和布局,并配上详细说明,是的整体看起来协调、美观。

二、系统硬件功能及参数简介

2.1

AT89C51单片机简介

AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,AT89C51单片机内包含下列几个部件:

(1)

一个8位CPU;

(2)一个片内振荡器及时钟电路;

(3)4K字节ROM程序存储器;

(4)128字节RAM数据存储器;

(5)两个16位定时器/计数器;

(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;

(7)32条可编程的I/O线(四个8位并行I/O端口);

(8)一个可编程全双工串行口;

(9)具有五个中断源、两个优先级嵌套中断结构。

其内部机构框图如图2.1所示:

图2.1

MCS-51单片机内部机构框图

2.2

AT89C51单片机的引脚说明

AT89C51单片机采用40条引脚双列直插式器件,引脚除5V(

40脚)和电源地(

20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.2(a)(b)所示

(a)

(b)

图2.2

AT89C51单片机逻辑图与引脚图

AT89C51单片机的管脚说明如下:

(1)VCC:供电电压

(2)GND:接地

(3)时钟电路

XTAL1(19脚)——芯片内部振荡电路(单级反相放大器)输入端。

XTAL2(18脚)——芯片内部振荡电路(单级反相放大器)输出端。

(4)控制信号

RST(9脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0口~P3口输出高电平,将初值07H写入堆栈指针。

ALE(30脚)地址锁存信号:当访问外部存储器时,P0口输出的低8位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低8位后,又能与片外存储器之间传送信息。另外,ALE可驱动4个TTL门。

(29脚)片外程序存储器读选通:低电平有效,作为程序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到P0口,可驱动8个TTL门。

/VPP(30脚):当为高电平且PC值小于0FFFH时,CPU执行内部程序存储器程序;当为低电平时,CPU仅执行外部程序存储器程序。

2.3

LED简介

LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2.3(a)是共阴和共阳极数码管的内部电路图,它们的发光原理是一样的,只是它们的电源极性不同而已。

将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将“b“和“c“段接上正电源,其它端接地或悬空,那么“b“和“c“段发光,此时,数码管显示将显示数字“1”。而将“a“、“b“、“d“、“e“和“g“段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它数字的显示原理与此类同。

LED的7段数码管利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。在这次的设计中采用的均是共阴极的LED显示,当I/O口输出为高电平的时候,对应段就被点亮。LED数码管的结构图如图2.3(b)所示。

(a)

(b)

图2.3

LED分类结构图和结构图

这次设计的显示部分采用AT89C51单片机动态扫描完成,在多数的应用场合中,我们并不希望使用多I/O端口的单片机,原则上是使用尽量少引脚的器件。在没有富余端口的情况下,应通过优化设计程序和扩展电路达到预期的目的。动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。

LED显示电路:

(1)

静态显示电路

LDE显示器工作在静态显示时,其公共阳极(或阴极)

接VCC(或GND)

,一直处于显示有效状态,所以每一位的显示内容必须由锁存器加以锁存,显示各位相互独立。

(2)

动态显示电路

将所有位的段选线的同名端联在一起,由一个8位I/O口控制,形成段选线的多位复用。而各位的公共阳极或公共阴极则分别由相应的I/O口线控制,实现各位的分时选通,即同一时刻只有被选通位是能显示相应的字符,而其他所有位都是熄灭的。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则会造成多位同时点亮的假象。这就需要单片机不断地对显示进行控制,CPU需要不断地进行显示刷新,动态显示电路参见图2.4,图2.4中是扩展了五位的LED数码管显示,用一个74LS04作为五个LED的段选输入,采用动态显示的方式连接。类似地,16位的LED数码管显示也可以用这种方法来实现。

图2.4

五位LED数码管的动态显示

2.4

8279基本原理说明

8279显示部分按扫描的方式工作,可以显示8或16位LED显示块。

8279电路工作原理:

1.I/O控制及数据缓冲器

数据缓冲器是双向缓冲器,连接内、外总线,用于传送CPU和8279之间的命令或数据;I/O控制线是CPU对8279进行控制的引线。CS是8279的片选信号,CS=0时,8279才被允许读出或写入信息。WR、RD为来自CPU的控制信号。A0用于区别信息特性:A0=1时,表示数据缓冲器输入为指令、输出为状态字;A=0时,输入、输出皆为数据。

2.控制与定时寄存器及定时控制

控制与定时寄存器用来寄存键盘及显示的工作方式,以及由CPU编程的其它操作方式。这些寄存器一旦接受并锁存送来的命令,就通过译码产生相应的信号,从而完成相应的控制功能。

定时控制包含基本记数键。首级计数器是一个可编程的N级计数器。N可以2~31之间由软件编程,以便从外界时钟CLK分频得到内部所需要的100KHZ时钟。然后再经过分频为键盘扫描提供适当的逐行扫描频率和显示扫描时间。

3.扫描计数器

扫描计数器有两种工作方式。按编码方式工作时,计数器作二进制记数。4位记数状态从扫描线SL0~SL3输出,经外部译码器译码后,为键盘和显示器提供扫描线;按译码方式工作时,扫描计数器的最低二位被译码后,从SL0~SL3输出。因此,SL0~SL3提供了4中取1的扫描译码。

4.回复缓冲器、键盘去抖及控制来自RL0~RL3的8根回复线的回复信号,由回复缓冲器缓冲并锁存。

在键盘工作方式中,回复线作为行列式键盘的行列输入线。在逐行列输入时,在逐行列扫描时,回复线用来搜索每一行列中闭合的键。当某一键闭合时,去抖电路被置位,延时等待10ms后,再检验该键是否继续闭和,并将该键的地址和附加的移位、控制状态一起形成键盘数据被送入8279内部FIFO(先进先出)存储器。键盘数据格式如下:

D7

D6

D5D4

D3

D2

D1

D0

控制

移位

扫描

回复

控制和移位(D6、D7)的状态由两个独立的附加开关决定,而扫描(D5、D4、D3)和回复(D2、D1、D0)则是被按键置位的数据。D5、D4、D3来自动扫描计数器,是按下键的行列编码,而(D7D7D7)则来自行/列计数器,它们是根据回复信号而确定的行/列编码。

在传感器开关状态矩阵方式中,回复线的内容直接被送往和相应的传感器RAM(即FIFO存储器)。

在选通输入方式中,回复线的内容在CNTL/STB线的脉冲上升沿被送入FIFO存储

5.FIFO/传感器及其状态寄存器

FIFO/传感器RAM是一个双重功能的8×8RAM。

在键盘或选通方式工作时,它是FIFO存储器,其输入或读出遵循先入先出的原则。FIFO状态寄存器用于存放FIFO的工作状态。例如,RAM是满还是空;其中存有多少数据;是否操作出错等。当FIFO存储器不空,状态逻辑将产生IRQ=1信号向CPU申请中断。

在传感器矩阵方式工作时,这个存储器以是传感器不是存储器。它存放着传感器矩阵中的每一个传感器状态。在此方式中,若检索出传感器的变化,IRQ信号变为高电平,向CPU申请中断。

6.显示RAM和显示地址寄存器

显示RAM用来存储显示数据。容量为16×8位。在显示过程中,存储的显示数据轮流从显示寄存器输出。显示寄存器分别为A、B两组,OUTA0~3和OUTB0~3可以单独送数,也可以组成一个8位的字。显示寄存器的输出与显示扫描配合,不断从显示RAM中读出显示数据,同时轮流驱动被选中的显示器件,以达到多路复用的目的,使显示器件呈现稳定的显示状态。

显示地址寄存器用来寄存由CPU进行读/写显示RAM的地址,它可以由命令设定,也可以设置成每次读写或写入之后自动递减。

2.5

DS1302介绍及基本原理说明

2.5.1

主要功能

DS1302

是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

特性:

实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数

用于高速数据暂存的

31×8

RAM

2引脚的串行

I/O

2.5-5.5V满度工作范围

用于时钟或RAM数据读写的单字节或

多字节数据传送

双电源引脚

可选慢速充电至VCC1

2.5.2

内部结构及引脚功能

DS1302内部主要包括实时时钟(real

time

clock)、输入移位寄存器(input

shift

registers)、31字节静态RAM、电源控制部分(power

control)、命令控制逻辑(command

and

control

logic)、振荡器和分频器(oscillator

and

divider)等部分。DS1302内部结构如图2-5所示。

图2-5

DS1302内部结构

2-6

DS1302引脚排列

DS1302具有8脚DIP引脚排列如图2-6所示。

VCC1:后备电源,在主电源关闭的情况下,也能保持时钟的连续运行;当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。

VCC2:主电源,当VCC2小于VCC1时,DS1302由VCC1供电。

X1、X2:振荡源,外接32768Hz晶振。

GND:接地端

SCLK:串行时钟输入端

I/O:串行数据输入输出端(双向)。

RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

2.5.3

工作原理

DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址。命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输入数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下最多可达8+248。

2.5.4

控制字节及寄存器

DS1302的一次数据传送是从发送控制字节开始的。控制字节的最高有效位(位7)必须是逻辑1,如果该位为0,则无法把数据写入到DS1302中;位6表示要读写的数据类型,为0表示存取日历时钟数据,为1表示存取

RAM数据;位5至位1指示要操作单元的地址;最低有效位(位

0)表示命令类型,为0表示要进行写操作,为

1

表示要进行读操作。控制字节总是从最低位开始输出。其控制字节格式如图2-7所示。

图2-7

控制字节格式

2.5.5

时钟/日历存储区(时分秒)

2.5.6

数据的传送

DS1302

写入数据时,数据在控制字节输入后的下一个

SCLK周期的上升沿被写入,多余的

SCLK将被忽略。数据写入时从低位(位0)开始;同样,从DS1302

读取数据时,数据在紧跟控制字节后的下一个

SCLK的下降沿读出,读出数据时也是从低位(0位)到高位(7

位),只要RST保持高电平,额外的

SCLK将导致数据字节的持续读出,这个特性用于实现该芯片的突发读模式。

对DS1302

的每一次读写需

16个时钟脉冲,前

8

个脉冲输入操作地址和读写命令,后8个脉冲写入或读出数据。数据传送时序如图2-8。

图2-8

数据读写时序图

2.6

DS18B20介绍及基本工作方式说明

DS18B20总体介绍:

DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,主要有以下几方面的原因:

(1)系统的特性:测温范围为-55℃~+128℃

,测温精度为士0.5℃;温度转换精度9~12位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式。

(2)系统成本:由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低。一支DS18B20的体积与普通三极管相差无几,价格只有十元人民币左右。

(3)系统复杂度:由于DS18B20是单总线器件,微处理器与其接口时仅需占用1个I/O端口且一条总线上可以挂接几十个DS18B20,测温时无需任何外部元件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量。

(4)系统的调试和维护:由于引线的减少,使得系统接口大为简化,给系统的调试.

DS18B20的复位时序图:

由上位机拉低总线480-960us的时间然后拉高总线,等待15-60us的时间,如果在总线上有DS18B20这个器件,并且将总线拉低60-240us的话,就证明该器件复位成功,已经准备好发送或接受数据了。

图2-9复位时序图

DS18B20的写时序图:

DS18B20的写时序分为写0时序和写1时序两个过程。DS18B20写0时序和写1时序的要求不同,当要写0时序是,单总线要被拉低至少60us,保证DS18B20能够在15us~45us之间能够正确地采样I/O总线上的低电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

图2-10写时序图

DS18B20的读时序图:

DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时序是从主机把单总线拉低之后,在15秒之内就得释放单总线,让DS18B20把数据传输到单总线上。DS18B20完成一个读时序过程,至少需要60us。

三、系统硬件电路设计

3.1

proteus仿真接线图

全图除了分块电路之外,没有明线,看起来简洁明了,并且各个电路的区域不同,也便于查找。将键盘、数码管、二极管电路整合在一块,对系统的调试可以方便很多。

3.2分块硬件电路射界

3.2.1

ds1302时钟电路

通过P1.3口将时钟芯片内部RAM的内容读到单片机内部进而进行显示,内部RAM的内容即为当前日期

3.2.2

ds18b20温度传感器电路

通过P1.0口将温度传感器内部RAM的温度读入单片机,进而进行显示。

3.2.3

8279电路

经测验,将SHIFT和CTRL/STB口接地,可以使键盘的前两位为1,进而可以方便的读出键盘位置,P0口的数据通过图中蓝色总线传入8279芯片。P2.0口通过输出0或1控制8279用法。

3.2.4

二极管电路

第一部分二极管直接与单片机中P1.4-P1.7相连,显示温度的温馨提示。第二部分的二极管电路通过38译码器与单片机中P3.0、P3.1、P3.4相连,控制灯的开关,进行节日显示。

3.2.5

数码管显示电路

段选部分直接与8279芯片中OUTA和OUTB相连,用于控制每一位的显示,而片选部分则通过38译码器与8279中SL0-SL2相连,用于控制位的选择。

3.2.6

4*5键盘电路

键盘部分的行部分通过38译码器与8279中SL0-SL2相连,用于返回行值,键盘列部分直接与RL0-RL4相连,用于返回列值。

3.2.7

闹钟及音乐播放电路

第一部分为闹钟电路,通过控制P3.2口低电平与高电平的交替输出,进行闹钟响铃和整点报时功能。第二部分为音乐电路,通过控制P3.5口高低电平输出的频率产生不同节拍的音符,进而构成音乐。

5、

软件设计及实现过程

4.1程序设计简述

主程序先进行8279初始化,输出HELLO及开机音乐后,再进行整个系统的初始化。进入如图所示的程序循环过程,并在循环过程中不断判断是否满足相应的判断语句,进行闹钟的响铃和节日以及温度的提示,并且等待中断、进行键盘扫描。当检测到键值时,进入中断,根据键值判断所需要进行的功能,转到相应的子函数中进行。

4.2系统程序流程图设计

主函数程序设计流程图

显示子函数流程图

五、系统的调试过程

5.1程序性问题及解决

1.

由于word

的编写功能较为强大,开始使用word进行编写,然后复制如keil进行调试,由于使用word的原因,导致程序中出现了很多中问字符的空格,进行了仔细查找将空格抹去之后,方可正常运行。

2.

用proteus话电路,进行程序调试时,发现提示硬件错误,出现器件重名,导致无法运行。

5.2调试过程出现问题及解决

1.

数码管输出错误,与所要输出的相反。分析原因:程序中数码管输出部分顺序不对。改进方法:为了防止对程序进行大改,将命令字改为左端输入。

2.

闹钟时明明输出高电平,但喇叭并不响。分析原因:上网查询之后发现所用喇叭需要震荡,及高低电平交替输出才行。改进方法:在程序中加入void

di()子函数,使用时进行引用。

3.

对网上找的歌曲代码进行截取时发现截取后的蜂鸣器乱响。分析原因:歌曲代码中没两位表示一个音符,截取过程中将两位拆开,出现混乱,改进方法:以两位字符为单位进行截取。

4.

节日提示的二极管不亮。分析原因:运行时,发现二极管相应的端口显示低电平,故程序没有问题,最终发现马虎大意导致二极管接反。改进方法:反接二极管。

5.

温度显示错误,正值时正常显示,负值时显示零。分析原因:温度读取子函数有错误,但无论怎么修改,扔无法解决上述问题。将0;i--);

}

//****************开机唱歌函数**********************//

void

Time0_Init()

{

TMOD

=

0x10;

IE

=

0x88;

TH1

=

0xDC;

TL1

=

0x00;

}

void

Time0_Int()

interrupt

3

{

TH1

=

0xDC;

TL1

=

0x00;

Count++;

//长度加1

}

void

Delay_xMs(uint

x)

{

uint

i,j;

for(i=0;

i0;i--)

{

DQ

=

0;

//

给脉冲信号

datt>>=1;

DQ

=

1;

//

给脉冲信号

if(DQ)

datt|=0x80;

yanshi(5);

}

return(datt);

}

void

Write1(unsigned

char

datt)//写字节

{

unsigned

char

i=0;

for

(i=8;

i>0;

i--)

{

DQ

=

0;

DQ

=

datt

yanshi(5);

DQ

=

1;

datt>>=1;

}

}

void

ReadTemperature()

{

unsigned

char

tl=0,th=0,i=100;

while(i--)

{

Init();

Write1(0xCC);

//

跳过读序号列号的操作

Write1(0x44);

//

启动温度转换

yanshi(100);

Init();

Write1(0xCC);

//跳过读序号列号的操作

Write1(0xBE);

//读取温度寄存器等

yanshi(100);

tl=Read();

//读取温度值低位

th=Read();

//读取温度值高位

temp=th>=4;

//右移4位,相当于乘0.0625,将温度化为十进制

else

{

temp=~temp;

temp+=1;

}//经测试,温度零下时,直接在此函数中除16影响显示,故在显示函数中除16

temp1=temp%100;//用于温度显示

}

}

void

wendutishi()

{

if(t=15

LED1=0;

LED3=0;

LED2=0;

}

}

else

{

LED1=1;

LED2=0;

LED3=0;

LED4=0;

}

}

/***************节日提示*************/

void

jieritishi()

{

if(ctime.month==1D=0;C=0;}

else

if(ctime.month==5D=0;C=0;}

else

if(ctime.month==6D=1;C=0;}

else

if(ctime.month==7D=1;C=0;}

else

if(ctime.month==8D=0;C=1;}

else

if(ctime.month==9D=0;C=1;}

else

if(ctime.month==10D=1;C=1;}

}

/**********闹钟响铃函数*************/

void

di()

{

uchar

i

;

for(i=0;i0;

i--)

{

di();

delay(140);

}

}

/*********时钟函数************/

void

write(uchar

addr,uchar

dat)

{

uchar

i

;

RST

=

0

;

SCK

=

0

;

RST

=

1

;

for(i=0;i>=1

;

SCK

=

1

;

}

for(i=0;i>=

1

;

SCK

=

1

;

}

RST

=

0

;

}

uchar

read(uchar

addr)

{

uchar

i,dat

;

RST

=

0

;

SCK

=

0

;

RST

=

1

;

for(i=0;i>=1

;

SCK

=

1

;

}

for(i=0;i>=1

;

if(SDA)

dat|=0x80

;

SCK=1

;

}

RST=0

;

dat=(dat/16*10)+(dat

return

dat

;

}

void

read_time()

{

ctime.second

=

read(0x81);

ctime.minute

=

read(0x83);

推荐访问:时钟 实验 报告