AVR单片机作业——实时时钟的设计.doc_第1页
AVR单片机作业——实时时钟的设计.doc_第2页
AVR单片机作业——实时时钟的设计.doc_第3页
AVR单片机作业——实时时钟的设计.doc_第4页
AVR单片机作业——实时时钟的设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

全院选修课程AVR单片机嵌入式系统入门 作业题目 带校时和音乐报时功能实时时钟的设计学生姓名 专业班级 学 号 院 (系) 硬件原理图:Atmega16单片机结构与特点 ATMEL公司的AVR单片机是一种基于增强RISC结构的、低功耗、CMOS技术、8位微控制器(Enhanced RISC Microcontroller),目前有Tiny、Mega两个系列50多种型号。它们的功能和外部的引脚各有不同,小到812个引脚,多到100个引脚,但它们内核的基本结构是一样的,指令系统相容。尽管AVR单片机系列有几十种的型号,但它们有着相同的内核结构,指令兼容。ATmega16单片机的Flash程序存储器空间可以分成两段:引导程序段(Boot program section)和应用程序段(Application program section)。两个段的读写保护可以分别通过设置对应的锁定位(Lock bits)来实现。在引导程序段内驻留的引导程序中,可以使用SPM指令,实现对应用程序段的写操作(实现在应用自编程IAP功能,使系统能够自己更新系统程序)。在AVR中,所有的存储器空间都是线性的。数据存储器(SRAM)可以通过5种不同的寻址方式进行访问。AVR的中断控制由I/O寄存器空间的中断控制寄存器和状态寄存器中的全局中断允许位组成。每个中断都分别对应一个中断向量(中断入口地址)。所有的中断向量构成了中断向量表,该中断向量表位于Flash程序存储器空间的最前面。中断的中断向量地址越小,其中断的优先级越高。ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。ATmega16单片机有三种形式的封装:40脚双列直插PDIP、44脚方形的TQFP和MLF形式(贴片形式)。其外部引脚封装如图所示。数码管的原理 数码管按段数分为七段数码9管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 7段LED数码管显示原理7段LED数码管,在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。 LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。 将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将b和c段接上正电源,其它端接地或悬空,那么b和c段发光,此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它字符的显示原理类同原理电路:原理电路如图1所示,PA口为LED数码管的8段码输出,PC0-PC5共6个I/O口,作为控制时间显示的6个LED数码管的位扫描线。PC6、PC7分别接连接两个按键,用于设置时钟的工作状态和校时时间的设置。图1 带校时功能的实时时钟电路图图中音乐报时电路部分如图2,由端口PD5输出产生音乐的脉冲信号,经三极管驱动蜂鸣器发声。PD5为ATmega16的T/C1匹配输出脚OC1A。编写程序在该脚上输出脉冲波,输出经三极管放大驱动蜂鸣器发声。图中的发声部分位于AVR-51多功能实验板的M区。BZ为一个无源蜂鸣器,作为发声器件(有源蜂鸣器的发声频率固定,不能使用),I/O口的脉冲输出经三极管放大驱动蜂鸣器发声)。,图2 采用T/C0的PWM功能产生正弦波定义两个按键的功能为:K1用于设置转换时钟工作状态,K2用于设置校时时间(加1操作)。时钟工作状态转换图如图3所示,具体每个状态的定义和功能如下: 平时时钟工作在时钟显示状态,每按一下K1键,时钟依次进入校时时间的设置状态。 时钟由“时钟显示”进入“秒低位设置”时,校时时间的初始值为转换时刻的时钟值。 时钟由“时高位设置”回到(K1作用下)“时钟显示”时,时钟时间由校时时间代替,确认完成校时的设置。 当时钟处在时间设置的6个状态时,每按一次K2键,相应的位上的数值加1,并且要能根据具体所在的位置自动做相应的调整。如秒高位的数字只能在0-5之间,而时高位的数值要限制在0、1、2(时个位数小于3时),或时高位的数值要限制在0、1(时个位数大于3时)。 当时钟处在时间设置的6个状态时,在20秒内无任何键按下,系统自动返回“时间显示”状态,设置的时间无效,不改变原时钟的计时时间。 在效时时间设置的操作过程中,时钟不停止其前时间的计时过程,除非当时钟由“时高位设置”回到(K1作用下)“时钟显示”时,时钟的计时时间由确认的校时时间代替而改变。 时钟显示亮度均匀、无闪烁。当设置相应时间位时,该位应闪烁提示。K1K1K1K1K1K1K1时钟显示秒低位设置秒高位设置分低位设置分高位设置时低位设置时高位设置超时图3 时钟工作状态转换图单片机编程代码:/*File name : demo_11_4.cChip type : ATmega16Program type : ApplicationClock frequency : 1.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 256*/#include flash char led_710=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; flash char position6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;flash unsigned int t9 = 0,956,865,759,716,638,568,506,470;flash unsigned char d9 = 0,105,116,132,140,157,176,198,209;#define Max_note 32flash unsigned char musicMax_note =5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8; unsigned char note_n;unsigned int int_n;bit play_on;char time3,time_set3;/ 时、分、秒计数和设置单元char dis_buff6;/ 显示缓冲区,存放要显示的6个字符的段码值char time_counter,key_stime_counter;/ 时间计数单元,char clock_state = 6,return_time;bitpoint_on,set_on,time_1s_ok,key_stime_ok;void display(void)/ 6位LED数管动态扫描函数 static char posit=0;PORTC = 0xff;PORTA = led_7dis_buffposit;if (set_on & (posit=clock_state) PORTA= 0x00;/ 校时闪烁if (point_on & (posit=2|posit=4) PORTA |= 0x80;/ 秒闪烁PORTC = positionposit; if (+posit =6 ) posit = 0;/ Timer 0 比较匹配中断服务,2ms定时interrupt TIM0_COMP void timer0_comp_isr(void)display();/ LED扫描显示if (+key_stime_counter =5)key_stime_counter = 0; key_stime_ok = 1;/ 10ms到if (!(+time_counter % 25) set_on = !set_on;/ 设置校时闪烁标志if (time_counter = 100)time_counter = 0;time_1s_ok = 1; / 1s到/ T/C1 比较匹配A中断服务interrupt TIM1_COMPA void timer1_compa_isr(void) if (!play_on) note_n = 0; int_n = 1; play_on = 1; else if (-int_n = 0) TCCR1B = 0x08; if (note_n Max_note) OCR1A = tmusicnote_n; int_n = dmusicnote_n; note_n+; int_n = int_n * musicnote_n; note_n+; TCCR1B = 0x09; else play_on = 0; void time_to_disbuffer(char *time)/ 时钟时间送显示缓冲区函数char i,j=0;for (i=0;i= 60)/ 秒加1,以下为时间调整time0 = 0;if (!play_on) TCCR1B = 0x09; / 1分钟到,播放音乐if (+time1 = 60)time1 = 0;if (+time2 = 24) time2 = 0;if (+return_time = 20) & (clock_state != 6) clock_state = 6;if (clock_state = 6) time_to_disbuffer(time);if (key_stime_ok)/ 10ms到,键处理key_stime_ok = 0;key_temp = read_key();/ 调用按键接口程序if (key_temp)/ 确认有键按下 return_time = 0;if (key_temp = key_k1)/ K1键按下,状态转换if (+clock_state = 7) clock_state = 0;if

温馨提示

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

评论

0/150

提交评论