基于单片机控制电铃设计.docx

上传人:b****9 文档编号:26288268 上传时间:2023-06-17 格式:DOCX 页数:25 大小:786.16KB
下载 相关 举报
基于单片机控制电铃设计.docx_第1页
第1页 / 共25页
基于单片机控制电铃设计.docx_第2页
第2页 / 共25页
基于单片机控制电铃设计.docx_第3页
第3页 / 共25页
基于单片机控制电铃设计.docx_第4页
第4页 / 共25页
基于单片机控制电铃设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于单片机控制电铃设计.docx

《基于单片机控制电铃设计.docx》由会员分享,可在线阅读,更多相关《基于单片机控制电铃设计.docx(25页珍藏版)》请在冰豆网上搜索。

基于单片机控制电铃设计.docx

基于单片机控制电铃设计

 

单片机原理与应用

综合实验报告

基于单片机控制的电铃控制器

专业班级:

电子信息工程

姓  名:

胡俊_

学号:

时间:

2014.10.30

指导教师:

左敬龙

 

2014年10月30日

 

电铃控制器设计任务书

1.设计目的与要求

设计出一个用于电铃控制器。

准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:

(1)基本功能

1)显示:

可以显示星期、时、分和秒。

2)打铃:

每天可设置20次,打铃持续时间每次1-90秒可调,每次打铃的间隔时间1-99分钟可调。

3)铃声:

内置蜂鸣器可以发出监控声音。

(2)性能:

时间日误差<1.5秒。

(3)扩展功能

1)可设定单/双休息日不打铃。

2)随季节变化,每天自动调整开与关的时间。

2.设计内容

写出实现该功能的C语言编程,并在KILE软件上仿真,并产生hex文件,通过软件把该程序写入单片机开发板,验证是否实现该功能

3.编写设计报告

写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩

在规定时间内,完成叙述并回答问题。

 

1引言………………………………………………………………………………….…1

2总体设计方案……………………………………………………………………….…1

2.1设计思路………………………………………………………………………….…1

2.2设计方案……………………………………………………………………….…2

3程序流程图框……………………………………………………………………….…2

3.1总体程序流程图框…………………………………………………………….……2

3.2时钟打铃程序流程图框…………………………………………………….……3

4设计原理分析…………………………………………………………………….……4

4.1时钟电路的设计……………………………………………………………….……4

4.2控制电路的原理………………………………………………………………….……4

4.3显示电路的原理……………………………………………………………………………5

总结与体会………………………………………………………….…………….….5

参考文献…………………………………………………………......………………….……6

附录1效果图……………………………………………………………………….……7

附录2C语言程序…………………………………………………………………………8

 

电铃控制器

摘要:

该设计介绍了一种以AT89S51单片机为核心,以七段数码管显示星期;时;分钟和秒,发光二极管作为指示灯标志及按键校时定时的自动打铃控制器。

关键词:

单片机;数码管;电铃;定时;74LS245

1引言

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

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

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

学习单片机的最有效的方法就是理论与实践并重。

打铃器由AT89S51及其它器件组成,采用按键控制调时和定时等功能,用7个数码管来分别显示星期、时、分和秒.用5V直流电源,可以设定20多个打铃时间点。

以AT89S51为核心的单片机控制.主要作用:

解除作息管理麻烦、改变人工打铃、人工控制电器落后现象,实行电铃周期性工作的自动化控制.同时设有数字显示器及控制系统体积小,重量轻等优点。

充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点,充分发挥了单片机的控制优势。

2总体设计方案

2.1设计思路

 

图1设计思路框图

电铃控制器设计要求具有显示星期、时、分和秒以及设定时间和调整时间等功能,这些基本要求都可以通过软件编程实现。

要实现打铃提示,就需要设置打铃提示电路,

信号输入电路采用按钮开关。

设计思路框图如图1所示。

2.2方案论证

根据设计任务的基本要求,设计了由单片机(AT89S51)作为主控器件,七段数码管作为显示路,七个按键组成的按键操作电路,以及三极管、蜂鸣器组成的报警提示

电路构成的自动打铃器。

时钟电路的构成由单片机及其定时器完成,时间显示电路则由单片机串口输出,最后由七段数码管显示出来。

控制电路主要控制着复位电路、校时以及设置打铃点等操作。

显示电路采用串行静态显示,这种软件编程比较简单。

采用单片机内部时钟,这种方法产生的时钟还可以,但是成本低,而且编写时钟程序简单。

打铃电路电路可以采用蜂鸣器代替电铃,当时间到达打铃时间点时,使单片机发出控制信号,可以直接驱动三极管组成的基本放大电路,使蜂鸣器发出声音。

设计方框图如图2所示

 

图2设计方框图

3程序流程图框

3.1总体程序流程图

根据硬件设计结果,为满足要求,程序应有主程序、按键处理程序、中断服务程序和显示程序等部分构成。

主程序中主要是程序各部分的初始化;按键处理程序处理六个按键的操作,包括各个按键的响应程序以及按键指示、报警输出等;显示程序显示星期、时、分、秒,主要是时钟显示。

总程序流程图如图3所示

 

图3总程序流程图

3.2时钟打铃程序流程图

时钟打铃程序使用单片机T0、T1两个定时器中断,两个定时器均为方式一,当定时器T0溢出时响应中断,使毫秒单元加1,当毫秒单元满20时分单元加1,依此类推。

当定时器T1溢出时响应中断,依次比较存储的打铃点,条件符合就输出打铃信号。

中断均需保护现场,返回时恢复现场。

时钟打铃程序流程图如图4所示

 

N

Y

 

N

Y

N

Y

N

Y

N

Y

 

图4时钟打铃程序流程图

4设计原理分析

4.1时钟电路的原理

采用定时器/计数器T0的方式1,由于晶振是11.0592,令TH0=(65536-46080)/256;TL0=(65536-46080)%256,故所记次数应为46080,计时器每隔50000微秒发起一次中断。

为了方便设计每20毫秒使得时钟加一秒,每60秒加一分钟,每60分加一个小时,每24个小时加一天。

4.2控制电路的原理

控制电路采用矩阵式键盘,当无按键动作时,行线处于高电平而列线处于低电平,当有按键按下时,则对应的行线和列线短接,行线电平变为低电平,以此知道有那个按键被按下了。

为了能够通过按键控制电路的运行,通过C语言编程使得S0-S9为数据输入键,S12为定时键(当按下是可以通过S0-S9设定响铃时间),S13为确定键,S11为返回键,通过上述的按键设定响铃时间,设定的数据暂时保存在锁存器中,当设定的时间与时钟电路的时间一致时,蜂鸣器响。

矩阵式电路如下图

4.3显示电路的原理

为了能显示星期、时、分、秒,需要7个数码显示管,其中6个显示管可以通过按键改变显示以显示定时时间。

5结束语

在这课程设计中,我学到了很多课堂上学不到的东西,也深刻的体验到了实践的重要性。

只学习理论而不实践,那理论就是一具空壳。

只有实践才能检验自己所学的理论知识。

实践的好处就在于能帮助你去更好地理解理论知识,平时课堂上不理解的东西,在实践的过程中就能很好的理解。

虽然这次课程设计上机调试没有成功,但是我自己毕竟努力做了。

参考文献

[1]阎石.数字电子技术基础(第三版)[M].:

高等教育,1989

[2]蔡振江.单片机原理及应用.:

电子工业,2007年2月,第1版

[3]童诗白,华成英.模拟电子技术基础.:

高等教育,2001年,第3版

[4]李朝青.单片机原理及接口技术[M].:

航空大学,2005年,第3版

[5]万光毅.单片机实验与实践教程.:

航空航天大学,2006年,第2版

[6]周航慈.单片机应用程序设计基础[M].:

电子工业,1997年7月

[7]朱承高.电工及电子技术手册[M].:

高等教育,1990

[8]廖常初.现场总线概述[J].电工技术,1999.6

 

附录效果图

 

C语言程序

#include

#defineucharunsignedchar

sbitdula=P2^6;

sbitwela=P2^7;

sbitbeep=P2^3;

unsignedcharj,k,a1,a0,b1,b0,c1,c0,ho=1,s,f,m,key=10,temp,qq;

ucharshi20,shi10,fen20,fen10,miao20,miao10,miao30,ok=1,wei,dingshi,change,yidingshi;

ucharbaoshi,baoshijieshu;

unsignedintpp;

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

voiddelay(unsignedchari)

{

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

voiddisplay(ucharshi2,ucharshi1,ucharfen2,ucharfen1,ucharmiao2,ucharmiao1,ucharmiao3)

{

dula=0;

P0=table[miao3];

dula=1;

dula=0;

wela=0;

P0=0x7f;

wela=1;

wela=0;

delay(5);

dula=0;

P0=table[shi2];

dula=1;

dula=0;

wela=0;

P0=0xfe;

wela=1;

wela=0;

delay(5);

P0=table[shi1]|0x80;

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay(5);

P0=table[fen2];

dula=1;

dula=0;

P0=0xfb;

wela=1;

wela=0;

delay(5);

P0=table[fen1]|0x80;

dula=1;

dula=0;

P0=0xf7;

wela=1;

wela=0;

delay(5);

P0=table[miao2];

dula=1;

dula=0;

P0=0xef;

wela=1;

wela=0;

delay(5);

P0=table[miao1];

dula=1;

dula=0;

P0=0xdf;

wela=1;

wela=0;

delay(5);

}

voidkeyscan0()

{

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xbb:

ok=0;

change=1;

break;

case0x7b:

ok=1;

change=0;

dingshi=0;

break;

}

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:

ok=0;

dingshi=1;

break;

case0xd7:

yidingshi=0;//取消定时

break;

}

}

}

}

 

voidkeyscan()

{

{

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

key=0;

wei++;

break;

case0xde:

key=1;

wei++;

break;

case0xbe:

key=2;

wei++;

break;

case0x7e:

key=3;

wei++;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

beep=0;

}

beep=1;

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

key=4;

wei++;

break;

case0xdd:

key=5;

wei++;

break;

case0xbd:

key=6;

wei++;

break;

case0x7d:

key=7;

wei++;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

beep=0;

}

beep=1;

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

key=8;

wei++;

break;

case0xdb:

key=9;

wei++;

break;

}

while(temp!

=0xf0)

{

temp=P3;

temp=temp&0xf0;

beep=0;

}

beep=1;

}

}

}

}

voidmain()

{

TMOD=0x01;

TH0=(65536-46080)/256;//由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。

TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12

ET0=1;

EA=1;

while

(1)

{keyscan0();

if(ok==1)

{TR0=1;

wei=0;

if(pp==20)

{pp=0;

m++;

if(m==60)

{

m=0;

f++;

if(f==60)

{

f=0;

s++;

if(s==24)//为24h一个循环,若要12h,只需在此改为12即可。

{

s=0;

ho++;

if(ho==7)//为7天一个循环

{

ho=1;

}

}

}

}

}

a0=s%10;

a1=s/10;

b0=f%10;

b1=f/10;

c0=m%10;

c1=m/10;

display(a1,a0,b1,b0,c1,c0,ho);

}

else

{

if(change==1)

{TR0=0;

keyscan();

if(key!

=10)

{

switch(wei)

{

case1:

if(key<3)//小时最高位为2

a1=key;

else

wei--;

break;

case2:

if(a1==1|a1==0)

a0=key;

else

if(key<5)

a0=key;//当小时最高位为2时,低位最高为4

break;

case3:

if(key<6)//分钟最高位为5

b1=key;

else

wei--;

break;

case4:

b0=key;break;

case5:

if(key<6)//秒最高位为5

c1=key;

else

wei--;

break;

case6:

c0=key;break;

}

key=10;

}

m=c1*10+c0;

f=b1*10+b0;

s=a1*10+a0;

display(a1,a0,b1,b0,c1,c0);

}

if(dingshi==1)

{

TR0=0;

display(shi20,shi10,fen20,fen10,miao20,miao10);

keyscan();

if(key!

=10)

{

switch(wei)

{

case1:

if(key<3)//小时最高位为2

shi20=key;

else

wei--;

break;

case2:

if(a1==1|a1==0)

shi10=key;

else

if(key<5)

a0=key;//当小时最高位为2时,低位最高为4

break;

case3:

if(key<6)//分钟最高位为5

fen20=key;

else

wei--;

break;

case4:

fen10=key;break;

case5:

if(key<6)//秒最高位为5

miao20=key;

else

wei--;

break;

case6:

miao10=key;break;

}

key=10;

}

yidingshi=1;

display(shi20,shi10,fen20,fen10,miao20,miao10,miao30);

}

}

if(yidingshi==1)

{

if((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10)&&(c1==miao20)&&(c0==miao10))

beep=0;

}

if(((a1==shi20)&&(a0==shi10)&&(b1==fen20)&&(b0==fen10+1)&&(c1==miao20)&&(c0==miao10))||(yidingshi==0))//一分钟报时提示

beep=1;

}

}

voidtime0()interrupt1

{TH0=(65536-46080)/256;

TL0=(65536-46080)%256;

pp++;

}

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

当前位置:首页 > 成人教育 > 专升本

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

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