当前位置:文档之家› 定时闹钟设计(1)

定时闹钟设计(1)

定时闹钟的设计学生姓名:学生学号:指导教师:所在学院:专业班级:中国·2014年 6 月信息技术学院课程设计任务书信息技术学院院专业级,学号姓名一、课程设计课题:定时闹钟的设计二、课程设计工作日自 2014 年 6 月 15 日至 2014 年 7 月 1 日三、课程设计进行地点:四、程设计任务要求: (详细内容见课程设计文档)1.课题来源:指导老师下发2.目的意义:此次设计的目的是培养同学们系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力,以及一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;通过完成所选题目的分析与设计,达到技术性能要求。

3.基本要求:设计基于单片机的定时闹钟,可以实现时分秒的显示、以及定时等基本功能。

能够设定定时时间,并实现修改定时的功能。

定时时间到应能发出报警声。

课程设计评审表目录1 设计任务要求…………………………………………………….………2 方案设计………………………………………………………….………3 单元电路设计…………………………………………………….………4 元件选择(要求计算元件参数)………………………………….………5 整体电路(标出原元件型号和参数、画出必要波形图)………………6 说明软件程序设计……………………………………………………….7 困难问题及解决措施…………………………………………….………8 总结与体会……………………………………………………………….9 致谢……………………………………………………………….………10参考文献……………………………………………………….………...1. 设计要求1.1 目的:此次设计的目的是培养同学们系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力,以及一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;通过完成所选题目的分析与设计,达到技术性能要求。

1.2 要求:(1)设计基于单片机的定时闹钟,可以实现时分秒的显示、以及定时等基本功能。

(2)能够设定定时时间,并实现修改定时的功能。

(3)定时时间到应能发出报警声。

1.3 规定:设计硬件线路,用protel画图。

按单元电路详细说明硬件线路设计思路,元件参数,选取根据。

附详细的元件清单。

总结设计过程和设计体会。

1.4 内容:这一次课程设计,所设计的是一个定时闹钟,能显示时-分-秒,能够设计定时时间,修改定时时间,并且定时时间到了能发出报警声。

设计的部分分为软件及硬件,软件部分写出闹钟的工作方式以及它是如何工作的,而硬件部分是软件的载体,画出正确的电路图然后在软件的控制下才能使设计的定时闹钟正常工作。

1.5 完成时间:3周。

2. 设计方案原理图时钟继续运行3. 各部分电路设计3.1 主电路主电路主要就是芯片的运行,加载程序后,在外部时钟的作用下,将按照程序运行,从而可以实现设计的要求,进行时钟时间和定时时间的调整,并且能够在到达定时时间后控制蜂鸣器发出声响。

图1 主电路3.2显示电路显示电路即可以让我们看到时间的调整和定时时间的调整,显示调整后的时间。

图2显示电路3.3 内部时钟方式的电路单片机内部有一个用于构成振荡器的高增益反向放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。

时钟频率可以影响单片机的速度。

单片机的各功能部件的运行都以时钟控制信号为基准图3 内部时钟方式的电路3.4按键及蜂鸣器电路按键可以对时间进行调整,蜂鸣器可以在到达定时的时间时提醒我们。

图4 按键及蜂鸣器电路4. 元件选择4.1 芯片AT89C52AT89C52 是ATMEL公司生产的低电压,高性能CMOS单片机. AT89C52 提供以下标准功能:8字节FLASH闪速存储器,256字竹内部RAM , 32个I/O口线,3个16 位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89c52可降至OHz的静态逻辑操作,并支持两种软件可选的节电上作模式。

空闲方式停止CPU 的工作,但允许RAM,定时/计数器.串行通信口及中断系统继续工作。

掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位.4.2 LCD显示屏1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点。

晶模块内部的控制器共有11条控制指令,如表所示:表3-1:控制命令表指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移S: 屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效。

指令4:显示开关控制。

D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。

指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示F:低电平时显示5×7的点阵字符。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

4.3蜂鸣器有源蜂鸣器是一种一体化结构的电子讯响器,是内部自带振荡电路,只需电平驱动就可以发生的蜂鸣器,而与其对应的无源蜂鸣器内部则无振荡电路。

5. 整体电路图见附图。

6. 软件程序设计#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table1[]="00:00:00";sbit lcden=P2^6 ;//位定义sbit lcdrw=P2^5;sbit lcdrs=P2^4;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit beep=P3^7;//定义蜂鸣器uchar num,count,s1num;//显示的位数;响应中断数;按键次数;uint i;char shi,fen,miao,shi1,fen1,miao1;void delay(uint z)//延时程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com)//控制指令{lcdrs=0; //低电平时选择指令寄存器lcdrw=0;// 低电平时进行写操作delay(5);lcden=1; //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令P0=com;delay(5);lcden=0;}void write_data(uchar date)//数据指令{lcdrs=1;lcden=1; //均为高时是读出数据的内容delay(5);P0=date;delay(5);lcden=0;}void init()//初始化{lcdrw=0;lcden=0;delay(15);write_com(0x38);//设置为4位总线,单行显示delay(5);write_com(0x38);delay(5);write_com(0x38);write_com(0x38);//重复多次以确定可以正确设置write_com(0x08);//无光标正常显示write_com(0x01);//清显示write_com(0x06);//光标和显示模式设置 d1 I/D:光标移动方向,高电平右移 d0 S:屏幕上所有文字是否左移或者右移。

低电平表示光标闪烁 write_com(0x0c);// 显示开关控制。

d2 D:控制整体显示的开与关,高电平表示开显示 d1 C:控制光标的开与关,低电平表示无光标 B:控制光标是否闪烁,低电平不闪烁write_com(0x80+1);d7为高时,显示数据存储地址TMOD=0x11;工作方式3TH0=(65536-50000)/256;//定时时间为50msTL0=(65536-50000)%256;EA=1;//开总中断ET0=1;//打开定时器TR0=1;//启动定时器write_com(0x80+4);//秒的设定for(num=0;num<8;num++){write_data(table1[num]);delay(20);}write_com(0x80+0x40+4);for(num=0;num<8;num++){write_data(table1[num]);delay(20);}}void write_sfm(uchar add,uchar date)//调整时间{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);//控制指令,0x40:字符发生器RAM地址设置进行加write_data(0x30+shi);//数据指令,功能设置命令 d4 DL:高电平时为4位总线 d3 N:低电平时单行显示 d2 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

write_data(0x30+ge);}void write_shedingsfm(uchar add1,uchar date1)//设定定时时间{uchar shi1,ge1;shi1=date1/10;ge1=date1%10;write_com(0x80+add1);//控制指令write_data(0x30+shi1);write_data(0x30+ge1);}void keyscan(){if(s1==0){delay(5);if(s1==0){s1num++;while(!s1);//s1按下}}if(s1num==1)//按下次数{TR0=0;//停止定时器工作write_com(0x80+0x40+11);//调整时间设置,控制秒设定write_com(0x0f); //d3 显示开关控制。

d2 D:控制整体显示的开与关,高电平表示开显示 d1 C:控制光标的开与关,高电平表示有光标d0 B:控制光标是否闪烁,高电平闪烁}if(s1num==2){write_com(0x80+0x40+8);//控制分钟设定write_com(0x0f);//控制光标闪烁}if(s1num==3){write_com(0x80+0x40+5);//控制时设定write_com(0x0f);}if(s1num==4){TR0=1;//启动定时器,定时时间的设定write_com(0x80+11);//控制秒的设定write_com(0x0f);//光标显示}if(s1num==5){write_com(0x80+8);//定时分钟的设定write_com(0x0f);}if(s1num==6){write_com(0x80+5);//定时时的显示write_com(0x0f);}if(s1num==7){s1num=0; // 按键次数清零write_com(0x0c);//显示此时为无光标状态 }if(s1num!=0)//有按键时{if(s2==0){delay(5);if(s2==0){while (!s2);if(s1num==1){miao++;if(miao==60){miao=0;}write_sfm(10,miao)//第10位进行秒的设定write_com(0x80+0x40+11);//控制秒的设定}if(s1num==2){fen++;if(fen==60){fen=0;}write_sfm(7,fen);write_com(0x80+0x40+8);}if(s1num==3){shi++;if(shi==24){shi=0;}write_sfm(4,shi);write_com(0x80+0x40+5);}if(s1num==4){TR0=1;//定时器启动miao1++;if(miao1==60){miao1=0;}write_shedingsfm(10,miao1);write_com(0x80+11);}if(s1num==5){fen1++;if(fen1==60){fen1=0;}write_shedingsfm(7,fen1);write_com(0x80+8);}if(s1num==6){shi1++;if(shi1==24){shi1=0;}write_shedingsfm(4,shi1);write_com(0x80+5);}}}}if(s3==0){delay(5);if(s3==0){while (!s3);if(s1num==1){miao--;if(miao==-1){miao=59;}write_sfm(10,miao);write_com(0x80+0x40+11);}if(s1num==2){fen--;if(fen==-1){fen=59;}write_sfm(7,fen);write_com(0x80+0x40+8);}if(s1num==3){shi--;if(shi==-1){shi=23;}write_sfm(4,shi);write_com(0x80+0x40+5);}if(s1num==4){TR0=1;miao1--;if(miao1==-1){miao1=59;}write_shedingsfm(10,miao1);write_com(0x80+11);}if(s1num==5){fen1--;if(fen1==-1){fen1=59;}write_shedingsfm(7,fen1);write_com(0x80+8);}if(s1num==6){shi1--;if(shi1==-1){shi1=23;}write_shedingsfm(4,shi1);write_com(0x80+5);}}}}void main()//主函数{init();//初始化函数while(1){keyscan();//键盘扫描if(count==20)//响应中断20次,时间1s{count=0;//清零miao++;//秒加1if(miao==60)//60秒时分加1{miao=0;fen++;if(fen==60)//60分时时加1{fen=0;shi++;if(shi==24)//24时时时全为0,从00:00:00开始计时{shi=0;}write_sfm(4,shi);//修改时}write_sfm(7,fen);//修改分}write_sfm(10,miao);//修改秒if((shi==shi1)&&(fen==fen1)&&(miao==miao1))//蜂鸣器电路的运行{for(i=0;i<10;i++){beep=0;//蜂鸣器响delay(50);beep=1;delay(50);}}}}}void timer0() interrupt 1//中断函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}8. 总结与体会8.1 设计过程中遇到的问题及解决方法在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;(1).做实物时无法驱动数码管显示,后来了解到可以加锁存器,如74LS253,74LS573等等,还可以加三极管用来加大电流。

相关主题