基于AVR单片机的花样时钟显示-.doc_第1页
基于AVR单片机的花样时钟显示-.doc_第2页
基于AVR单片机的花样时钟显示-.doc_第3页
基于AVR单片机的花样时钟显示-.doc_第4页
基于AVR单片机的花样时钟显示-.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计题目:基于AVR单片机的花样时钟显示毕业设计类别:三年制高职 专业:电子信息工程技术 班级:电子信息1001 姓名:李全军学校:河南工业职业技术学院基于AVR单片机的花样时钟显示 摘要LED点阵显示屏作为信息传播的一种重要手段,具有亮度高、工作电压低、功耗小、小型化、寿命长、耐冲击和性能稳定等优点。再加上集成电路的使用,LED点阵显示屏的外围电路变得越来越简单,性价比不断攀升,舍得LED点阵显示屏广泛用于各行各业以及公共场所,成为了信息化时代不可缺少的信息发布工具。数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。LED点阵作为电子时钟的显示屏,最大的优点在于其显示内容的多样性,为用户提供了灵活的人机交互界面。本文研究的是以ATmega16为核心控制器,从时钟芯片中读取实现信息,然后通过74HC595所控制的LED屏显示出来,在显示的过程中添加了多种花样效果,使得显示效果比较个性化。关键字:LED点阵;ATmega16;74HC595;花样显示Based on AVR MCU clock display patternAbstractLED dot matrix display screen as the information transmission is a kind of important means, with high brightness, working voltage, low consumption, miniaturization, long service life, impact resistance and stable performance etc. Coupled with the use of integrated circuit, LED dot matrix display of the peripheral circuit is becoming more and more simple, price rising, be willing to part with or use of LED dot matrix display screen is widely used in all walks of life and public places, become the information age indispensable information release tool. Digital clock is widely used in modern society the timing tool, in the aerospace, electronics, and other scientific research units, factories, hospitals, schools and enterprises and institutions, all kinds of sports but when we everyones daily life play an important role. LED lattice as electronic clock display, the biggest advantage is that the display content diversity, to provide users with the agile human-computer interaction interface. This paper studies on ATmega16 as the core controller, read from the clock chip to realize information, and then through the 74 hc595 control LED screen display, in the process of display added a variety of pattern effect, make display effect more personalized. Key words: LED lattice; ATmega16; 74 hc595; Figure shows 目录1 绪 论12 硬件设计及功能介绍22.1 功能介绍22.2 硬件设计的电路22.2.1 主控制电路图22.2.2 32*64点阵显示屏电路43 各元器件的介绍83.1各个模块所需的元器件83.2 ATmega16单片机的介绍83.3 DS18B20温度传感器的介绍123.3.1 DS18B20简介123.3.2 DS18B20的操作指令和温度值寄存器143.3.3 DS18B20的时序图及部分代码153.4 DS1302时钟芯片的介绍183.4.1 DS1302简介183.4.2 DS1302的寄存器193.4.3 DS1302的读和写时序以及部分代码203.5 74HC595的简介214 软件的设计234.1 软件设计的流程图234.2 DS18B20读取负温度时流程图245 结论256 参考文献267 附录277.1程序代码277.1.1 各I/O端口定义.h函数:277.1.2 74HC595定义的.h代码和.c代码:287.1.3 DS1302时钟芯片的.h和.c代码:297.1.4 DS18B20温度传感器.h和.c代码:347.1.5 主程序main()码:.451 绪 论LED显示屏(LED display):又叫电子显示屏或者飘字屏幕。是由LED点阵组成,通过红色或绿色灯珠的亮灭来显示文字、图片、动画、视频,内容可以随时更换,各部分组件都是模块化结构的显示器件。通常由显示模块、控制系统及电源系统组成。显示模块由LED灯组成的点阵构成,负责发光显示;控制系统通过控制相应区域的亮灭,可以让屏幕显示文字、图片、视频等内容,恒舞动卡主要是播放动画的;电源系统负责将输入电压电流转为显示屏需要的电压电流。在目前的电子市场上的大部分的显示设备都是这种产品,其最主要的特点是节能环保,而且画质清晰,符合闲着的消费需求和理念。本次设计的显示电路是由32个8*8LED点阵模块组成的32*64点阵屏,可以同时显示8个中文文字,做成时钟显示可以同时显示时间和年月日。由于单片机的工作速度相当的快,尤其是高性能的ATmega16单片机,速度为普通的AT89C51的12倍,所以为了节省其IO口,该模块的的驱动芯片采用串行输入并行输出的74hc595,74HC595的工作频率可达100M,所以完全可以满足单片机的速度,及不影响显示效果有节省的单片机的宝贵IO端口。控制系统为atmel公司研制的ATmega16型单片机,ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以减缓系统在功耗和处理速度之间的盾。2 硬件设计及功能介绍2.1 功能介绍本电路利用Atmel公司生产的ATmega16型单片机作为控制核心,DS1302时钟芯片作为时钟输入,DS18B20温度传感器作为温度输入,然后经ATmega16综合的运算送入由74HC595控制的32*64点阵屏上显示。32*64点阵屏分上下两部分显示:上半部分显示年月日、星期和温度字样;下半部分显示时分秒和温度值。功能效果为:在开始时刻,年月日不显示,时分秒由右边移出,随后上半屏显示年月日,过8秒之后,上半屏切换至星期,下半屏的时分秒照常显示,再过8秒,上半屏的星期和下半屏的时分秒消失,温度字样和温度数值缓慢移入,其中温度字样自上到下移入,温度值自下到上移入,在移入的过程中,温度字样和温度值同步移动。随后3秒之后温度移出,温度字样自下到上移出,温度值自上到下移出,在移出过程中,温度字样和温度值同步移动。温度的显示范围为-9.9+99.9。2.2 硬件设计的电路 本设计硬件电路分4部分介绍:图3.2.1为主控制电路,主要功能是负责从温度传感器和时钟芯片中读取信息,通过刷新点阵屏显示出来时间、温度信息;图3.2.2(a)为32*64点阵模块行扫描的74HC595的连接电路图;图3.2.2(b)为32*64点阵屏列数据传送的74HC595的连接电路图,主要传送要每行要显示的字模信息;图3.2.2(c)为32*64点阵上半屏的插槽排列及行控三极管的排列及连接图;图3.2.2(d)为32*64点阵下半屏的插槽排列及行控三极管的排列及连接图;2.2.1 主控制电路图 在本设计中所用到控制单元有:ds18b20、ds1302、ATmega16单片机及其复位电路、SPI下载接口及电源接口,具体各部分连接如下图所示:图2.2.1 主控电路图2.2.2 32*64点阵显示屏电路点阵屏电路由20块74HC595控制,其中16块控制列,用于给点阵屏送显示数据,总共有128列,每列串联一个100欧的电阻,总共128个电阻。剩下的4块控制行,32行,每行接一个S8550PNP三极管,用于扩大电流,然后32个S8550三极管由剩下这四个74HC595送数据,来轮流导通每一行。控制行的74HC595的接法如图所示:控制列的16块74HC595的接法如下图所示:每个74HC595的SCLR(10脚)接VCC;OE(13脚)接GND;20块74HC595连接好之后,最终的接口为8个,1为电源、2为电源地、3、下半屏列数据输入端4、列数据输入时钟线5、输出数据时钟线6、上半屏列数据输入端7、行数据输入端8、行数据输入时钟线。图2.2.2(c)、2.2.2(d)分别是上半屏数据传送的电路图及各个8*8点阵模块的排列顺序,其中PNP三极管控制行,例如Q1:当r1为低电平0时,该三极管导通,即第一行选通,然后刷新数据,其余三极管工作方法与其相同,各自在基极来低电平时选通所对应的行。图2.2.2(a)行扫描连接电路图图2.2.2(b)列数据传送连接电路图图2.2.2(c)32*64上半屏连接图图2.2.2(d)32*64下半屏连接图3 各元器件的介绍3.1各个模块所需的元器件ATmega16单片机1个蜂鸣器、DS18B20、DS1302及32.768k、12M晶振各一个MAX2321个发光二极管红蓝绿各一个电阻100130个2k80个1k20个电容10u/16V5个8*8点阵单红色32块74HC59520个三极管S855032个微动按键7个排阵、排座各10排免刮铜线一卷3.2 ATmega16单片机的介绍 ATmega16 AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与运算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。 ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字节SRAM,32 个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装)的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。 工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU 和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式下则允许振荡器和异步定时器继续工作。本芯片是以Atmel高密度非易失性存储器技术生产的。片内ISP Flash允许程序存储器通过ISP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了RWW操作。 通过将8位RISC CPU与系统内可编程的Flash集成在一个芯片内,ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega16 具有一整套的编程与系统开发工具,包括:C语言 编译器、宏汇编、 程序调试器/软件仿真器、仿真器及评估板。工作于空闲模式时CPU 停止工作,而USART、两线接口、A/D 转换器、SRAM、T/C、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式下则允许振荡器和异步定时器继续工作。 本芯片是以Atmel 高密度非易失性存储器技术生产的。片内ISP Flash 允许程序存储器通过ISP 串行接口,或者通用编程器进行编程,也可以通过运行于AVR 内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了RWW 操作。 通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内, ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案ATmega16引脚图ATmega16各端口的功能端口A的第二功能PA7ADC7ADC输入通道7PA6ADC6ADC输入通道6PA5ADC5ADC输入通道5PA4ADC4ADC输入通道4PA3ADC3ADC输入通道3PA2ADC2ADC输入通道2PA1ADC1ADC输入通道1PA0ADC0ADC输入通道0端口B的第二功能PB7SCKSPI串行时钟PB6MISOSPI主机输入从机输出PB5MOSISPI主机输出从机输入PB4SSSPI从机选择PB3AIN1/OCO模拟比较负输入,OCO(T/C0比较匹配输出)PB2AIN0INT2模拟比较正输入,INT2(外部中断2输入)PB1T1T/C1外部计数器输入PB0T0/XCKT/C0外部计数器输入,XCK(DSART外部时钟输入)端口C的第二功能PC7TOSC2定时振荡器引脚2PC6TOSC1定时振荡器引脚1PC5TDIJTAG测试数据输入PC4TDOJTAG测试数据输出PC3TMSJTAG测试模式选择PC2TCKJTAG测试时钟PC1SDA串行数据PC0SCL串行时钟端口D的第二功能PD7OC2T/C2比较匹配输出PD6ICP1T/C1输入捕捉引脚PD5OC1AT/C1输出比较A匹配输出PD4OC1BT/C1输出比较B匹配输出PD3INT1外部中断1输入PD2INT0外部中断0输入PD1TXDUSART发送PD0RXDUSART接收3.3 DS18B20温度传感器的介绍3.3.1 DS18B20简介 DS18B20是DALLAS公司生产的一种“单总线”温度传感器,它采用独特的单线接口方式,仅需要一个端口引脚来发送或接收信息,在MCU和DS18B20之间仅需一条数据线。 每一个DSl820包括一个唯一的64位长的序号该序号值存放在DSl820内部的ROM(只读存贮器)中开始8位是产品类型编码(DSl820编码均为10H)接着的48位是每个器件唯一的序号最后8位是前面56位的CRC(循环冗余校验)码。所以可以将多个DS18B20同时连在一根总线上,进行简单的多点分布测量不同点的温度值。DS18B20极为小巧,大小和一个普通的三极管相当,所以在温度测量方面有着比较广泛的应用,包括温度的控制,工业系统,消费电子,温度计以及其他的热感应系统。DS18B20内部有三个主要数字部件:64位激光ROM,温度传感器,非易失性温度报警触发器TH和TL。DS18B20可以采用寄生电源方式工作,从单总线上汲取能量,在信号线处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间利用电容上的电能工作,直到高电平到来再给寄生电源充电,DS18B20也可以用外部电源,电压为35.5V电源供电。采用外部电源供电的标准接法为3.3.2 DS18B20的操作指令和温度值寄存器DS18B20依靠一个单总线端口通信,必须先建立ROM操作协议才能进行存储器和控制器的操作。因此主机(MCU)必须先提供以下5个ROM操作指令: 读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。 匹配ROM,代码为55H,用于识别或选中某一特定的DS18B20进行操作。 搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。 跳过ROM,代码为CCH,命令发出后系统将对所有的DS18B20进行操作,通常用于启动所有DS18B20转换之前或系统中仅有一个DS18B20时。 报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。 温度转换,代码为44H,用于启动DS18B20进行温度测量,温度转换命令被执行后,DS18B20保持等待状态。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又忙于做温度转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。 读暂存器,代码为BEH,用于读取暂存器中的内容,从字节0开始最多可以读取9个字节,如果不想读完所有字节,主机可以在任何时间发出复位命令来终止读取。 写暂存器,代码为4EH,用于将数据写入到DS18B20暂存器的地址2和地址3(TH和TL字节)。可以在任何时刻发出复位命令来终止写入。 复制暂存器,代码为48H,用于将暂存器的内容复制到DS18B20的非易失性EERAM,即把温度报警触发字节存入到非易失性存储器里。 重读EERAM,代码为B8H,用于将存储器在非易失性EERAM中的内容重新读入到暂存器中。 读电源,代码为B4H,用于将DS18B20的供电方式信号发送到主机。若在这条命令发出之后发出读时间隙,DS18B20将返回它的供电方式:“0”=寄生电源,“1”=外部电源。DS18B20的温度寄存器如图所示其中中高字节MSB中的前5位位温度符号位,S全为0表示正温度,全为1表示负温度。3.3.3 DS18B20的时序图及部分代码 DS18B20的初始化时序图 DS18B20的写“0”和写“1”时序图写代码为:void write_ds1302_byte(uchar Dat)uchar i;IOout;for(i=0;i1;DS18B20的读 “0”和读“1”时序图 value=value|0x80; SCK1; SCK0;RST0;return value;读代uchar read_ds1302(uchar add)uchar value,i;RST0;SCK0;RST1;write_ds1302_byte(add);IOin;NOP();for(i=0;i1;if(IOr)码为3.4 DS1302时钟芯片的介绍3.4.1 DS1302简介 DS1302是美国DALLAS公司推出了一种串行接口实时时钟芯片。芯片内部具有可编程日历时钟和31个字节的静态RAM,日历时钟可自动进行闰年补偿,计时准确,接口简单,使用方便,工作电压范围宽(2.5-5.5V),功耗低,芯片自身还具有对备份电池进行涓流充电功能,可以有效地延长备份电池的使用寿命。如图所示为DS1302的引脚及封装图,单片机与DS1302之间采用3线串行通信方式,CE为通信允许信号,CE=1允许通信,CE=0,禁止通信。I/O为双向串行数据传送信号引脚,SCLK为串行数据的位同步脉冲信号引脚,单片机作为主机控制CE,SCLK,和I/O信号实现两芯片之间的数据传送。DS1302芯片的X1和X2端外接32.768KHZ的石英晶振,VCC1和VCC2是电源引脚,单电源供电时接VCC脚,双电源供电时主电源接VCC2,备份电池接VCC1,如果采用可充电镉镍电池,可启用内部涓流充电器在主电源正常时向电池充电,以延长电池的使用时间。备份电池也可以用1微法以上的超容量电容代替,需要注意备份电池电压应略低于住电源工作电压。DS1302与单片机进行数据交换时,首先由单片机向电路发送命令字节,命令字节最高位Write Protect(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。 在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。3.4.2 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302的时间寄存器3.4.3 DS1302的读和写时序以及部分代码DS1302的写时序图DS1302写一个字节代码如下:void write_ds1302_byte(uchar Dat)uchar i;IOout;for(i=0;i1;DS1302的读时序图 需要注意的是:在读的时候需要往DS1302中写一个字节的数据,此数据为要读的地址,当写完之后,紧接着的下降沿时钟信号DS1302就开始传出数据,注意数据的接受,不然将会漏掉数据。DS1302的读字节代码如下value=value1; if(IOr) value=value|0x80; SCK1; SCK0;RST0;return value;uchar read_ds1302(uchar add)uchar value,i;RST0;SCK0;RST1;write_ds1302_byte(add);IOin;NOP();for(i=0;i8;i+)需要注意的的是:DS1302写一个字节和读一个字节都是低位在前高位在后;3.5 74HC595的简介74HC595芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。 74HC595是8位串行输入/输出或者并行输出移位寄存器,具有高阻、关、断状态。 三态。特点 8位串行输入 8位串行或并行输出 存储状态寄存器,三种状态 输出寄存器可以直接清除 100MHz的移位频率 输出能力 并行输出,总线驱动 串行输出; 标准 中等规模集成电路应用 串行到并行的数据转换 Remote control holding register. 描述 595是告诉的硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线74HC595引脚图:QAQH:三态输出引脚GND:电源地SQH:串行数据输出引脚SCLR:移位寄存器清零端SCK:数据输入时钟引脚RCK:输出寄存器锁存时钟引脚OE:输出使能引脚SI:数据输入引脚VCC:电源引脚4 软件的设计温度移出显示温度l=100?l=100?温度移入时间消失显示时间和日期时间进入子程序I/O端口及各部分功能模块初始化主程序 本设计主要实现时间日期及温度的显示:首先执行时间进入程序timein();然后是以for循环,共循环执行100次读时间和刷新时间程序,然后跳出for循环执行温度进入程序wenduin();然后显示温度,在计算温度值时,会根据环境温度选择相应的温度算法;4.1 软件设计的流程图4.2 DS18B20读取负温度时流程图 该部分为温度算法判断子程序流程图,根据高位(j&0xf8)是否为0xf8来选择具体的算法程序。真假正温度算法程序负温度算法程序返回温度值温度值高8位(j&0xf8)=0xf8?读温度子程序5 结论本文研究了以ATmega16作为控制核心的32*64点阵屏,用于时间和温度的显示。刚开始时准备用AT89C52来做控制单元,但经过实践发现,由于刷新32*64点阵屏要求单片机的运算频率较高,只要刷新速率够快才能不产生闪动的现象,AT89C52型单片机并不能胜任这项任务,因为它每个指令周期是经过时钟的12分频所得到的,而且它最高支持24M晶振,这就大大限制的它的工作速率。况且要实现这些功能,程序代码页比较多,AT95C52的内存也不够,经过查资料得知,发现ATmega16这款AVR型单片机可以胜任这项任务。经过这几个月的努力学习和研究,加上老师的指导,基本上学会了使用ATmega16这款单片机,使用它对点阵屏的刷新、对DS1302时钟芯片的读取和对DS18B20温度传感器的读取相当轻松,为何使它的速率更高,本设计给ATmega16单片机使用了12M的晶振,使它拥有每秒可以执行12x106次方条指令。但是由于刷新点阵屏所需的程序比较大,还有显示需要的字模比较多,加上DS1302、DS18B20的读取程序,最后使得ATmega16单片机的内存也被用完,导致本设计没能够加上调时闹钟功能。还有就是本设计显示的负温度,由于没能真正的在负温度环境下测试,所以并未知道该功能的准确性。在显示温度时,由于读取温度需要一定的时间,所以屏幕会发暗,并伴有闪烁感。不过在以后的学习实践中,会对程序进一步的优化,合理应用内存,力求完美。在本设计即将完成之际,我首先要感谢我的指导老师刘彦华老师,感谢老师对我的耐心帮助和指导。从论文的选题、理论的研究、硬件的设计,软件的设计思路和论文的编写、修改及定稿等各个环节严格要求,使我在学习过程中受益匪浅。6 参考文献1 邹益民 单片机C语言教程 中国石化出版社。2 刘志民 电路分析(第三版) 西安电子科技大学出版社。3 胡宴如 模拟电子技术(第三版) 高等教育出版社。4 张大彪 电子测量技术与仪器 电子工业出版社。5 张文涛 PROTEUS仿真软件应用 华中科技大学出版社。6 杨志忠 数字电子技术 高等教育出版社。7 王川 实用电源技术 重庆大学出版社。8 霖风 51单片机到ARM征服嵌入式之AVR篇。9 胡应占 Altium Designer 6 电路设计实用教程 河南科学技术出版社。10 杜横 C语言程序设计(理实一体化教程) 机械工业出版社。11 百度文库 Baidu Library。12 百度百科 Baidu Encyclopedia。 7 附录7.1.1 程序代码由于程序代码比较长,所以本设计采用模块化编程,各模块的代码如下#ifndef _DEFINITION_H_#define _DEFINITION_H_#include#include#define uint unsigned int#define uchar unsigned char#define ser0 PORTB&=BIT(0)#define ser1 PORTB|=BIT(0)#define srch0 PORTB&=BIT(1)#define srch1 PORTB|=BIT(1)#define rc0 PORTB&=BIT(2)#define rc1 PORTB|=BIT(2)#define serl0 PORTB&=BIT(3)#define serl1 PORTB|=BIT(3)#define serh0 PORTD&=BIT(4)#define serh1 PORTD|=BIT(4)#define srcl0 PORTD&=BIT(5)#define srcl1 PORTD|=BIT(5)#define IO0 PORTC&=BIT(5)#define IO1 PORTC|=BIT(5)#define IOout DDRC|=BIT(5)#define IOin DDRC&=BIT(5)#define IOr PINC&BIT(5)#define SCK0 PORTC&=BIT(4)#define SCK1 PORTC|=BIT(4)#define SCKout DDRC|=BIT(4)#define RST0 PORTC&=BIT(6)#define RST1 PORTC|=BIT(6)#define RSTout DDRC|=BIT(6)#define DQin DDRC&=BIT(7)#define DQout DDRC|=BIT(7)#define DQ1 PORTC|=BIT(7)#define DQ0 PORTC&=BIT(7)#define DQr PINC&BIT(7)#define music0 PORTD&=BIT(7)#define music1 PORTD|=BIT(7)#define key1 (PINC&BIT(3)#define key2 (PINC&BIT(2)#define key3 (PINC&BIT(1)#define key4 (PINC&BIT(0)#endif7.1.1 各I/O端口定义.h函数:7.1.2 74HC595定义的.h代码和.c代码:.h代码#ifndef _HC595_H_#define _HC595_H_#includedefinition.hextern void delay(uint z);extern void write_595x(uchar DATA);extern void write_595s(uchar DATA);#endif.c代码:#includehc595.hvoid delay(uint z) uint x,y; for(x=z;x0;x-) for(y=80;y0;y-); void write_595x(uchar DATA) /向点阵屏下部分595写一个字节的数据 uchar i;for(i=0;i1; void write_595s(uchar DATA) /向点阵屏上部分595写一个字节的数据uchar i;for(i=0;i1;7.1.3 DS1302时钟芯片的.h和.c代码:.h代码#ifndef _DS1302_H_ #define _DS1302_H_ #includedefinition.huchar shi,fen,miao,ri,yue,nian,xingqi; uint num; void write_ds1302_byte(uchar Dat); uchar read_ds1302(uchar add); void write_ds1302(uchar add,uchar Dat); void set_sz(void); extern void read_sz(void); void write_suffx(uchar *q,uchar (*p)16); void zuoyix(uchar (*a)16,uchar *b); extern void shua1(uchar (*p)16); extern void shua2(uchar (*q)16,uchar (*p)16); extern void timein(uchar *suf,uchar (*shuj)16); #endifSCK1; SCK0; Dat=Dat1;uchar read_ds1302(uchar add)uchar value,i;RST0;SCK0;RST1;write_ds1302_byte(add);#includeds1302.h #includehc595.hvoid write_ds1302_byte(uchar Dat)uchar i;IOout;for(i=0;i8;i+) if(Dat&0x01) IO1; else IO0; .c代码write_ds1302(0x88,0x12); write_ds1302(0x86,0x03); write_ds1302(0x84,0x14); write_ds1302(0x82,0x11); write_ds1302(0x80,0x30); write_ds1302(0x8e,0x80);void read_sz(void)miao=read_ds1302(0x81);fen=read_ds1302(0x83);shi=read_ds1302(0x85);ri=read_ds1302(0x87);yue=read_ds1302(0x89);xingqi=read_ds1302(0x8b);nian=read_ds1302(0x8d); void write_suffx(uchar *q,uchar (*p)16) uchar i; for(i=0;i16;i+) qi=0xff; qi+16=0xff; qi+32=0xff; qi+48=0xff; qi+64=0xff;for(i=0;i1; if(IOr) value=value|0x80; SCK1; SCK0;RST0;return value;void write_ds1302(uchar add,uchar Dat)RST0;SCK0;RST1;write_ds1302_byte(add);write_ds1302_byte(Dat);RST0;void set_sz(void) write_ds1302(0x8e,0x00); write_ds1302(0x8c,0x12); write_ds1302(0x8a,0x01);rc0; rc1; delay(5); serh1; for(i=0;i16;i+) srch0; srch1; write_595x(*(b+num+i); write_595x(*(b+num+i+16); write_595x(*(b+num+i+32); write_595x(*(b+num+i+48); write_595x(*(b+num+i+64); write_595x(*(b+num+i+80); write_595x(*(b+num+i+96); write_595x(*(b+num+i+112); rc0; rc1; delay(5); void shua1(uchar (*p)16)uchar i; serh0; for(i=0;i16;i+) qi+80=0xff; qi+96=0xff; qi+112=0xff; qi+128=(*(*(p+(shi/16)+i); qi+144=(*(*(p+(shi%16)+i); qi+160=(*(*(p+10)+i); qi+176=(*(*(p+(fen/16)+i); qi+192=(*(*(p+(fen%16)+i); qi+208=(*(*(p+10)+i); qi+224=(*(*(p+(miao/16)+i); qi+240=(*(*(p+(miao/16)+i); voidzuoyix(uchar (*a)16,uchar *b) uchar i; serh0; for

温馨提示

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

评论

0/150

提交评论