好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

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

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

单片机实验报告--电子时钟制作 本文简介:淮北师范大学电子时钟制作学院计算机科学与技术专业计算机科学与技术(师范)学号学生姓名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

TAG标签: