




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术专业专升本论文计算机科学与技术专业专升本论文1毕业 论文题题目目 基于基于 AVR的可调电子钟设计的可调电子钟设计院系名称:院系名称:计算机科学与技术计算机科学与技术专业班级:专业班级:1111专升本专升本 学生姓名:学生姓名:学学号: 号:指导教师:指导教师:2目录目录 摘摘 要要4 4第一章第一章 引言引言5 5 1.11.1设计任务设计任务 5 1.21.2设计要求设计要求 5第 二章第二章总体方案论证与设计总体方案论证与设计总体方案论证与设计总体方案论证与设计6 6第三章第三章 系统硬件设置系统硬件设置 7 7 3.13.1 ATmega16ATmega16单 片机简介
2、单片机简介 .7 3.23.2 ATmega16ATmega16单片机 的工作原理单片机的工作原理 .7 3.2.13.2.1 I/OI/O 端口的工 作原理端口的工作原理 7 3.2.23.2.2定时定时/ /计数器计数 器.8 3.2.33.2.3中断系统中断系统 8 3.2.43.2.4振荡器振荡器9 3.33.3时钟模块设计时钟模块设计.10 3.3.13.3.1DS1302DS1302 特 性 介绍特 性介绍10 3.3.23.3.2DS1302DS1302 弓 | 脚 介 绍 弓 | 脚 介绍11 3.3.33.3.3DS1302DS1302有关日历,时间的寄存器有关日历,时间的
3、寄存器 12 3.3.43.3.4 DS1302DS1302 与单片机接口电路与 单片机接口电路12 3.43.4显示模块设计显示模块设计.133.4.13.4.1 LCD1602LCD1602 的特性介绍的特性介绍.143.4.23.4.2 LCD1602LCD1602 弓 | 脚 介 绍弓| 脚 介 绍 .153.4.33.4.3 16021602内部功能器件及相关功能内部功能器件及相关功能16 3.4.43.4.4 16021602液晶与单片机接口电路液晶与单片机接口电路18 3.53.5设置模块设置模块203.63.6振荡电路振荡电路 21 3.73.7复位电路复位电路 22 第四章第
4、四章 系统软件设计系统软件设计 2323 4.14.1时钟 函数模块时钟函数模块25 4.1.14.1.1实现功能实现功能.25 3 4.1.24.1.2函数设计函数设计.25 4.24.2显示函数模 块显示函数模块30 4.2.14.2.1实现功能实现功能.304.2.24.2.2函数设计函数设计.30 4.2.34.2.3 小结小结.314.34.3按键函数模块按键函数模块32 4.3.14.3.1实现功能实现功能.32 4.3.24.3.2函数设计函数设计 .32 4.3.34.3.3小结小结.32 4.44.4主函数模块主函数模块 32第五章第五章 心得体会心得体会3333第六章第六章
5、致谢致谢3333附录 附录11元器件表元器件表 3434附录附录2 2仿真图仿 真图3535附录附录 3 3源码源码 3636附录附录4 4参 考文献参考文献 6868 4摘摘要要单片机就是微控制器, 是面向应用对象设计、突生控制功能的芯片。单片机 接上晶振、复位电路和相应的接口电路,装载软 件后就可以构成单片机应用系统。本设计就是应用单片机强大的控制功能制作而成的指针 式电子钟,该指针式电子 钟实现如下功能:液晶屏模拟表盘与时分秒指针显示当前时钟,K1键用于选择 调节对象,K2键用于调整时分秒, 在按下K4键时确定 调节值,时钟继续运行。本设计采用的是 AVR单片机,AVR系列的单片机不仅
6、具有良好的集成性能,而且都具备在线编程接口,其中的Mega系列还具备 JTAG仿真和下载功能;含有 片内看门 狗电路、片内程序 Flash、同步串行接口 SPI;多数AVR单 片机还内嵌 了 A/D转换器、EEPROM、模拟比较器、PWM 定时计数器等多种功能; AVR单片机 的I/O接口具有很 强的驱动能力,灌入电流可直接驱动继电器、LCD等元件。芯片采用DALLAS公司的涓细充电时钟芯片 DS1302, 该芯片通过简单的串行通 信与单片机进行通信,时钟 /日历 电路能够实时提供年、月、日、时分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。显示器件采用LCD1602液晶
7、,通过相应的按键调整相应的值通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。关键词关键词 AVR单片机时钟芯片 DS1302 LCD1602液晶5第一章第一章 引言引言 本例采用 LCD1602液晶作为显示元件,液晶屏显示当前时钟。该电子钟实现如下功能:液晶屏模拟表盘与时分秒指针显示当前时钟,K1键用于选择调节 对象,K2键用于调整时分秒, 在按下K3键时确定 调节值,时钟继续运行。本例 程序包含控制模块、显示模块、实时时间计算模块、设置模块(时间设置模块)。1.11.1设计任务设计任务 利用AVR单片机等实现一个 简单的基于 AVR的可调电子钟。1
8、.21.2设计要求设计要求 a.实现年月日时分秒指针式显 示功能b.用三个按键来实现调整时分秒的功能6第二章第二章 总体方案论证与设计总体方案论证与设计总体方案 论证与设计总体方案论证与设计组成框图中包含显示模块,控制器,时间模块,设置模块。显示模块有 LCD1602来控制显示,整个代码实现主要由控制器来实现,时间模块有 DS1302来实现,可以显示系统 时间,也可自行调整,设置模块为按键处理。具体模块分 析在相关的软硬件设计中详细介绍。本设计中的可调电子钟拟采用 AVR系列单片机 ATMEGA16 作为主控制器,以DS1302时钟芯片和 16M的外置晶振提供准确时间标准,以期实现对时、分、秒
9、”的数字显示和校准时间的计时装置;可调电子钟不但可以显 示当前时间,而 且可以显示年、月、日等,给人们的生活 带来方便。另外可调电子钟还具备日期时间的调节与写入功能。本设计将以 AVR单片机为控制核心, 通过与 DS1302信 获取实时时间,并将得到的数据通过LCD1602液晶显示由来,同时通过相应 的按键调整相应的值。因此本设计可分为以下模块:控制模块、显示模块、实时时间计算模块、设置模块(时间设置模块)。7第三章第三章系统硬件设置系统硬件设置3.13.1ATmega16单片机简介单片机简介ATmega16单片机是ATmega系列AVR单片机中内容接口丰富,功能齐全,性 能价格比较高的产品。
10、它具有高性能、低功耗的8位AVR微处理器,先进的RISC结构,非易失性程序和数据存储器等。ATmega16单片机的中央处理器由32个8位通用寄存器,1个算术运算单元及状态和控制逻辑单元组成。AVR采用了 哈弗结构,具有独立的程序总线和数据总 线,程序存储器里的指令通过一级流水线运行。它的存储器分为独立寻址的flash程序存储器,片内SRAM数据存储器 和EEPROM 3部分,均采用线性编址。图3-1 3.23.2 ATmega16ATmega16单片机的工作原理单 片机的工作原理 3.2.13.2.1 I/OI/O 端口的工作原理端口的工 作原理8 ATmeage16单片机具有 32个通用I/
11、O 口,分为 PA,PB,PC,PD,每组都是八位。这些I/O都是可以通过各自的端口寄存器设置为输入或 置成输由,有些I/O 口还具有第二功能。所有的端口引脚都具有内部上拉电阻,可以通过寄存器 独立选择是否连接,复位时所有的引脚都为高阻态。ATmega16单片机的每个端口都有三个I/O寄存 器地址:数据寄存器 PORTx(x=ABCD,下同)、方向寄存器DDRx和输入引脚 PINxo3.2.23.2.2定时定时/ /计数器计数器ATmega16单片机有三个定时/计数器:T/C0 , T/C1 , T/C2。其中T/C0,T/C2是两个八位的定时/计数器,而T/C1是 16位的定时/计数器。T/
12、Cx (0,1, 2)是一个通用的带有输由比较匹配和PWM波形发生器的单通道8位定时/计数器模块T/Cx可以选择通过预分频器由系统时钟驱动,或通过T0引脚的外部时钟驱动,时钟逻辑模块控制使用哪个时钟源及 哪个边沿来进行加或者减计数。T/Cx (0,1,2)的时钟分频器对系统分频后作为T/Cx (0,1,2)的驱动时钟。T/Cx (0,1,2)的时钟可以是系统时钟或者系统时钟的8分频、64分频、256分频及1024分频,通过控制寄存器 TCCRx(0,1,2)。T/Cx双缓冲结构的八位输由比较寄存器OCRx (0,1,2)一直与 T/Cx (0,1, 2)的计数值 TCNTx (0,1,2)进行
13、比较。一旦TCNTx(0 , 1,2)等于OCRx(0,1,2),比较器就给由匹配 信号。有4种工作模式:普通模式,CTC 模式, 快速 PWM 模式,相位修正 PWM 模式。3.2.3323中断系统中断系统ATmega16单片机有 21个中断源,每一个中断源都有一个独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己的独立 的使能位。如果 全局中断I和相应使能位都置位,则在中断标志位 置位时将执行中断服务程序。9 一个中断产生后,全局中断使能位I将被清零,后续中断被屏蔽。中断相关的寄存器:MCU 控制寄存器 MCUCR , MCU 控制和状态寄存器 MCUCSR ,通用中断控制
14、寄存器 GICR,通用中断状态寄存器 GIFR. 3.2.4324 振荡器振荡器 XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 :来自反向振荡器的输由。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输由。该反向放大 器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可米用。如采用外部时钟源驱 动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因 此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高 低电平要求的宽度。10 3.33.3时钟模块设计时钟模块设计实时时间计算模块方案(1):AVR单片机内部带有定时/计数功能,此定时功能是通过对
15、外部 晶振的脉冲进行计数,从而达到计时功能,只要使用 11.0592的晶振就能实现零 误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能要实现万年历的功能需要较复杂的程序,而且如果单片机掉电无法继续进 行计时,所以使用不便。方案(2):DS1302是美国DALLAS 公司推由的一种高性能、低功耗 的实 时时钟芯片,附加 31字节静态 RAM ,采用SPI三 线接口与CPU进行通信,并可采用突发方式一次传送多个 字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补 偿功能。工作电压宽达 2.55.5V。采用双电源供
16、电(主电源和备用电源),可设 置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。O利用单片机强大的控制功能就可实现实时计时的功能, 而且消耗的系统资源少,程序简单。综合上述两种方案,宜采用方案 (2)实现实时计时功能。3.3.13.3.1 DS1302DS1302 特性介绍特性介绍DS1302是美国DALLAS公司推由的一种高性能、低功耗的实时时 钟芯片,附加31字节静态 RAM ,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、 星期、月和年,一个 月小与31天时可以自动调整,且具有闰年补偿功能。工作 电压宽
17、达 2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充 电方式,提供了对后备电源进行涓细电流充电的能力。利用单片机强大的控制功能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。11 DS1302可以对年、月、日、星期、时、分、秒进行 计时,且具有闰年补偿等多种功能 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式;采用单片机计时,一方面需要采用计数器, 占用硬 件资源,另一方面需要设置中断、查询等,同样耗 费单片机的资源,而采用时钟 芯片DS1302。3.3.23.3.2 DS1302DS1302引脚介绍引脚介绍 图3-2 8、
18、 Vcc1 :备用电池端;1、Vcc2:5V电源。当 Vcc2Vcc1+0.2V 时,由 Vcc2 向 DS1302 供电, 当 Vcc2/单片机寄存器的头文件#include #include #include /a为要操作的寄存器,b为要操作的位数#define SET_1(a,b)a|=(10; i-) if(_data else DIO_CLE_0; SCLK_SET_1; 时钟信号 _delay_us(2); SCLK_CLE_0; _data=1;/ 移位,准备 好下次要写的数据 43 /向DS1302读取一个字节 uchar DS1302OreadByte(void) uchar
19、 i; uchar d_data=0; CLE_0(DDRD,PD5); for(i=8; i0; i-) d_data=1;/ 移位,以便下 次存放读生 的数据 if(PIND SCLK_SET_1; _delay_us(2); SCLK_CLE_0; SET_1(DDRD,PD5); return (d_data);/ 返回读 到的数据 44 /* 写 ds1302 寄存器*/ void Write1302(uchar ucAddr,uchar ucDa) RST_CLE_0; SCLK_CLE_0;RST_SET_1; DS1302writeByte(ucAddr);/ 地 址 DS13
20、02writeByte(ucDa);/ 写 1byte 数据 SCLK_SET_1;RST_CLE_0; /* 读 ds1302 的寄存器*/ uchar Read1302(uchar ucAddr) uchar ucData; RST_CLE_0;SCLK_CLE_0;RST_SET_1;45DS1302writeByte(ucAddr|0X01);/ 地址,命令 ucData = DS1302OreadByte(); SCLK_SET_1;RST_CLE_0;return(ucData); void get_time(uchar *time) *(time+5)=Read1302(READ
21、_SECOND);*(time+4)=Read1302(READ_MINUTE);*(time+3)=Read1302(READ_HOUR);*(time+2)=Read1302(READ_DAY);*(time+1)=Read1302(READ_MONTH);*(time+0)=Read1302(READ_YEAR); /*void Initial(void) Write1302(WRITE_PROTECT,0x00);Write1302(WRITE_SECOND,0x45);WHte1302(WRITE_MINUTE,0x24);Write1302(WRITE_HOUR,0x09);Wri
22、te1302(WRITE_DAY ,0x13);46Write1302(WRITE_MONTH,0x04);Write1302(WRITE_PROTECT,0x80); void adopt_data(uchar n,uchar *show_data) *show_data = n4; *(show_data +1)= n */ void T1_int(void) TCCR1B = 0x00;/控制寄存器,停止定时TIMSK |= 0x04;/中断屏蔽寄存器,中断允许 TCNT1 =0xcf2c;/100ms 溢由一次 TCCR1B = 0x02; sei();/使能全局 中 断47 void
23、 init_1302(void) Write1302(WRITE_PROTECT,0x00); 禁止写保护 Write1302(WRITE_SECOND,time4);/ 秒位初始化Write1302(WRITE_MINUTE,time3);/分钟Write1302(WRITE_HOUR,time2);/小时Write1302(WRITE_DAY ,time1);/日Write1302(WRITE_MONTH,time0);/月Write1302(WRITE_PROTECT,0x80); 允许写保护 /* 按键 函数 */ uchar get_key(void) uchar i=0; PORT
24、D |= 0x0f; DDRD = 0xf0;/ 设置为输由 NOP(); NOP(); if(PIND/ 消除抖 动 switch(PINDbreak; 选择键 case 0x0d:i = 3;break;/ 减 值键 case 0x0b:i = 2;break;/ 增值键 case 0x07:i =1;break;/确定键 while(PIND 等待按键松开 else i = 0;/没有按键被按下 DDRD = 0xff;设置为输由 return i;/返回按键值 /*转换为led要显示的数据*/ 49 void adopt_data() uehar i,j=0; for (i=0;i4;
25、 lcd_showj+1 = timei j += 2; /* 转换为 ds1302 的时间*/ void affirm_data(void) uehar i ,j = 0 ; for (i=0;i0) lcd_shown-; else if(lcd_shown=max) lcd_shown=0; 51 else lcd_shown=max; value=lcd_shown; /* 功能显示函数 */ void show_function(void) uchar i; uchar function25=0x43,0x4c,0x4f,0x43,0x4b,0x41,0x4c,0x41,0x52,0
26、x4d,;wr_dictate(0x01);display_lcd(0x84,0x7e);for(i=0;i6;i+) display_lcd(0x85+i,function0i);/ 显 示 时 间 display_lcd(0xc5+i,function1i); /* 设置时间 */ 52 void set_clock(void) uchar cursor = 0;/ 光标 uchar i,j; wr_dictate(0x01); 清屏 Write1302(WRITE_PROTECT,0x00); Write1302(WRITE_SECOND,time4|0x80);/ 暂时停止时钟的 运
27、行Write1302(WRITE_PROTECT,0x80);display_lcd(0x82,0x00);/ 显示年 display_lcd(0x85,0x01);/ 月 display_lcd(0x88,0x02);/ 日 display_lcd(0xc2,0x03);/ 时 display_lcd(0xc5,0x03);/ 分 display_lcd(0xc8,0x03);/ 秒 for (i=0,j=0;i10;i+=2) display_lcd(0x80+j,numberlcd_showi);display_lcd(0x80+j+1,numberlcd_showi+1); 53 j
28、= j+3; wr_dictate(0x02); wr_dictate(0x0e); j = 0; while(1) NOP(); switch(get_key() case 1:/ 确认 cursor+; j+; if (cursor%2=0) j+; wr_dictate(0x14); wr_dictate(0x14); 54 else wr_dictate(0x14); if (cursor=10) j = 0; cursor = 0; wr_dictate(0x02);/ 光标归位 place = 0x80+j; break; case 2:/加 switch(cursor) /* 一
29、下的 case成功选择项为光标对 应的调 55 整位数*/ case 0:add_d(cursor,1);break; case 1: if(lcd_show0=1) add_d(cursor,2); else add_d(cursor,9); break; case 2:add_d(cursor,3);break; case 3: if(lcd_show2=3)add_d(cursor,0); else add_d(cursor,9);break; 56 case 4:add_d(cursor,2);break; case 5: if(lcd_show4=2)add_d(cursor,3);
30、 else add_d(cursor,9);break; case 6:add_d(cursor,5);break; case 7:add_d(cursor,9);break; case 8:add_d(cursor,5);break; case 9:add_d(cursor,9);break;display_lcd(place,numbervalue);/ 显示在 液晶屏的相应的位 置 wr_dictate(0x10); break; 57 case 3:减 switch(cursor) /*一下的case成功选择项为光标对应的调整位数*/ case0:dec_d(cursor,1);bre
31、ak; case 1: if(lcd_show0=1) dec_d(cursor,2); else dec_d(cursor,9); break; case 2:dec_d(cursor,3);break; case 3: if(lcd_show2=3) 58dec_d(cursor,0);elsedec_d(cursor,9);break;case4:add_d(cursor,2);break; case 5: if(lcd_show4=2) dec_d(cursor,3);elsedec_d(cursor,9);break;case6:dec_d(cursor,5);break; case
32、 7:dec_d(cursor,9);break; case 8:dec_d(cursor,5);break; case 9:dec_d(cursor,9);break; 59 display_lcd(place,numbervalue);/ 显示在 液晶屏的相应的位 置 wr_dictate(0x10); break; case 4:/退格 affirm_data();init_1302(); T1_OPEN; goto OUT; default: break; OUT:NOP(); /*补充显示 */ void allowance(void) 60 uchar i,j; display_l
33、cd(0x82,0x00);/ 显示月 display_lcd(0x85,0x01);/ 日 display_lcd(0x88,0x02);/ 时 display_lcd(0x8b,0x03);/ 分 get_time(time); adopt_data(); for (i=0,j=0;i10;i+=2) display_lcd(0x80+j,numberlcd_showi);display_lcd(0x80+j+1,numberlcd_showi+1); j = j+3; int main(void) uchar chinese58 =610x08,0x0f,0x12,0x0f,0x0a,0
34、x1f,0x02,0x02,0x0f,0x09,0x0f,0x0,0x0f,0x09,0x13,0x00, 0x1f,0x11,0x11,0x1f,0x11,0x11,0x11,0x1f,0x00, 0x01,0x1d,0x17,0x1d,0x17,0x1d,0x03,0x01, 0x04,0x0a,0x11,0x0e,0x02,0x0a,0x16,0x00,; uchar i,j; uchar key_Enter = 0;确认键被按下的次数控制线 DDRC =0xff;方向寄存器PORTC = 0xff;数据寄存器数据端DDRB = 0xff;/ 端口 B 设置为输由 PORTB = 0xf
35、f; DDRD = 0xff; 按键设为输入 PORTD = 0xff; 62 init_1302(); init_lcd(); T1_int(); wr_dictate(0x40); for (j=0;j5;j+) for (i=0;i8;i+) wr_data(chineseji);/利用循环语句把点阵字 符写进 CGRAM 中 allowance。,/补充显示 while(1) NOP(); i=get_key(); if (i=1)/所有的功能以确认键按下才开始操作 63 while (1) NOP(); switch(i) case 1:/确认键 T1_CLOSE;确认键按下,停止显
36、示数字key_Enter+;switch(key_Enter) case 1: show_function();/ 显 示功能 break; case 2: set_clock();/设置时间 64 goto OUT; break; case 2:/加值键 display_lcd(0x84,0x20);/ 清除上行 的箭头 display_lcd(0xc4,0x7e);/ 显示一个箭头 break; case 3:/减值键 display_lcd(0xc4,0x20);/ 消除下行的 箭头 display_lcd(0x84,0x7e);/ 显示一个箭 头 break; 65 case 4:/ 确定键 OUT: wr_dictate(0x01);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高清幕布行业跨境出海项目商业计划书
- 高精度可变电阻行业深度调研及发展项目商业计划书
- 高效能LED隧道灯企业制定与实施新质生产力项目商业计划书
- 2025届福建省长泰县七下数学期末调研模拟试题含解析
- 财务AI应用行业深度调研及发展项目商业计划书
- 高蛋白运动饮料系列行业深度调研及发展项目商业计划书
- 高精度和面机企业制定与实施新质生产力项目商业计划书
- 江苏省徐州市区部分2025届数学七下期末调研试题含解析
- 安全活动非暴力行为准则
- 重庆市2025年八下数学期末教学质量检测模拟试题含解析
- 超星尔雅学习通《创新创业(同济大学)》2025章节测试附答案
- 医院无线网络方案
- 水库安全运行管理防汛知识培训
- 基于高光谱成像的青稞品种鉴别和特征品质无损检测技术研究
- 2024年山东省政府采购评审专家考试真题100个题及答案
- 2025年合肥市公安局第一批招考聘用警务辅助人员591人高频重点提升(共500题)附带答案详解
- 医院培训课件:《医务人员职业暴露及安全防护》
- 煤质化验工职业技能竞赛理论考试题及答案
- DB52T 1512-2020 水利水电工程隧洞施工超前地质预报技术规程
- 15J403-1-楼梯栏杆栏板(一)
- 部编版四年级语文下册1-8单元词语、课文默写练习卷
评论
0/150
提交评论