电子打铃器.docx

上传人:b****6 文档编号:3307422 上传时间:2022-11-21 格式:DOCX 页数:19 大小:193.50KB
下载 相关 举报
电子打铃器.docx_第1页
第1页 / 共19页
电子打铃器.docx_第2页
第2页 / 共19页
电子打铃器.docx_第3页
第3页 / 共19页
电子打铃器.docx_第4页
第4页 / 共19页
电子打铃器.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

电子打铃器.docx

《电子打铃器.docx》由会员分享,可在线阅读,更多相关《电子打铃器.docx(19页珍藏版)》请在冰豆网上搜索。

电子打铃器.docx

电子打铃器

 

单片机课程设计

 

课题:

电子打铃器

 

学院:

电气与信息工程学院

专业:

电子信息工程

姓名:

¥¥¥

学号:

指导老师:

 

河南城建学院

2013年01月01日

成绩评定·

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

 

 

二、评分

评分项目

设计报告评分

答辩评分

平时表现评分

合计

(100分)

任务完成

情况

(20分)

课程设计

报告质量

(40分)

表达情况

(10分)

回答问题

情况

(10分)

工作态度与纪律

(10分)

独立工作

能力

(10分)

得分

 

课程设计成绩评定

班级姓名学号

 

成绩:

分(折合等级)

 

指导教师签字年月日

目录

摘要0

引言0

第一章设计简介及方案论述1

第二章设计思路与方案1

2.1单片机总体设计思路1

2.2各功能模块程序实现原理分析2

2.3AT89C51单片机性能介绍2

第三章电子打铃系统硬件设计5

3.1系统主要硬件电路5

3.3蜂鸣器驱动模块的硬件设计7

第四章系统软件设计7

4.1系统软件设计的主要内容8

4.2主程序流程设计8

第五章系统调试与测试结果分析10

5.1系统调试10

5.2调试现象及分析10

5.3仿真结果10

第六章、心得体会12

参考文献:

12

附录:

13

 

引言

本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。

掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。

近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

学习单片机的最有效的方法就是理论与实践并重,本文用AT89C51单片机设计的一个电子打铃系统。

 

第一章设计简介及方案论述

1.作息时间控制钟系统概述:

本设计是一个具有打铃功能的作息时间控制钟。

它利用89C51单片机的2Hz时基计时,进行年历计算,并用的蜂鸣器驱动模块将它打出来;在进行时间计算,分每加一时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。

由七段显示驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成,四个按键用于报时及校正时间。

现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。

本设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。

2.设计要求:

1利用单片机组成一个电子打铃器。

2按照学校上下课铃声次序设定定时间

3用一个蜂鸣器模拟电铃,响铃10s。

4周六周日不打铃

5通过“周”“时”键和“分”键分别校正周、时和分,每按一次对应+1。

第二章设计思路与方案

2.1单片机总体设计思路

(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘,LCD或LED的显示屏;

(2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;

(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能;

(4)设计打铃执行机构,完成自动打铃功能。

2.2各功能模块程序实现原理分析

图2-1

模块组成框图如图2-1所示,该模块由蜂鸣器驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成。

且三部分都通过AT89C51来实现。

七段式数码管驱动模块

采用动态扫描方式,通过一组单片机端口驱动并联在一起的LED发光管的一端(共阴或共阳端),LED发光管的另一脚接通用I/O口,控制其亮灭。

该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

蜂鸣器驱动模块

采用压电式蜂鸣器,压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

按钮控制模块

四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。

2.3AT89C51单片机性能介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

引脚说明:

VCC:

供电电压。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

第三章电子打铃系统硬件设计

3.1系统主要硬件电路

系统主要硬件电路作为驱动整个打铃系统的电路又分为七段数码显示电路和蜂鸣器驱动电路。

由显示七段数码显示电路和蜂鸣器驱动电路组成的系统硬件主要电路如下:

图3-3:

系统主要硬件电路

该系统通过按钮控制(系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮;调整选择键SET_KEY:

P1.0通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:

P1.1按一次使选中位加1;减少键DEC_KEY:

P1.2按一次使选中位减1;如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁)AT89C51的计时和定时,在七段数码管上显示出来(实现24小时制电子钟,8位数码管显示,显示时分秒),再通过蜂鸣器(BEEP:

P3.7)来实现打铃。

3.2七段式数码管驱动模块的硬件设计

LED数码管显示器内部有七个条形发光二极管和一个小圆点发光二极管组成,其结果图如下所示:

com

A

B

C

D

E

F

G

图3-4:

七段数码显示管

因而它的控制原理和发光二极管的控制原理是相同的。

根据各管接线的形式,可分成共阴极型和共阳极型。

其八个接口对应的字形如下表:

表一:

数码管字型码表

显示字形

dp

g

f

e

d

c

b

a

共阴极字型码

共阳极字型码

0

0

0

1

1

1

1

1

1

0x3F

0xC0

1

0

0

0

0

0

1

1

0

0x06

0xF9

2

0

1

0

1

1

0

1

1

0x5B

0xA4

3

0

1

0

0

1

1

1

1

0x4F

0xB0

4

0

1

1

0

0

1

1

0

0x66

0x99

5

0

1

1

0

1

1

0

1

0x6D

0x92

6

0

1

1

1

1

1

0

1

0x7D

0x82

7

0

0

0

0

0

1

1

1

0x07

0xF8

8

0

1

1

1

1

1

1

1

0x7F

0x80

9

0

1

1

0

1

1

1

1

0x6F

0x90

A

0

1

1

1

0

1

1

1

0x77

0x88

B

0

1

1

1

1

1

0

0

0x7C

0x83

C

0

0

1

1

1

0

0

1

0x39

0xC6

D

0

1

0

1

1

1

1

0

0x5E

0xA1

E

0

1

1

1

1

0

0

1

0x79

0x86

F

0

1

1

1

0

0

0

1

0x71

0x8E

3.3蜂鸣器驱动模块的硬件设计

本设计中的蜂鸣器驱动模块用到了蜂鸣器(SPEAKER)、三极管、100欧姆的电阻。

将蜂鸣器的一段接地,另一端接三极管的发射极,三极管的基极通过100欧姆的电阻接在三极管的P3.7引脚,三极管的集电极接+5V的电源。

其电路图如下图所示:

 

图3-5:

蜂鸣器驱动电路图

 

第四章系统软件设计

软件是该LED显示屏控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。

4.1系统软件设计的主要内容

系统软件设计由三个模块编程组成:

蜂鸣器打铃编程,七段显示管显示编程,按键编程。

4.2主程序流程设计

主程序初始化,并打开中断,然后执行中断服务程序。

实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:

23-59-59(小时十位如果为0则不显示) 到预定时间启动蜂鸣器模拟打铃,蜂鸣器BEEP:

P3.7打铃方式分起床、熄灯铃和上、下课铃两种系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮 调整选择键SET_KEY:

P1.0;通过选择键选择调整位,选中位闪烁增加键ADD_KEY:

P1.1;按一次使选中位加1减少键DEC_KEY;P1.2;按一次使选中位减1,如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁。

主程序流程设计图:

图4.1

如图所示主程序开始初始化后,就跳转到中断服务程序,如正常走时,则往下进行打铃时间的比较,继续向下执行对打铃的判断程序;如不正常走时,则直接转到显示程序。

这以后,继续执行按键的检测,若有键按下,则取值打铃;反之,则返回到中断服务程序的开始继续执行。

主程序清单见附录。

第五章系统调试与测试结果分析

5.1系统调试

根据系统设计方案,本系统的调试共分为三大部分:

硬件调试,软件调试和软硬件联调。

由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:

LED驱动模块的调试,数据存储模块的调试,PC机通信模块的调试等,最后将各模块组合后进行整体测试。

5.2调试现象及分析

进入调试状态后应该在关键的地方设置断点然后按步运行,同时观察参数的变化,通过变化来判断程序运行的过程即可找出程序中混乱的部分,进行改正,这需要对软件熟练的掌握和对语言程序的很好的理解,实验板搭建成功后,我们就进入了程序的设计和调试阶段,开始编写程序时很顺利,但是后来在调试过程中出现了很多的错误,比如定时器准确度的设置,子程序的调用问题,最困难的就是对没步程序执行顺序的分析,由于程序中一些语句的错误理解和执行顺序的判断失误,让我掉进了误区,耽误了很长时间,最后在同学的帮助下终于找到了错误的关键点,更正成功了。

看来对程序的调试能力我还需要加强,程序的调试需要耐心,而且需要熟练掌握软件的跟部分功能。

5.3仿真结果

此系统的仿真效果很好,能实现设计要求和目的所规定的内容。

下面是两幅仿真结果图:

 

图5-1

图5-2

第六章、心得体会

本系统被广泛用企事业单位,设计比较简单。

经过一学期的学习,使我对单片机有了初步的认识,了解了一些软件编程的技巧。

经过这次的课程设计,使我学会了课堂上学不到的知识,颇有一番感受,对于单片机更加的了解了,对各种器件的使用方法更加熟悉,学会了电路的基本设计思路和原理,掌握单片机设计步骤,知道这门课程在工作中的重要性。

由于知识点不够精通,所以经常出现问题,在程序设计中我太过马虎,导致第一次制作出来的打铃器不正常工作,仔细检查后我发现程序有错误,然后经过仔细排查我修改了错误。

在电路调试过程中我发现了电路的一些问题,但在老师和同学们的同共努力下都得到解决,。

这些教训使我领悟到了科学是严谨的,不能有一点马虎,所以我们在对待科学的态度上应该要一丝不苟。

最终看到了成果。

另外,如果在工作中遇到困难,就要及时虚心向他人请教,提早解决问题,这样才不至于延误工作。

课程设计加深了学生对所学课程理论的理解,扩展了教学中的实验内容和要求,积累了实践体验和经验,让我们提前感受到毕业设计的大致过程,进而能顺利进入毕业设计,提高毕业设计质量和学生实际应用能力。

参考文献:

[1]《电子技术基础:

模拟部分》北京高等教育出版社康华光1999

[2]《单片机原理及接口技术》北京航空航天大学出版社李朝青2005

[3]《单片机课程设计指导》北京航空航天大学出版社楼然苗2007

[4]《单片机实验与实践教程》北京航空航天大学出版社何立民2004

 

附录:

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodesegcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0,1,2,3,4,5,6,7,8,9,-

ucharcodedispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管位选码

uintcodexshijianbiao[]={10500,75000,80000,84500,85500,94000,100000,104500,105500,114000,150000,154500,155500,164000,165000,173500,193000,213000};//夏季时间

uintcodedshijianbiao[]={11000,75000,80000,84500,85500,94000,100000,104500,105500,114000,143000,151500,152500,160500,161500,170000,190000,210000};//冬季时间

ucharbuffer[]={1,1,0,0,0,0,0,0};

uintzhou,hour,min,sec,shijian;

uintstatus;

sbitspot=P0^7;

sbitled=P3^7;

sbitdxxz=P1^0;

//函数声明

voiddelayMS(uintt);

voidkeyprocess(unsignedcharkey);

voiddisplay();

voidtimer0();

voidshanl();

//延时函数

voiddelayMS(uintt)//晶振频率12M

{

uinti;

while(t--)

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

}

//比较打铃函数

voidcompare()

{

uinti;

shijian=hour*10000+min*100+sec;

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

{

if(dxxz==1)

{

if(dshijianbiao[i]==shijian&&zhou!

=6&&zhou!

=7)

{

uinti;

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

{

display();

led=0;

delayMS(20);

led=1;

}

}

}

else

{

if(xshijianbiao[i]==shijian&&zhou!

=6&&zhou!

=7)

{

uinti;

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

{

display();

led=0;

delayMS(20);

led=1;

}

}

}

}

}

//按键处理函数

voidkeyprocess(unsignedcharkey)//键值处理,正常计时,设置时分秒

{

switch(key)

{

case0xB0:

if(zhou<7)

zhou++;

elsezhou=1;

break;

case0xe0:

if(hour<23)

hour++;//小时加1

elsehour=0;break;

case0xd0:

if(min<59)min++;

//分钟加1

elsemin=0;break;

break;

default:

break;

}

}

//数码管显示函数

voiddisplay()

{

uchari;//正常计时显示

buffer[0]=zhou;

buffer[1]=hour/10;//显示时的十位

buffer[2]=hour%10;//显示时的个位

buffer[3]=min/10;//显示分的十位

buffer[4]=min%10;//显示分的个位

buffer[6]=sec/10;//显示秒的十位

buffer[7]=sec%10;//显示秒的个位

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

{

if(i==0||i==2||i==4)

{

P0=segcode[buffer[i]];//赋于段选值

{

if(sec%2==0)

spot=0;

else

spot=1;

}

P2=dispbit[i];//赋于位选值

}

else

{

P0=segcode[buffer[i]];

P2=dispbit[i];

}

delayMS

(1);//防止数码管显示的时候闪动

P2=0x0;

}

}

//定时器0中断函数

voidtimer0()interrupt1using2

{

staticuintcount;

TH0=(65536-1000)/256;//定时器0设置初始值1ms中断初始值

TL0=(65536-1000)%256;

TR0=1;

count++;//正常计时

if(count>=1000)//定时1S到,以下为时钟的正常走钟逻辑

{

count=0;

sec++;

if(sec>=60)

{

sec=0;

min++;

if(min>=60)

{

min=0;

hour++;

if(hour>=24)

{

hour=0;

zhou++;

if(zhou>=7)

{

zhou=1;

}

}

}

}

}

}

main()//主函数

{

bitkeyrelease;

ucharbuf;

ucharkeyinput;

keyrelease=1;

buf=0xff;

TMOD=0x01;//T0工作在方式1,16位计数器

TH0=(65536-1000)/256;//定时器0设置延时1ms中断初始值

TL0=(65536-1000)%256;

TR0=1;

IE=0x82;//开定时器0中断

status=0;

while

(1)

{//键扫描程序

P2=dispbit[1];

keyinput=P1&0xf0;

if(keyinput!

=0xf0)

{

delayMS(10);

if(keyinput!

=0xf0)

{

if(keyrelease==1)

{

keyrelease=0;

buf=keyinput;//buf用来暂时存放键值

}

}

else

{

keyrelease=1;

keyprocess(buf);//调用按键处理函数

buf=0xff;

}

}

else

{

keyrelease=1;

keyprocess(buf);

buf=0xff;

}

display();

compare();

}

}

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

当前位置:首页 > 小学教育 > 语文

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

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