基于单片机的定时闹钟设计报告_第1页
基于单片机的定时闹钟设计报告_第2页
基于单片机的定时闹钟设计报告_第3页
基于单片机的定时闹钟设计报告_第4页
基于单片机的定时闹钟设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 电子系统设计(单片机)课程设计总结报告题目:定时闹钟 院(系)名 称:信息与通信工程学院班 级:20130815学 生 姓 名:唐学远 学 生 学 号:2013081520指 导 教 师:蒋伊琳 哈尔滨工程大学2016年6月一、 研究意义和实现功能指标以单片机为核心的数字时钟是很有社会意义和社会价值的。钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等功能。二、 总体设计方案本LCD定时闹钟,是以单片机及外围接口电路为核心硬件,辅以其他外围硬件电路,用汇编语言

2、设计的程序来实现的。根据C51单片机的外围接口特点扩展相应的硬件电路,然后根据单片机的指令设计出数字钟相应的软件,再利用软件执行一定的程序来实现数字钟的功能。由于采用集成芯片性的单片机来制作电子钟,这样设计制作简单而且功能多、精确度高,也可方便扩充其他功能,实现也十分简单。本设计是利用AT89C51单片机为主控芯片,由LCD、晶振、电阻、电容、发光二极管、开关、喇叭、被控电器等元件组成硬件电路,通过编写软件程序来实现和控制的数字定时闹钟AT89C51震荡电路调时电路喇叭LCD片选代码三、 硬件实现 1、时钟电路AT89C51系列的单片机的时钟方式分为内部方式和外部方式。内部方式就是在单片机的X

3、TAL1和XTAL2的两引脚外接晶振,就够成了自激振荡器在单片机内部产生时钟脉冲信号。外部时钟方式是把外部已经有的时钟信号引入到单片机内部。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间。本LCD电子闹钟设计是采用内部时钟方式,用一个10MHz晶振和两个30Pf瓷片电容组成,为单片机提供标准时钟,其中两个瓷片电容起微调作用.其电路图见图3.2。2、 lcd显示电路本设计采用了型号为1

4、602的 LCD。LCD有LED数码显示更好的更的直观效果,也更加经久耐用。液晶显示模块体积小功耗低、显示内容丰富,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件之一了。本LCD是2行16列液晶 可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚). 该模块也可只用表3.1 LCD显示屏引脚说明编号符号引脚说明编号符号引脚说明1VCC电源地9D2双向数据口2VDD电源正极10D3双向数据口3VL对比度调节11D4双向数据口4RS数据/命令选择12D5双向

5、数据口5R/W读/写选择13D6双向数据口6E模块使能端14D7双向数据口7D0双向数据口15BLK背光源地8D1双向数据口16BLA背光源正极D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。VDD:电源正极,4.55.5V,通常使用5V电压;VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度或者直接串接一个电阻到地;RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平;R/W:读写控制端。R/W为高电平

6、时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。D0D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4D7接口传送数据。本充电器就是采用4位数据传送方式;BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右;BLK: LED背光地端。 3、按键电路本实验用4个按键来调节设置时间,和闹钟,一个复位开关来复位程序,按下为低电平,松手时按键自动弹起,为高电平,来给单片机指令。 4、总电路图四、 软件实现1、本LCD电子闹钟的的主程序流程图

7、如图所示: 初始化主程序开始 扫描按键设置响铃方式显示闹钟时间设置闹钟时间设置当前时间 显示时间是否到闹钟时间 N Y 响铃,打开被控电器 4键是否按下 N Y关闭闹铃 按下复位键2、 定时闹钟程序 #include <reg52.h> / reg52.h是AT89C52的头文件#define uint unsigned int#define uchar unsigned charuchar code table="NOW TIME:"uchar code table1="SET NOW TIME:"uchar code table2=&qu

8、ot;SET ALARM TIME:"uchar code alarm="ALARM TIME:"uchar code alarmoff="ALARM TIME: OFF"uchar code alarmon="ALARM TIME: ON"sbit lcden=P24; sbit lcdrs=P22;sbit lcdrw=P23;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit beep=P14;sbit DianQi=P15;sbit L1=P25;uchar fl

9、ag,num,count,k1num,k2num,k3num,k4num;char miao,shi,fen,ashi,afen;uchar i;uchar flag1=0;void delay(uint z) /延时函数uint x,y;for(x=z;x>0;x-)for(y=100;y>0;y-);void di() /蜂鸣器子程序beep=1;delay(100);beep=0;void write_com(uchar com) /写命令函数lcdrs=0;lcdrw=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;vo

10、id write_date(uchar date) /写数据函数lcdrs=1;lcdrw=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date) /写时间函数uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void TimeInit() /显示时间初始化write_com(0x01);write_com(0x80);

11、for(num=0;num<9;num+)write_date(tablenum);delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);write_com(0x80+0x40+9);write_date(':');delay(5);write_sfm(4,shi);write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10);void SetNow

12、Time() /设置当前时间if(K1=0)delay(5);if(K1=0)while(!K1);di();shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();k1num=0;TR0=1;TimeInit();void SetAlarmTim

13、e() /设置闹钟时间函数flag=0;if(K1=0)delay(5);if(K1=0)while(!K1);di();ashi+;if(ashi=24)ashi=0;write_sfm(4,ashi);write_com(0x80+0x40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();afen+;if(afen=60)afen=0;write_sfm(7,afen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();k3num=0;EA=1;flag=1;TimeIni

14、t();void DisplayAlarmTime() /显示闹钟函数 write_com(0x01);write_com(0x80); for(num=0;num<11;num+)write_date(alarmnum);delay(5);write_com(0x80+0x40+6);write_date(':');delay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);void keyscan() /键盘扫描函数if(K1=0)delay(5)

15、;if(K1=0)TR0=0;while(!K1);di();k1num+;if(k1num!=0) /如果1键按下write_com(0x80);for(num=0;num<13;num+)/显示SetNowTimewrite_date(table1num); delay(5);SetNowTime(); /进入SetnowTime函数elseif(K2=0)delay(5);if(K2=0)while(!K2);di();k2num+;if(k2num=1) /如果2键按下,则显示进入 显示当前时间函数EA=0;DisplayAlarmTime();k2num=2;if(k2num=

16、3)k2num=0;EA=1;TimeInit();elseif(K3=0)delay(5);if(K3=0)while(!K3);di();k3num+;write_com(0x01);if(k3num=1) /如果3键按下EA=0;write_com(0x80);for(num=0;num<15;num+) /显示SetAlarmTimewrite_date(table2num);delay(5);write_com(0x80+0x40+6); /在第二行显示时间格式write_date(':');delay(5);write_sfm(4,ashi);write_co

17、m(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);SetAlarmTime();/进入SetAlarmtimeha函数elseif(K4=0)/设置闹钟模式,有三种模式,不响, 一秒响一声,一秒响三声 delay(5);if(K4=0)while(!K4);k4num+;if(k4num=1)/不响flag=0;k4num=2;if(k4num=3) /一秒响一声 beep=1;delay(500);beep=0;flag=1;flag1=0;k4num=4;if(k4num=5)k4num=0;/一秒响三声flag=1;flag1

18、=1;beep=1;delay(100);beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;delay(100);beep=0;delay(100); if(flag=1&&shi=ashi&&fen=afen) DianQi=1; delay(100); if(flag1=1) beep=1; /蜂鸣器一秒连续响三声delay(100);beep=0;delay(100);beep=1;delay(100);beep=0;delay(100);beep=1;delay(100);beep=

19、0;delay(500); if(K4=0&&flag=1)/检测4键是否被按下,按下则跳 出,蜂鸣器停止发声 delay(5); if(K4=0&&flag=1) while(K4=!K4); flag=0; k4num=0; if(flag1=0) beep=!beep; /蜂鸣器长一秒响一声 delay(500);if(K4=0&&flag=1) /检测4键是否按下,按下则跳出, 蜂鸣器停止发声 delay(5); if(K4=0&&flag=1) while(K4=!K4);flag=0; k4num=0; void in

20、it() /lcd1602初始化 beep=0; DianQi=0;lcden=0;shi=0;fen=0;miao=0;ashi=0;afen=0;count=0;k1num=0;write_com(0x38);/设置16X2显示,5X7点阵,8位数据接口write_com(0x0c);/设置开显示,不显示光标write_com(0x06);/写一个字符后地址指针加1write_com(0x01);/显示清0,数据指针清0TimeInit();TMOD=0x01;TH0=(65536-41665)/256;TL0=(65536-41665)%256;EA=1;ET0=1;TR0=1;void main() /主函数DianQi=0; beep=0;init();write_com(0x80);flag=0;while(1)keyscan();void timer0()interrupt 1 /中断服务子程序TH0=(65

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论