当前位置:文档之家› 打铃器清单 原理图及程序

打铃器清单 原理图及程序

单片机项目——打铃器设计朱琳指导老师:张小明老师班级:09信息一班目录1………………………………………摘要2……………………………………任务3……………………….......硬件图及其设计说明4………………………..使用说明5…………………….结束语6…………….致谢摘要本设计是采用单片机技术的打铃器,目前以单片机技术的应用为核心的产品种类非常丰富。

应用我们所学过的知识和查阅相关资料,我制作了这个单片机技术为基础的打铃器,这是一个简单的实用的单片机电子设计产品。

我们通过书本上的知识,再通过每一次上课张老师让我们独立完成自己的项目,自己动脑筋,自己解决。

实在没办法的,可以请教张老师指点1,2 在一个半月里的努力与奋斗,有了今天的成果,之前我都没想到我会完成这个任务的。

本打铃器设计是以单片机技术为核心,采用了中小规模集成度的单片机制作的功能较为完善的电子闹钟。

硬件设计应用了成熟的数字钟电路的基本设计方法以,并详细介绍了系统的工作原理。

硬件电路中使用了除AT89C52外,另外还有LCD、晶振、电阻、电容、发光二极管、开关、喇叭等元件。

在硬件电路的基础上,软件设计按照系统设计功能的要求,运用所学的C语言,实现的功能包括‘时时-分分’显示、可设置多组时间、定时时间到能发出10秒的报警声。

整体进行仿真并调试构成了整个完整的打铃器的设计。

最后通过反复的林洋板的实际烧片仿真,该系统能够实现所有要求的功能包括:(1)能显示‘时时-分分’。

(2) 可设置多组时间(3)定时时间到蜂鸣器能发出铃声。

当然这个系统仍然是属于比较简单的单片机应用系统,要设计功能更强的更复杂的系统还需要我进一步的学习。

任务1.1设计任务1、设计一个打铃器程序2、先通过keil软件仿真。

3、再根据原来的程序基础上对硬件进行仿真4、然后通过修改程序把它移到林洋开发板上5、最后通过实验进行对打铃器的功能添加与修改。

6、写出完整的设计任务书:课题的名称、系统的功能、硬件原理图、程序清单;1.2设计目的(1)巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;(3)针对课题设计方案的分析、选择、比较、熟悉单片机所用系统开发、研制的过程,软硬件设计的方法、内容及步骤;(4)掌握打铃器的工作原理。

硬件图及其设计说明1.闹钟元件清单1 30pF电容2个7 导线若干2 CRYSTAL1个8 蜂鸣器1个3 10K电阻1个9 数码管1个4 10UF电解电1个10 接地线2个容5 RESPACK-82个11 万能板1个6 AT89C521个2.设计说明3.1 AT89C52单片机简介AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8K bytes 的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

1. C1和C2取30pF 目的是可以稳定频率并对频率有微调作用2. 51单片机内部有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端XTAL2,在两端接晶振及两个电容,目的可以构成稳定的自激振荡器。

3.上电自动复位是在加电瞬间通过电容充电来实现的,在通电瞬间,电容C3通过电阻R11充电,RST端出现高电平而实现复位。

4.BUZ1是蜂鸣器接在P1.5端程序设计及其设计说明 //头文件:#include "reg51.h"//变量定义:unsigned char dispbitcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共阳数码管 0-9unsigned char ly_tt=0; //作为计数时间量unsigned char ly_miao=55; //秒unsigned char ly_fen=59; //分unsigned char ly_shi=7; //时unsigned char i,k;//引脚定义:sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)sbit sound = P1^5;//函数声明:void display(unsigned char shi,unsigned char fen);//定义显示函数,参数为显示时分void delay(void);void init(); //初如化函数void sounder();//主函数,C语言的入口函数:void main(){init(); //初始化中断控制寄存器while(1){if(ly_tt==20){ //20*50ms为1秒ly_tt=0;ly_miao++;if(ly_miao==60){ly_miao=0;ly_fen++;if(ly_fen==60){ //满60分清0ly_fen=0;ly_shi++;if(ly_shi==24)//满24小时清0ly_shi=0;}}}display(ly_shi,ly_fen); //显示变量内容if((ly_shi==8&&ly_fen==0&&ly_miao==0)||(ly_shi==8&&ly_f en==02&&ly_miao==0)||(ly_shi==8&&ly_fen==55&&ly_miao==0)|| (ly_shi==9&&ly_fen==40&&ly_miao==0)||(ly_shi==9&&ly_fen==5 5&&ly_miao==0)||(ly_shi==10&&ly_fen==40&&ly_miao==0)||(ly_ shi==10&&ly_fen==50&&ly_miao==0)||(ly_shi==11&&ly_fen==35& &ly_miao==0)||(ly_shi==14&&ly_fen==00&&ly_miao==0)||(ly_shi==14&&ly_fen==45&&ly_miao==0)||(ly_shi==14&&ly_fen==55&&l y_miao==0)||(ly_shi==15&&ly_fen==40&&ly_miao==0)||(ly_shi= =15&&ly_fen==55&&ly_miao==0)||(ly_shi==16&&ly_fen==40&&ly_ miao==0)||(ly_shi==16&&ly_fen==50&&ly_miao==0)||(ly_shi==1 7&&ly_fen==35&&ly_miao==0))sound=0;if(ly_shi==8&&ly_fen==0&&ly_miao>=10)||(ly_shi==8&&ly_fen= =02&&ly_miao>=10)||(ly_shi==8&&ly_fen==55&&ly_miao>=10)||( ly_shi==9&&ly_fen==40&&ly_ly_miao>=10)||(ly_shi==9&&ly_fen ==55&&ly_ly_miao>=10)||(ly_shi==10&&ly_fen==40&&ly_ly_miao >=10)||(ly_shi==10&&ly_fen==50&&ly_ly_miao>=10)||(ly_shi== 11&&ly_fen==35&&ly_ly_miao>=10)||(ly_shi==14&&ly_fen==00&& ly_ly_miao>=10)||(ly_shi==14&&ly_fen==45&&ly_ly_miao>=10)| |(ly_shi==14&&ly_fen==55&&ly_ly_miao>=10)||(ly_shi==15&&ly _fen==40&&ly_miao>=10)||(ly_shi==15&&ly_fen==55&&ly_ly_mia o>=10)||(ly_shi==16&&ly_fen==40&&ly_ly_miao>=10)||(ly_shi= =16&&ly_fen==50&&ly_ly_miao>=10)||(ly_shi==17&&ly_fen==35& &ly_ly_miao>=10))sound=1;}}//初始化函数void init(){ly_tt=0;TMOD=0X01; //设置定时器1为模式一,即16位计算模式TH0=(65536-50000)/256; //给计数寄存器赋值,50毫秒时间TL0=(65536-50000)%256;EA=1; //开启总中断ET0=1; //开启定时器0中断TR0=1; //启动定时器}//中断函数,关键字"interrupt" ,这是C语言的中断函数表示法,1表时定地器0void timer() interrupt 1{TH0=(65536-50000)/256; //重新赋值TL0=(65536-50000)%256;ly_tt++; //50毫秒计数}//显示函数,参数为显示内容,只显示两位数void display(unsigned char shi,unsigned char fen){SMG_q=0; //选择千位数码管,在这里显示的是小时的十位P0=dispbitcode[shi/10]; //delay(); //P0=0XFF; //SMG_q=1; //SMG_b=0; //选择百位数码管,在这里显示的是小时的个位P0=dispbitcode[shi%10];if(ly_tt>=10)P0&=0x7f; //小数点以半秒的时间闪烁delay(); //P0=0XFF; //SMG_b=1; //SMG_s=0; //选择十位数码管,在这里显示的是分的十位P0=dispbitcode[fen/10]; //delay(); //P0=0XFF; //SMG_s=1; //SMG_g=0; //选择个位数码管,在这里显示的是分的个位P0=dispbitcode[fen%10]; //delay(); //P0=0XFF; //SMG_g=1; //}void delay(void){unsigned char i=10;while(i--);}使用说明按下林洋开发板的电源按钮,数码管显示当前设置时间。

相关主题