ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:353.60KB ,
资源ID:7547734      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7547734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于AVR单片机的电子闹钟设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于AVR单片机的电子闹钟设计.docx

1、基于AVR单片机的电子闹钟设计基于AVR单片机的数字电子闹钟设计此处按务老师要求填写即可摘要本文主要讲述基于AVR单片机的数字电子闹钟,能够显示年月日时分秒,具备闰年平年补偿及闹铃功能。时钟信号源采用单片机内部定时器中断实现,该系统原理简单,成本低廉,操作简单。控制核心为Atmel公司的AVR高性能单片机,程序基于C语言开发,可读性强。显示核心为字符液晶LCD1602,显示效果稳定。输入模块为6个独立式按键,可操作性强,便于使用。关键词: AVR单片机、LCD1602、数字电子闹钟Abstract This paper mainly described the digital electron

2、ic based on AVR microcontroller able to display when the alarm clock, date of February alone, have a leap year provides compensation and alarm function. The clock signal source adopts singlechip internal timer interrupt achieve, this system theory is simple, low cost, simple operation. Atmel company

3、 control core for the AVR high-performance single chip microcomputer based on C language, program development, readable. Show LCD1602 core to characters LCD display effect, stable. Input module for six independent type key, the maneuverability is strong, easy to use.Keywords: AVR microcontroller, LC

4、D1602, digital electronic alarm clock一 系统构造 根据系统设计要求,本设计由电源模、用户设置键盘、报警模块、显示模块组成,形成实时时钟系统。总体的框图如下:方案论证一.1 单片机的的选择:方案一:使用功能较为简单的89C51单片机作为控制器,其优点是价格便宜。但是功能相对较为简单,烧录比较复杂,不便于程序调试。方案二:使用功能齐全的ATMEGA16单片机作为控制器,内部资源多,价格相对51稍贵,程序烧录容易,便于系统调试。根据我们设计的实际要求,我需要一个性能较高,稳定性好的单片机,我们选择了ATMEGA16单片机实现设计。一.2 电源模块方案一:使用具有

5、反馈保护的集成开关电源芯片LM2575,其能够提供1A的稳定5V电源输出,发热量少;但是外围电路比较复杂,价格较高。常用于电源能耗相对较高,发热量少的系统中。方案二:使用三端集成稳压芯片LM7805,其输出电流为1A,但是经过测试知道,芯片输出电压在500mA发热量较小,超过500mA发热量较大,不能运用于功耗较大的电路中。但是其外围电路简单,价格便宜,比较适合小功率电路使用。经分析,由于系统中使用的是低功耗的8位单片机,能耗较高的是液晶显示器。但是总电流不超过500mA。综上我选择使用三端集成稳压芯片LM7805。一.3 时钟信号源; 方案一:采用单片机内部定时器实现时钟,不需要外接芯片,成

6、本较低,但是时间精度不高,时间掉电会丢失,只适合一般场合使用;方案二:使用时钟芯片DS1302作为时钟源,该芯片断电后需要通过外接电池或者电容供电,因此电路相对比较复杂,成本也较高。结合我们使用的实际情况,我们一般要求时钟精度不是很高,只用于一般使用,故选择成本较低的方案一实现。一.4 显示器方案一:使用数码管扫描,显示效果一般,只能显示数字,显示效果单一,不易于使用。方案二:使用LCD1602液晶显示,可以显示一些字符,显示效果较好,易于使用。综上,我们考虑到用户的使用方便,选择用LCD1602作为显示终端。一.5 报警方案一:通过使用语音芯片实现语音播报来实现报时和闹钟功能。但是接口比较麻

7、烦,同时需要录音和实现地址检索。方案二:通过三极管控制蜂鸣器发出BEEP声报警,电路简单,价格便宜。比较适合我们这个设计的使用。二 硬件电路:二.1 电源电路设计 使用LM7805制作的5V系统稳压电源可以满足系统电源的使用,电路构造简单。在电源输入端有两个滤波电容,处理输入电源的纹波,输出端根据负载使用470uF的电容可以满足输出电流的纹波滤除。其中D3为电源信号指示灯。D1为稳压芯片保护,防止突然断电,导致稳压芯片的损坏,D2在电路中实现了反向保护功能,防止输入电源方向接反导致了电源模块损坏。二.2 按键输入模块 使用六个按键设计,分别为闹钟/时钟切换键,设置键,修改切换键,加,减,确认。

8、人性化设计,将调节按键分开,使用加、减键分离,更加便于调试。二.3 控制器最小系统:系统使用ATmega16L作为系统主控芯片,主要接受到按键设置信号。对报警蜂鸣器和显示器做出相应控制。单片机不断的扫描按键信息,通过LCD显示时钟和实现设置、闹钟的功能。二.4 显示模块:使用1602液晶的4线控制方法,减少端口使用,提高硬件资源的充分利用。偏置电压使用RP1对电源分压输入,可以对液晶对比度进行调节。4线控制需要对一个字节的数据分两次写入液晶,所以在程序设计中每个字节需要使用2次传输完成。二.5 报警电路设置:使用PNP三极管驱动蜂鸣器报警。当单片机输出为低电平时,三级管导通,蜂鸣器发声报警。这

9、样设计的原因在于,AVR单片机在上电时的电平输出为高电平,这样可以防止在单片机上电时发出蜂鸣声。三 程序设计框图:三.1 主流程图:三.2 按键设置程序:四 液晶屏驱动:四.1 模块说明:1602引脚说明主要技术参数:四.2 通信时序图读时序写时序4线式数据传送共分两次实现一个字节数据的传输。时序参数四.3 字符显示坐标五 AVR定时器CTC模式介绍CTC( 比较匹配时清零定时器)模式 本设计的时间采用AVR单片机内部定时器0的CTC模式实现。六 系统调试经过分阶段的调试,成功完成系统的调试。六.1 可以显示时间六.2 调节时间六.3 系统整体运行正常。 a. 开机正常显示初始化时间2011年

10、5月14号星期一,00:00:00闹铃关。b. 通过按键可以设置时间和闹钟。c. 闹钟响起时按下除功能键、设置键外其他键,闹钟停止。d. 显示信息正常。七 附录七.1 电路总图七.2 全部程序#include #define bee PORTB.0#include #includeint s,year;int sec,min,hour,date,month,xuanze,flog,flog1,week;int sec0,min0,hour0,bee_0,bee_turn;unsigned char key,moshi;unsigned char key_scan();unsigned cons

11、t date_run12=31,28,31,30,31,30,31,31,30,31,30,31; /闰年月份unsigned const date_pin12=31,29,31,30,31,30,31,31,30,31,30,31; /平年月份unsigned char leapyear(int year1);unsigned char bee_clock();interrupt TIM0_COMP void timer0_comp_isr(void) unsigned char temp,temp1,tt; s+; if(s=1000) s=0; sec+; tt=bee_clock();

12、 if(bee_turn) if(tt=1) bee=0; bee_0=1; if(bee_00) bee_0+; if(bee_0=20) bee=1; bee_0=0; if(sec=60) sec=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; temp=leapyear(year); if(temp=0) temp1=date_pinmonth+1; if(temp=1) temp1=date_runmonth+1; date+; week+; if(week=8) week=1; if(date=temp1) date=0;

13、 month+; if(month=13) month=0; year+; if(year=2099) year=1899; unsigned char leapyear(int year1) /判断某年是否闰年 闰年返回1,平年返回0 if (year1%400=0) | (year1%100!=0) & (year1%4=0) return 1; else return 0; void guangbaioshanshuo() /光标闪烁函数 switch(xuanze) case 0: lcd_gotoxy(14,1);_lcd_write_data(0x0d); break; case

14、1: lcd_gotoxy(9,1);_lcd_write_data(0x0d); break; case 2: lcd_gotoxy(6,1);_lcd_write_data(0x0d); break; case 3: lcd_gotoxy(3,1);_lcd_write_data(0x0d); break; case 4: lcd_gotoxy(14,0);_lcd_write_data(0x0d); break; case 5: lcd_gotoxy(10,0);_lcd_write_data(0x0d); break; case 6: lcd_gotoxy(7,0);_lcd_writ

15、e_data(0x0d); break; case 7: lcd_gotoxy(4,0);_lcd_write_data(0x0d); break; void display_0() char i; unsigned char dis2; lcd_gotoxy(4,0); lcd_putsf(Alarm); /显示时 dis0=hour0/10; dis1=hour0%10; lcd_gotoxy(2,1); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_putchar(:); /显示分 dis0=min0/10; dis1=min0%10; lcd_goto

16、xy(5,1); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_putchar(:); /显示秒 dis0=sec0/10; dis1=sec0%10; lcd_gotoxy(8,1); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_gotoxy(12,1); switch(bee_turn) case 0:lcd_putsf(off); break; case 1:lcd_putsf(on); break; void display() char i; unsigned char dis4; /显示年 dis0=year/1

17、000; dis1=year%1000/100; dis2=year%1000%100/10; dis3=year%1000%100%10; lcd_gotoxy(1,0); for(i=0;i4;i+) lcd_putchar(disi+0); lcd_putchar(-); /显示月份 dis0=month/10; dis1=month%10; lcd_gotoxy(6,0); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_putchar(-); /显示日期 dis0=date/10; dis1=date%10; lcd_gotoxy(9,0); for(

18、i=0;i2;i+) lcd_putchar(disi+0); lcd_gotoxy(12,0); switch(week) case 1:lcd_putsf(Mon); break; case 2:lcd_putsf(Tues); break; case 3:lcd_putsf(Wed); break; case 4:lcd_putsf(Thur); break; case 5:lcd_putsf(Fri); break; case 6:lcd_putsf(Sat); break; case 7:lcd_putsf(Sun); break; /显示时 dis0=hour/10; dis1=h

19、our%10; lcd_gotoxy(2,1); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_putchar(:); /显示分 dis0=min/10; dis1=min%10; lcd_gotoxy(5,1); for(i=0;i2;i+) lcd_putchar(disi+0); lcd_putchar(:); /显示秒 dis0=sec/10; dis1=sec%10; lcd_gotoxy(8,1); for(i=0;i=60) sec=0; else else sec-; if(sec=60) min=0; else else min-; if(m

20、in=24) hour=0; else else hour-; if(hour7) week=1; else else week-; if(weekdate_pinmonth+1) date=0; else else if(datedate_runmonth+1) date=0; else else date-; if(date=12) month=1; else else month-; if(month=2099) year=1899; else else year-; if(year=60) sec0=0; else else sec0-; if(sec0=60) min0=0; els

21、e else min0-; if(min0=24) hour0=0; else else hour0-; if(hour00) hour0=23; break; lcd_clear(); display_0();void clock() display(); key=key_scan(); switch(key) case 1: /时钟 闹铃 moshi=1; flog=0; break; case 2: /设置 flog1=1; xuanze=1; guangbaioshanshuo(); TIMSK=0x00; while(flog1) key=key_scan(); switch(key

22、) case 3: /切换 xuanze+; if(xuanze=8) xuanze=1; guangbaioshanshuo(); break; case 4: /加 adjust(xuanze,0); guangbaioshanshuo(); break; case 5: /减 adjust(xuanze,1); guangbaioshanshuo(); break; case 6: /确认 flog1=0; TIMSK=0x02; _lcd_write_data(0x0c); break; break; case 3: case 4: case 5: case 6: if(bee_0!=0) bee=1; bee_0=0; break; void alarm_clock() display_0(); key=key_scan(); switch(key) case 1: /时钟 闹铃 moshi=0; flog=0; break; case 2: /设置 flog1=1; xuanze=0; guangbaios

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

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