基于ATmega16单片机的电子时钟设计_毕业设计.doc_第1页
基于ATmega16单片机的电子时钟设计_毕业设计.doc_第2页
基于ATmega16单片机的电子时钟设计_毕业设计.doc_第3页
基于ATmega16单片机的电子时钟设计_毕业设计.doc_第4页
基于ATmega16单片机的电子时钟设计_毕业设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

基于atmega16单片机的电子时钟设计物理与电子工程学院 电子信息科学与技术专业(职教) 2009级 罗德龙指导教师 宋培森摘 要:随着科学技术的发展电子时钟在日常的生活中应用的相当的多。本文介绍了一款基于atmega16单片机为主控芯片的数字电子时钟设计。其中主要包括atmega16单片机、独立键盘、ds1302芯片、lcd1602液晶显示、以及相关外围电路并在protues仿真平台上运行。关键词:atmega16单片机;ds1302芯片;独立键盘;lcd1602 abstract:with the development of science and technology electronic clock in the daily life of the application is quite long. this paper introduces a single chip processor as the main control chip based on atmega16 digital electronic clock design. include atmega16 microcontroller, independent keyboard, ds1302 chip lcd1602, liquid crystal display (lcd), and related peripheral circuit and in protues simulation platform operation. key words:atmega16 microcontroller;ds1302 chip;independent keyboard;lcd1602 1 前言液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧等许多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。本文中详细介绍了基于atmega16单片机控制下的162液晶屏显示设计,此设计基于ds1302的时钟电路方便实用,电路设计简单。2 avr单片机介绍2.1 avr单片机简介avr单片机是1997年由atmel公司研发出的增强型内置flash的risc精简指令集高速8位单片机。avr的单片机可以广泛应用于计算机外部设备、工业实时控制、仪表仪器、通讯设备、家用电器等各个领域。1997年,由atmel公司挪威设计中心的a先生和v先生,利用atmel公司的flash新技术,共同研发出risc精简指令集高速8位单片机,简称avr。2.2 atmega16简介atmega16是基于增强的avr risc结构的低功耗8 位cmos微控制器。由于其先进的指令集以及单时钟周期指令执行时间,atmega16 的数据吞吐率高达1 mips/mhz,从而可以减缓系统在功耗和处理速度之间的矛盾。atmega16 avr 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与运算逻单元(alu) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的cisc 微控制器最高至10 倍的数据吞吐率。atmega16 有如下特点:16k字节的系统内可编程flash(具有同时读写的能力),512 字节eeprom,1k 字节sram,32 个通用i/o 口线,32 个通用工作寄存器,用于边界扫描的jtag 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(t/c),片内/外中断,可编程串行usart,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益的adc ,具有片内振荡器的可编程看门狗定时器,一个spi串行端口,以及六个可以通过软件进行选择的省电模式。2.3 atmega16产品特性高性能、低功耗的8位avr微处理器先进的risc 结构131条指令大多数指令执行时间为单个时钟周期32个8位通用工作寄存器全静态工作工作于16mhz时性能高达16mips只需两个时钟周期的硬件乘法器非易失性程序和数据存储器16k 字节的系统内可编程flash,擦写寿命: 10,000次具有独立锁定位的可选boot代码区,通过片上boot程序实现系统内编程,真正的同时读写操作512 字节的eeprom,擦写寿命: 100,000次1k字节的片内sram可以对锁定位进行编程以实现用户程序的加密jtag 接口( 与ieee 1149.1 标准兼容)符合jtag 标准的边界扫描功能支持扩展的片内调试功能通过jtag 接口实现对flash、eeprom、熔丝位和锁定位的编程外设特点两个具有独立预分频器和比较器功能的8位定时器/计数器一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器具有独立振荡器的实时计数器rtc四通道pwm8路10位adc,8个单端通道,2个具有可编程增益(1x, 10x, 或200x)的差分通道面向字节的两线接口两个可编程的串行usart可工作于主机/ 从机模式的spi串行接口具有独立片内振荡器的可编程看门狗定时器片内模拟比较器特殊的处理器特点上电复位以及可编程的掉电检测片内经过标定的rc振荡器片内/片外中断源6种睡眠模式: 空闲模式、adc 噪声抑制模式、省电模式、掉电模式、standby 模式以及扩展的standby模式 u i/o和封装32个可编程的i/o口2.4 工作电压:atmega16l:2.7 - 5.5vatmega16: 4.5 - 5.5v2.5 atmega16 引脚功能vcc 电源正gnd电源地端口a (pa7.pa0)做为a/d转换器的模拟输入端。端口a 为8 位双向i/o 口,具有可编程的内部上拉电阻。其输出缓冲器具atmega引脚图有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口a 处于高阻状态。端口b(pb7.pb0)为8位双向i/o 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口b 处于高阻状态。端口b也可以用做其他不同的特殊功能.端口c(pc7.pc0) 为8 位双向i/o 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口c 处于高阻状态。如果jtag接口使能,即使复位出现引脚 pc5(tdi)、 pc3(tms)与 pc2(tck)的上拉电阻被激活。端口c 也可以用做其他不同的特殊功能。 端口d(pd7.pd0)为8 位双向i/o 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口d 处于高阻状态。端口d 也可以用做其他不同的特殊功能.reset 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。持续时间小于门限间的脉冲不能保证可靠复位。xtal1 反向振荡放大器与片内时钟操作电路的输入端。xtal2 反向振荡放大器的输出端。avcc avcc是端口a与a/d转换器的电源。不使用adc时,该引脚应直接与vcc连接。使用adc时应通过一个低通滤波器与vcc 连接。aref a/d 的模拟基准输入引脚。2.6 avr单片机的应用区域avr单片机应用区域包括:空调控制板、打印机控制板、智能电表、智能手电筒、led控制屏和医疗设备等领域。3 162液晶显示屏介绍162液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字等。3.1 162液晶屏显示屏的引脚定义首先,我们来看162的引脚定义,162的引脚是很整齐的sip单列直插封装。表1是液晶屏的引脚定义。表1 接口信号说明表编号符号引脚说明编号符号引脚说明1vss电源地9d2data 1/02vdd电源正极10d3data 1/03vee液晶显示偏压信号11d4data 1/04rs数据命令/选择端(h/l)12d5data 1/05r/w读/写信号(h/l)13d6data 1/06e使能信号14d7data 1/07d0data 1/015leda背光源正极8d1data 1/016ledk背光源该液晶屏采用标准的16脚接口,我们只需要关注一下几个管脚:1 脚:vss 为地电源。 2 脚:vdd 接 5v 正电源。3脚:vee,液晶屏显示偏压信号,用于调整液晶屏的显示对比度,一般会外界电位器用以调整偏压信号,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“阴影”,使用时可以通过一个10k的电位器调整对比度。4脚:rs,数据/命令选择端,即对寄存器进行选择,高电平时选择数据寄存器、低电平时选择指令寄存器。5脚:r/w,读写选择端,高电平时进行读操作,低电平时进行写操作。6脚:e,使能信号,其实时162的逐句控制时钟信号,利用该信号的上升沿实现对液晶屏的数据传输。714脚:8位双向数据线。15脚:背光阳极。16脚:背光阴极。3.2 162液晶显示屏的指令说明162液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)。162液晶屏内部模块共有11条控制指令,如表2所示。表2 控制命令表序号指令rsr/wd7d6d5d4d3d2d1d01清屏00000000012光标返回000000001*3输入方式00000001i/ds4显示开关0000001dcb5移位000001s/cr/l*6功能设置00001dlnf*7cgram地址设置0001a5 a4 a3 a2 a1 a08ddram地址设置001a6 a5 a4 a3 a2 a1 a09忙标志/读地址计数器01bfac6 ac5 ac4 ac3 ac2 ac1 ac010cgram/ddram数据写10写数据11cgram/ddram数据读11读数据指令1:清显示,指令码01h,光标复位到地址00h位置 指令2:光标复位,光标返回到地址00h 指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移s: 屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示c:控制光标的开与关,高电平表示有光标,低电平表示无光标b:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器ram地址设置 指令8:ddram地址设置 指令9:读忙信号和光标地址 bf:忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据 3.3 162液晶显示屏的时序在操作液晶屏,我们应该对它的工作时序非常熟悉,这里介绍了162液晶显示屏的两个写时序:写指令和写入数据。写指令,即设置162液晶显示屏的工作方式:需要把rs置为低电平,rw置为低电平,然后将数据送到数据口d0d7,最后e引脚一个高脉冲将数据写入。写数据,即在液晶屏上实现显示时:需要把rs置为高电平,rw置为低电平,然后将数据送到d0d7,最后e引脚一个高脉冲将数据写入。图1 162液晶显示屏时序图注意:162液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。当然,162提供了读忙信号的方法:当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号。3.4 162液晶屏的ram地址映射及标准字库表液晶模块内部的字符发生存储器(cgrom)已经存储了128个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写和常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a” 。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。液晶屏第一行的首地址是80h,第二行的首地址是c0h。表3是液晶屏的grom中的字符代码与图形对应关系。表3 字符代码与图形对应表高位低位00000010001101000101011001110000gram0pp0001!1aqaq0010”2brbr0011#3cscs0100$4dtdt0101%5eueu0110&6fvfv01117gwgw1000(8hxhx1001)9iyiy1010*:jzjz1011+;kk1100,nn1111/?o_o4 ds1302芯片介绍 ds1302是美国dallas公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态ram,采用spi 三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和ram数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5v 。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。ds1302的外部引脚分配如图2所示及内部结构如图3 所示。ds1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图2 引脚图图3 内部结构各引脚的功能为: vcc1 :主电源;vcc2:备份电源。当vcc2vcc1+0.2v时,由vcc2向ds1302供电,当vcc2 vcc1时,由vcc1向ds1302供电。 sclk:串行时钟,输入,控制数据的输入与输出; i/o :三线接口时的双向数据线; ce :输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,ce开始控制字访问移位寄存器的控制逻辑;其次,ce提供结束单字节或多字节数据传输的方法。 ds1302有下列几组寄存器: ds1302有关日历、时间的寄存器共有12个,其中有7 个寄存器(读时81h 8dh ,写时80h 8ch ),存放的数据格式为bcd码形式。 表4 ds1302有关日历、时间的寄存器度寄存器写寄存器bit7bit6bit5bit4bit3bit2bit1bit0范围81h80hch10秒秒005983h82h10分分005985h84h12/24010a/p时时1-12/0-2387h86h0010日日13189h88h00010月月1128bh8ah00000周日178dh8ch10年年00998fh8ehwp0000000小时寄存器(85h 、84h )的位7 用于定义ds1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5 是 ,当为 1 时,表示 pm。在 24小时模式时,位5 是第二个10小时位。 秒寄存器(81h 、80h )的位 7 定义为时钟暂停标志(ch)。当该位置为1 时,时钟振荡器停止,ds1302处于低功耗状态;当该位置为0 时,时钟开始运行。 控制寄存器(8fh 、8eh )的 位7 是写保护位(wp),其它 7 位均置为0 。在任何的对时钟和ram的写操作之前,wp位必须为0 。当wp位为1 时,写保护位防止对任一寄存器的写操作。 ds1302有关ram的地址 ds1302 中附加31字节静态ram的地址见表所示。表5 静态ram读地址写地址数据范围c1hc0h00ffhc3hc2h00ffhc5hc4h00ffh、fdhfch00ffhds1302的工作模式寄存器 所谓突发模式是指一次传送多个字节的时钟信号和ram数据。表6 工作模式工作模式寄存器读寄存器写寄存器时钟突发模式寄存器clock burstbfhbehram突发模式寄存器ram burstffhfeh此外,ds1302还有充电寄存器等。2 读写时序说明 ds1302是spi 总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。 要想与ds1302通信,首先要先了解ds1302的控制字。1rama4a3a2a1a0rdckwr控制字(即地址及命令字节)控制字的最高有效位(位7 )必须是逻辑 1 ,如果它为 0 ,则不能把数据写入到ds1302中。 位6 :如果为 0 ,则表示存取日历时钟数据,为1 表示存取ram数据; 位5 至位1 (a4a0):指示操作单元的地址; 位0 (最低有效位):如为0 ,表示要进行写操作,为1 表示进行读操作。 控制字总是从最低位开始输出。在控制字指令输入后的下一个sclk 时钟的上升沿时,数据被写入ds1302,数据输入从最低位(0位)开始。同样,在紧跟8 位的控制字指令后的下一个sclk 脉冲的下降沿,读出ds1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图4 。图4 数据读写时序5 仿真软件介绍5.1 protues简介protues软件是英国labcenter electronics公司出版的eda工具软件。它不仅具有其它eda工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。proteus是世界上著名的eda工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086和msp430等。5.2 protues的特点 1. 原理布图 2. pcb自动或人工布线3. spice电路仿真 4. 互动的电路仿真。用户甚至可以实时采用诸如ram,rom,键盘,马达,led,lcd,ad/da,部分spi器件,部分iic器件。 5. 仿真处理器及其外围电路。可以仿真51系列、avr、pic、arm、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,protues建立了完备的电子设计开发环境。5.3 protues工作界面介绍protues的工作界面是一种标准的windows界面,如下图所示,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。 图5 protues界面图6 硬件设计6.1系统框图本系统所包含模块:主控芯片atmega16、lcd1602液晶显示模块、独立键盘模块、指示灯电路、ds1302时钟模块、以及电源。另外还有背光电压显示电路。图6 6.2 protues仿真图及电路原理图protues仿真图电路原理图6.3 独立键盘该键盘是三路独立的按键回路,当d端口读取的电平为高电平时不动作,说明没有按键按下;当任意一个电路的按键按下时,该段口读取的电平就为低电平执行相应的操作。按钮主要功能:k1:按下此按钮可以执行对时间的更改且相应的时间指示灯点亮;对应键值为:00001011。k2:按下此按钮可以实现时间地址的切换并且相应的指示灯点亮;对应键值为:00001101。k3:按下此按钮可以执行对时间的增1操作,对应键值为:00001110。 图7 6.4 背光电压显示电位器的中间分为两路,一路接液晶的vee端,另一路接单片机pa3端。经过软件处理后将值显示在液晶屏上。模数转换:ad转换结果:adc=vin*1024/vrefadc 多工选择寄存器 admux图8图9bit 7:6 refs1:0: 参考电压选择如table 83所示,通过这几位可以选择参考电压。如果在转换过程中改变了它们的设置,只有等到当前转换结束 (adcsra寄存器的adif置位 ) 之后改变才会起作用。如果在aref引脚上施加了外部参考电压,内部参考电压就不能被选用了。表7 参考电压选择refs1refs0参考电压选择00aref,内部vref关闭01avcc,aref引脚外加滤波电容10保留112.56v的片内基准电压源,aref引脚外加滤波电容在本文我们选择avcc,aref引脚外加滤波电容。bit 5 adlar: adc转换结果 左对齐adlar影响adc转换结果在adc数据寄存器中的存放形式。adlar置位时转换结果为左对齐,否则为右对齐。adlar的改变将立即影响adc数据寄存器的内容,不论是否有转换正在进行。关于这一位的完整描述请见p207“adc数据寄存器 adcl及adch” 。bits 4:0 mux4:0: 模拟通道与增益选择位通过这几位的设置,可以对连接到adc的模拟输入进行选择。也可对差分通道增益进行选择。如果在转换过程中改变这几位的值,那么只有到转换结束(adcsra寄存器的adif置位)后新的设置才有效。表8 模拟通道与增益选择mux4.0单端输入正差分输入负差分输入增益00000adc0n/a00001adc100010adc200011adc300100adc400101adc500110adc600111adc701000n/aadc0adc010x01001adc1adc010x01010adc0adc0200x01011adc1adc0200x01100adc2adc210x01101adc3adc210x01110adc2adc2200x01111adc3adc2200x10000adc0adc11x10001adc1adc11x10010adc2adc11x10011adc3adc11x10100adc4adc11x10101adc5adc11x10110adc6adc11x10111adc7adc11x11000adc0adc21x11001adc1adc21x11010adc2adc21x11011adc3adc21x11100adc4adc21x11101adc5adc21x111101.22 v (vbg)n/a111110 v (gnd)adc 控制和状态寄存器 a adcsra图10bit 7 aden: adc使能aden置位即启动adc,否则adc功能关闭。在转换过程中关闭adc将立即中止正在进行的转换。bit 6 adsc: adc开始转换在单次转换模式下,adsc置位将启动一次adc转换。在连续转换模式下,adsc置位将启动首次转换。第一次转换(在adc启动之后置位adsc,或者在使能adc的同时置位adsc)需要25 个adc时钟周期,而不是正常情况下的13个。第一次转换执行adc初始化的工作。在转换进行过程中读取adsc的返回值为1”,直到转换结束。adsc清零不产生任何动作。bit 5 adate: adc 自动触发使能adate置位将启动adc自动触发功能。触发信号的上跳沿启动adc转换。触发信号源通过sfior寄存器的adc触发信号源选择位adts设置。bit 4 adif: adc中断标志在adc转换结束,且数据寄存器被更新后,adif置位。如果adie及sreg中的全局中断使能位i也置位,adc转换结束中断服务程序即得以执行,同时adif硬件清零。此外,还可以通过向此标志写1来清adif。要注意的是,如果对adcsra进行读修改写操作,那么待处理的中断会被禁止。这也适用于sbi及cbi指令。bit 3 adie: adc中断使能若adie及sreg的位i置位,adc转换结束中断即被使能。bits 2:0 adps2:0: adc 预分频器选择位由这几位来确定xtal与adc输入时钟之间的分频因子。表9 预分频adps2adps1adps0分频因子0002001201040118100161013211064111128adc 数据寄存器 adcl 及adchadlar = 0图11adlar = 1图12adc转换结束后,转换结果存于这两个寄存器之中。如果采用差分通道,结果由2的补码形式表示。读取adcl之后,adc数据寄存器一直要等到adch也被读出才可以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高于8比特,那么仅需读取adch就足够了。否则必须先读出adcl再读adch。admux寄存器的adlar及muxn会影响转换结果在数据寄存器中的表示方式。如果adlar为1,那么结果为左对齐;反之 ( 系统缺省设置 ),结果为右对齐。6.5 指示灯电路每路指示灯指示功能:pc0路:秒寄存器显示pc1路:分寄存器显示pc2路:时寄存器显示pc3路:日寄存器显示pc4路:月寄存器显示pc5路:星期寄存器显示pc6路:年寄存器显示pd4路:是否允许调节时间显示,灯亮为允许。 图136.6 ds1302外围电路22pf电容和32768hz晶振组成振荡电路,提供ds1302正常工作频率。vcc2为主电源,vcc1为辅助电源。rst为读写使能端,i/o 为三线接口时的双向数据线,sclk为串行时钟,输入,控制数据的输入与输出。图146.7 单片机外围电路22pf电容和8mhz晶振组成振荡电路,提供单片机正常工作频率。reset为上电复位端,当通电后单片即不管以前的程序工作在哪里,一切复位从“零”开始。avcc是端口a与a/d转换器的电源。aref是a/d 的模拟基准输入引脚。图157 软件设计在前面几节中,我们了解了atmega16单片机、162液晶显示屏与ds1302的接口设计以及液晶屏的时序,那么这部分阐述的是单片机对液晶屏显示和ds1302的驱动控制。软件工作流程如下:程序流程图8 结束语经过几个月的研究与实验,终于完成了这篇论文。在做这个课题的时侯遇到了许多困难,大部分通过查阅资料和看书以及研究别人成功的例子就能解决了,但少部分问题任不能解决,通过老师和同学的帮助终于解决。感谢帮助我的老师和同学。参考文献:1 hs162-4液晶显示使用说明资料.2 ds1302_数据手册.3 atmega16中文资料.4 proteus中文入门教程.5 贺敬凯,刘德新,管明祥.单片机系统设计、仿真与应用。西安电子科技大学出版社,2011.6沈文. avr单片机c语言开发入门指导. 清华大学出版社,2003年.7丁化成,耿德根,李军凯. avr单片机应用设计. 北京航空航天大学出版社,2002年.8金春林,邱慧芳,张皆喜. avr系列单片机c语言编程与应用实例. 清华大学出版社,2003年.附件:/* 设计介绍:使用8mhz的晶振,ds1302芯片以及1602液晶屏。使用独立键盘设置或者调节时间。13个10k的电阻,1个100欧的电阻,8个led指示灯。2个22pf的电容。*/#include #define io porta.0#define sclk porta.1#define rst porta.2#define rs porta.5#define rw porta.6#define e porta.7#define uchar unsigned char#define uint unsigned int/*uchar l_dat = base on ; uchar f_dat = atmega16 design;*/uchar set_time 7 = 0x00,0x00,0x13,0x21,0x07,0x06,0x12; /初始时间缓冲区uchar address=0x7e; /时间地址中间变量uchar qiehuan; /切换时间标志位uchar n=0; /定义时间调节变量uchar int0=0; /定义中断变量uchar time8 =0x00; /定义时、分、秒显示缓冲区uchar day8=0x00; /定义年、月、日、星期显示缓冲区 int d3=0,0,0; /定义电压显示缓冲区/*延时函数*/void delayus(uint us) /1us延时函数 uint i; us=us*5/4; /5/4是在8mhz晶振下,通过软件仿真反复实验得到的数值 for(i=0;ius;i+);void delayms(uint ms) /1ms延时函数 uint i,j; for( i=0;ims;i+) for(j=0;j1141;j+);/1141是在8mhz晶振下,通过软件仿真反复实验得到的数值/*液晶屏判断忙函数*/void lcd_busy() uchar temp; /定义中间变量存取从lcd读取的值 ddrb=0x00; /定义b端口为输入 rs=0; /选择指令寄存器 rw=1; /进行读操作 do e=1; delayms(1); /延时1ms temp=pinb; /读取b端口信号 e=0; delayms(1); /延时1ms while(temp&0x80); /判断忙标志位是否为1 ddrb=0xff; /b端口置为输出,为想液晶屏写数据准备/* 写指令函数*/void lcd_wcmd(uchar cmd) lcd_busy(); /判断液晶屏是否忙 delayms(1); /延时1ms rs=0; /选择指令寄存器 rw=0; /进行写操作 e=0; delayms(1); /延时1ms portb=cmd; /把数据赋值给b端口 e=1; /开始写指令 delayms(1); /延时1ms e=0; delayms(1); /延时1ms/*写数据函数*/void lcd_wdat(uchar dat) lcd_busy(); /判断液晶屏是否忙 delayms(1); /延时1ms rs=1; /选择数据寄存器 rw=0; /进行写操作 e=0; delayms(1); /延时1ms portb=dat; /把数据赋值给b端口 e=1; /开始写数据 delayms(1); /延时1ms e=0;/*lcd 初始化函数*/void lcd_init() delayms(15); /等待lcd电源稳定 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delayms(5); /延时5ms lcd_wcmd(0x0c); /显示开,关光标 delayms(5); /延时5ms lcd_wcmd(0x06); /移动光标 delayms(5); /延时5ms lcd_wcmd(0x01); /清除lcd的显示内容 delayms(5); /延时5ms/*写时间函数*/void ds1302writebyte(uchar dat) uchar m; /定义循环变量 ddra=0xf7; /设置ds1302的io端口为输入 sclk=0; /串行时钟低电平 delayus(10); /延时10us for(m=0;m=1; /数据右移一位,准备传送下位数据 /*读时间函数*/uchar ds1302readbyte() uchar n,dat; /定义循环变量,存取数据变量 ddra=0xf6; /设置ds1302的io端口为输出 delayus(10); /延时10us for(n=0;n=1; /数据右移一位,准备接受下位数据 ddra=0xf7; /设置ds1302的io端为输入 return dat; /返回数据/*向ds1302读数据函数*/uchar ds1302read(uchar cmd) uchar dat; /定义存取ds1302读取数据的变量 rst=0; /初始化rst置为0 sclk=0; /初始化sclk置为0 rst=1; /初始化rst置为1,传输开始 ds1302writebyte(cmd); /传输命令字,要读取时间/日历地址 dat=ds1302readbyte(); /读取要得到的时间/日期 sclk=1; /时钟拉高 rst=0; /读取结束 return dat; /返回时间/日期/*向ds1302写数据函数*/void ds1302write(uchar c

温馨提示

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

最新文档

评论

0/150

提交评论