AVR实验mega16多功能电子钟
ATMEGA16单片机实验
![ATMEGA16单片机实验](https://img.taocdn.com/s3/m/4539c43e2bf90242a8956bec0975f46527d3a71a.png)
ATMEGA16单⽚机实验实验⼀软件和硬件的认识⼀、实验⽬的:1、掌握硬件原理。
2、初步掌握实验板的使⽤⽅法。
3、熟悉软件⼯作界⾯。
⼆、实验仪器:ATmage16实验板⼀块PC机⼀台三、实验内容及步骤:1、插上电源,按下开关。
观察批⽰灯是否点亮。
电源(可输⼊7~12V)ATmega16管脚图2、由原理可知I/O⼝的批⽰灯为低电平亮,在实验板上取地与I/O⼝相接,观察是否点亮。
I/O⼝LED显⽰与接⼝3、打开编程界⾯,点击各栏,认识各栏的⽤途。
A VRICC IDE 软件的⼯作界⾯4、输⼊以下程序:#includeint main(void){DDRA = 0xff;/* all outputs */DDRB = 0xff;/* all outputs */DDRC = 0xff; /*all outputs */DDRD = 0xff; /*all outputs */PORTA = 0x00; /* 输出低电平*/PORTB = 0x00; /* 输出低电平*/PORTC = 0x00; /* 输出低电平*/PORTD = 0x00; /* 输出低电平*/while(1);}观察I/O⼝的灯是否被点亮。
实验⼆I/O⼝的输⼊与输出⼀、实验⽬的:1、了解IO⼝的结构;2、熟悉IO⼝的特性;3、掌握IO⼝的控制。
⼆、实验仪器:ATmage16实验板⼀块PC机⼀台三、实验原理:作为通⽤数字I/O 使⽤时,A VR 所有的I/O 端⼝都具有真正的读-修改-写功能。
这意味着⽤SBI 或CBI 指令改变某些管脚的⽅向( 或者是端⼝电平、禁⽌/ 使能上拉电阻) 时不会改变其他管脚的⽅向( 或者是端⼝电平、禁⽌/ 使能上拉电阻)。
输出缓冲器具有对称的驱动能⼒,可以输出或吸收⼤电流,直接驱动LED。
所有的端⼝引脚都具有与电压⽆关的上拉电阻。
并有保护⼆极管与VCC 和地相连,如Figure23 所⽰。
在控制I/O时,分别由⽅向寄存器DDRX与数据寄存器PORTX控制I/O的状态,如下表。
多功能六位电子钟说明书
![多功能六位电子钟说明书](https://img.taocdn.com/s3/m/00a767609b6648d7c1c7467e.png)
多功能六位电子钟说明书一、原理说明:1、显示原理:显示部分主要器件为3只两位一体共阳极数码管,驱动采用 PNP 型三极管驱动,各端口配有限流电阻,驱动方式为动态扫描,占用 P3.0~P3.5 端口,段码由P1.0~P1.6输出。
冒号部分采用 4 个Φ3.0的红色发光二极管,驱动方式为独立端口P1.7驱动。
2、键盘原理:按键 S1~S3 采用复用的方式与显示部分的 P3.5、P3.4、P3.2 口复用。
其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机消除抖动并赋予相应的键值。
3、迅响电路及输入、输出电路原理:迅响电路由有源蜂鸣器和 PNP 型三极管组成。
其工作原理是当 PNP 型三极管导通后有源蜂鸣器立即发出定频声响。
驱动方式为独立端口驱动,占用P3.7端口。
输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,5.1K定值电阻R6,排针J3并联。
当有源蜂鸣器无迅响时J3输出低电平,当有源蜂鸣器发出声响时J3输出高电平,J3可接入数字电路等各种需要。
驱动方式为迅响复合输出,不占端口。
输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的 PNP 型三极管的基极电路中接入排针J2。
引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。
驱动方式为复合端口驱动,占用P3.7端口。
4、单片机系统:本产品采用了单片机AT89C2051为核心器件,并配合所有的外围电路,具有上电复位的功能,无手动复位功能。
二、使用说明:1、功能按键说明:S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。
2、功能及操作说明:操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。
中途如果长按(大于2秒)S1,则立即回到时钟功能的状态。
1)时钟功能:上电后即显示10:10:00 ,寓意十全十美。
2)校时功能:短按一次 S1,即当前时间和冒号为闪烁状态,按动 S2 则小时位加 1,按动 S3则分钟位加1,秒时不可调。
PCF8563在电子时钟设计中的应用
![PCF8563在电子时钟设计中的应用](https://img.taocdn.com/s3/m/07770935eefdc8d376ee3257.png)
PCF8563在电子时钟设计中的应用引言数字时钟已成为时钟设计的主导方向,广泛应用于实时控制系统。
数字时钟实质是一个对标准频率计数的计数电路,通常由晶体振荡电路、分频电路、时间计数电路、译码驱动电路等组成。
这里提出一种电子时钟系统设计方案,是以avr 单片机mega16作为控制核心,采用PCF8563时钟/日历器件以及数码管显示,通过硬件设计及软件编程实现的。
1 mega16简介ATmega16是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。
由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
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 模式下则允许振荡器和异步定时器继续工作。
用AVRMEGA16单片机控制实现的数据采集系统
![用AVRMEGA16单片机控制实现的数据采集系统](https://img.taocdn.com/s3/m/e1004c1d866fb84ae45c8d85.png)
・
3 6・
化 工 自 动 化 及 仪 表
第3 3卷
调整电阻调 整放大倍数 1 5 第 二级 通过 O:7的 和 , 1 ' 0
增益调整电阻调整放 大倍数 0 2 ,. , , ,0 . 5 0 5 15 1 。调 整过程通过继 电器组 来完成 , 即通过继 电器控 制增
片 6 17进行隔离 。 N3
口实现对仪器设备 的双 向控制与数 据传送 的一 种解
决方案 。
2 系统 总体设计方案
系统 总框 图设计如 图 1 所示 。
放大电路如 图 2所示 。
圆鱼
图 1 采集系统 总框 图
L
耗_ ⅥR8 nv +
Ⅶ
一
3
- — -
璺
- -
_ ‘
4翌
— - - —
A 60来调节增益作为一级放大 ; D2 使用放 大器 O 0 P7 作为二 级放 大 ; 之后用 A 7 3 D 85进行数模转换 , 最后 采用 隔离芯片 6 17作为隔离 。 N3
系统 的量程 选 择 包 括 :0m 2 V 5 V, 1 V,0m ,0m
1 0 mV , 0 0 2 0 mV, 0 5 0 mV , , , , 0 V , 0 V 。 1V 2 V 5 V 1 2
AD7 3 8 5 G ND 0N C
R5 l K 0
13 0 3
+5VI
30 3 ] 6 1 N 37
I U
l几 厂1 8
位高速低功耗 芯片 , 的采样速 度可 高达 50k z 它 0 H , 远远高于 1 H , 0k z满足 了 A D采样速率。 / 由于所采集信 号为化学 反应参 数 , 要求 采样 信 号之间彼此完 全独立而 无任何 相关 , 采样环境 要 且 求抗干扰能力 强 , 以在信号转换 成数 字信号后 经 所
基于AVR单片机Mega16的电子时钟设计
![基于AVR单片机Mega16的电子时钟设计](https://img.taocdn.com/s3/m/8cfc4428aaea998fcc220e2f.png)
t e Ba i , C, a d o h rh g ~ e e a g a e p o r mmi gT e ee t n c co k w ih i d ig e y Me a 6 i n to l h sc n t e ih lv ll n u g r g a n . h l cr i l c h c s es n d b g l s o n y o lw— o t smp e h r w r , b t a y t c i v y tm g a inT e d sg t o f l er i lc a e n t e AVR o c s, i l a d a e u s o a h e e s se mi r t .h e in me h d o e ti c co k b s d o h e o e o Me a 6 al h r c e CD1 0 s ito u e n t i p p r n h o r s o d n i u te e t o i n o a g a d c d i h S a e , d t e c re p n i g cr i l cr n c a d s me ln u g a c i
中 图分 类 号 : P 7 T 23
文献 标 识 码 : A
文 章 编 号 :0 6 6 7 (0 80 = 0 80 10 - 9 720 )7 0 1 - 2
De i n o n l c r ni l c b s d n AVR e a1 sg fa e e t o c co k a e o M g 6
摘 要 : g1 Mea 6是 一 款 采 用先 进 R S IC精 简指 令 , 内置 A D 的 8 单 片机 , 支 持 低 电压 联 机 Fah和 E P O 写入 功 / 位 可 ls ER M 能 : 时还 支持 B s 同 ai C 等 高级 语 言编 程 。 c和 用它 设 计 电子 时 钟 不 仅 成 本 低 , 件 简单 , 且 很 容 易实 现 系统 移 植 。 硬 而 介
增强版AVRmega16与mega32开发板 说明书
![增强版AVRmega16与mega32开发板 说明书](https://img.taocdn.com/s3/m/b663468acc22bcd126ff0c8b.png)
增强版A VRmega16与mega32开发板使用手册Vision 0.7板载资源简介:增强版A VR mega16/32开发板是A VR与虚拟仪器全新开发的一款A VR开发板,适应芯片A T90S8535,ATmega16,A Tmega32,开发板最新版本V3.2。
本开发版拥有如下资源:(1)电源部分:在12V 输入电压,开发板上提供高稳定的3.3V、5V 和12V 的电源,配有电源指示灯、极性保护电路及开关。
同时板上有多个高频和低频的电源滤波电容。
(2) ISP下载接口:标准的10PIN 的ISP 下载接口,用于AVR 程序的下载。
(3) JTAG仿真接口:JTAG在线仿真调试接口,使用JTAGICE 进行在线调试。
(4)芯片插座:PORTA、PORTB、PORTC、PORTD分别引出32 个插座,JTAG&ISP、复位、晶振、电源引脚都直接链接与芯片连接。
部分只能使用固定引脚的外部功能通过跳线连接,如串口,I2C,AT45DB041。
(5)晶振复位电路:开发板提供一个7.3728M 晶振以及一个晶振插槽,可由实验者自己选用。
(6)扩展插槽:板上预留三条扩展槽,按照Power、Control、Port、NC的格式进行预定义,其中Power提供3.3V、5V 和12V 两种。
扩展槽与扩展功能板兼容,可以实现其他的特殊功能扩展,完全兼容ATmega128 功能板。
(7)串口:使用MAX232 芯片作串口通讯控制,标准RS232接口。
(8) USB:采用CP2102 实现USB转串口的功能。
(9) 4 位独立按键(10) 4*4 矩阵键盘:16个按键可以接成4×4的矩阵键盘,Int中断接口,完全实现键盘中断扫描的要求。
(11) 18B20:温度传感器芯片。
(12) 24C01:外部扩展EEPROM ,通过I2C 方式与单片机通讯。
(13) ADC:模数转换电路,其中接有多个可调电阻用于分压及测试。
ATMEGA16定时器0
![ATMEGA16定时器0](https://img.taocdn.com/s3/m/f97d6f7327284b73f2425067.png)
ATMEGA16定时器0(2013-04-09 21:51:35)转载▼分类:AVR标签:avr定时器0MEGA16定时器0T/C0 是一个八位定时器,主要有定时、外部事件计数、产生PWM 波形这几个功能,我们在使用这些功能之前,首先要设置T/C0 工作在合适的工作模式下。
T/C0 有四种工作模式,分别是普通模式、CTC 模式、快速PWM、相位可调的PWM 模式四种。
模式设置通过T/C0 的控制寄存器TCCR0 来完成。
1.普通模式在此模式下,T/C0 的计数寄存器TCNT0 在时钟的驱动下不停累加。
当计满后(计数值达到最大,8 位寄存器最大计数值为0xff),由于数值的溢出寄存器清零重新开始累加。
当计数器溢出后,TIFR 中的溢出标志位TOV0 会置位,也可触发中断。
所以我们可以通过查询或中断的方式得知定时器的溢出从而进行相关处理。
此模式适合定时与计数。
关于定时和计数,这里的定时功能是T/C0 在对时钟计数达到一定的值后引发中断,达到了定时功能,然而本质的过程是计数工作。
那么这里所说的计数功能是外部事件计数。
实例:T/C0 定时实验,将T/C0 设置为普通模式,对1024 分频的系统时钟进行计数,计满发生中断,40 次中断递增一个计数用的变量,主函数则不停显示这个变量。
第一步:开总中断,SREG |= 0X80;第二步:开T/C0 溢出中断第三步:模式设置、分频设置、匹配输出模式设置T/C0 控制寄存器用于设置工作模式,时钟分频和波形输出模式。
这里T/C0 设置为普通模式,WGM00-WGM01设置为00。
此模式下定时器的TOP 值,也就是能够达到的最大计数值为0xFF。
TOV0 在计数器计满后置位,也就是计到MAX,八位的定时器计数达到255 为计满。
低三位设置定时器时钟。
T/C0 在系统时钟的分频或外部时钟的驱动下递增或递减。
系统时钟也就是晶振的大小是11.0592MHZ。
此实验中,设置为1024 分频。
avrMEGA16单片机控制DS1302时钟芯片1602液晶显示
![avrMEGA16单片机控制DS1302时钟芯片1602液晶显示](https://img.taocdn.com/s3/m/d1a760e20508763231121239.png)
avr MEGA16单片机控制DS1302时钟芯片1602液晶显示/*程序名(program name) : 时钟芯片控制程序;概述 : 基于本程序的开发板是本人自主研发的YF-A1 AVR MEGA16单片机芯片开发板,信号辅助硬件工具有一部8通道的24兆赫兹的逻辑分析仪和一部万用表,通俗的讲,此程序就是开发板的操作系统,以MEGA16A为中央控制芯片,来控制DS1302时钟芯片,使其时间数据显示在1602液晶屏上;我用业余时间大概写了三天左右....得以完善,这次我写的比较顺利,错误只有两点,一是将写好的程序下载入芯片后,时间不走,错误在于写错了时序,用逻辑分析仪捕捉信号后,修正,KO! 二是时间可以走,但是跑秒区并非从0走到59,问题在于显示时,直接显示BCD码,并未将BCD码转换为十进制数,修正后OK!此程序还用到了定时器模块,定时每100毫秒读一次时间数据,并显示在液晶屏上;心得: 此次又突破了以往的程序量,这是我写的目前最大的一个程序,由于AVR芯片IO口控制比较复杂,所以程序语句比较多,但是此程序还有精简的空间,IO口的初始化很重要!finish time: 2014年3月7日13:16:14 作者: 肖邦;QQ: 14-545-07665 ;TEL: SORRY 保密;地址: 新疆昌吉回族自治州昌吉市;梦想: 将托尼*斯塔克成为现实;*/#include ;#include ;//此头文件用于中断服务,本程序中可以省略; typedef unsigned char uint8;typedef unsigned int uint16;void init_io(void) //====初始化所有io口;{DDRA=0XFF;PORTA=0XFF;DDRB=0XFF;PORTB=0X00;DDRC=0XFF;PORTC=0X00;DDRD=0XFF;PORTD=0X00;}//================IO口的位操作================== void rs(uint8 a) //指令/数据位/ ===========DS1302时钟位;{if(a) { PORTB|=1;>;=1;}}uint8 ds_read(void) // DS1302读取函数;{uint8 j=0,temp=0;DDRB&=~(1;>;=1;if((PINB&0X10)==0X10)//如果PB4口读到1;{temp|=0x80;//装载数据;}rs(1); //下降沿有效;delay2(); //时钟脉宽延时;rs(0);}DDRB|=1<<4; // rw引脚输出状态;PORTB|=1<<4; //rw引脚输出1;rs(0);rw(0);return (temp);}void w_1302(uint8 addr,uint8 dat) //写一个地址,写一个数据;{ds_write(addr);ds_write(dat);}void ds_wp(uint8 j) //j==1:不能够写入数据,j==0:可以写入数据;{reset_1302(); //初始化时钟,数据,片选线;ds(1);w_1302(0x8e,j?0x80:0); //三目运算;ds(0);void set_time(uint8 * dat) //设置时间;{uint8 r=0 ,t=0, ad=0x80;for(r=0;r<7;r++) //BCD码的转换.{t=dat[r]%10;dat[r]=dat[r]/10;dat[r]=(dat[r]*16)+t;}ds_wp(0);//可以写入数据;for(r=0;r<7;r++){reset_1302(); //初始化1302;ds(1); //传输使能开;ds_write(ad); //写入"写"操作地址; ds_write(dat[r]);//写入时间数据;ds(0);ad+=2;//地址加2;}ds_wp(1);//禁止写入数据;void read_time(uint8 * dat){uint8 j=0,addr=0x81 ;for(j=0;j<7;j++){reset_1302();ds(1); //传输使能开;ds_write(addr); //发送读取地址; dat[j]=ds_read(); //接收读到的数据; ds(0); //传输使能关;addr+=2; //读取地址加2;}}void timer0(void) //定时器模块函数; {TCNT0=22; //每5毫秒溢出一次;TCCR0=0X04; //256分频;}int main(void){uint8 j=0;uint8 sj[]={20,23,13,7,3,5,14}; init_io(); //初始化所有io口;init_lcd(); //初始化1602液晶屏; play(0x82,'2');delay1(3,2);play(0x83,'0');delay1(3,2);play(0x86,'-');delay1(3,2);play(0x89,'-');delay1(3,2);play(0x8d,'(');delay1(3,2);play(0x8f,')');delay1(3,2);play(0xc4,':');delay1(3,2);play(0xc7,':');delay1(3,2);buzz(); //蜂鸣器叫;delay1(3,2);set_time(sj); //设置时间;timer0(); //运行定时器;while(1){if(TIFR&0X01) //定时器溢出了;{j++;TCNT0=22;TIFR|=0X01;//溢出位置一清零;}if(j==20){j=0;read_time(sj);play(0xc9,sj[0]%16+'0'); //秒个位; play(0xc8,sj[0]/16+'0'); //秒十位;play(0xc6,sj[1]%16+'0'); //分个位; play(0xc5,sj[1]/16+'0'); //分十位; play(0xc3,sj[2]%16+'0'); //时个位; play(0xc2,sj[2]/16+'0'); //时十位;play(0x8b,sj[3]%16+'0'); //号个位; play(0x8a,sj[3]/16+'0'); //号十位; play(0x88,sj[4]%16+'0'); //月个位; play(0x87,sj[4]/16+'0'); //月十位;play(0x8e,sj[5]+'0'); //星期;play(0x85,sj[6]%16+'0'); //秒个位; play(0x84,sj[6]/16+'0'); //秒十位;}}}。
多功能电子钟设计实验报告
![多功能电子钟设计实验报告](https://img.taocdn.com/s3/m/ccd99851f01dc281e53af004.png)
十二翻一模块
时间计数模块
图 4:“12 翻 1”小时计数器
第 8 页 共 17 页
多功能电子钟设计实验报告.doc
表 2:“12”翻一小时计数时序 思路:根据时序表,在 1~9 脉冲的作用下,正常加计数,用瞬时 1010 使触发器翻转, 在 10 号脉冲来到时 LS191 清零,在 12 号脉冲来到时,LS191 变成减法计数器,在 13 号 脉冲来到时,LS74 置 0。
OUTPUT PIN 12 ISTYPE 'COM';
COUNT1=[MG3,MG2,MG1,MG0];
第 11 页 共 17 页
多功能电子钟设计实验报告.doc
COUNT2=[MS2,MS1,MS0]; OUT=[MS2,MS1,MS0,MG3,MG2,MG1,MG0]; C,X=.C.,.X.;
OUTM
PIN 13 ISTYPE 'COM ISTYPE 'COM'; //时计数器的脉冲
"CONST DECLARATIONS
EQUATIONS OUTM=!(S2&CPSS # !S2&CP0); OUTH=!(S1&CPMS # !S1&CP0); 校时电路设计在 GAL3 中,详情请见附录的 GAL3 芯片报告。
仿电台报时电路:
仿电台报时即:在每个小时最后一分钟的 51,53,55,57 秒发出 500Hz 的叫声,在 59 秒发出 1KHz 的叫声。 其逻辑表达式为:OUT_COM=R4 & R6 & R0 & R3 & MS0 & MS2 & MG0 & MG3 & CP1K +
多功能六位电子钟
![多功能六位电子钟](https://img.taocdn.com/s3/m/7987e1576fdb6f1aff00bed5b9f3f90f76c64dab.png)
多功能六位电子钟引言:随着科技的不断发展,人们对于电子产品的需求越来越高。
电子钟作为一种实用的日常物品,也在不断创新与进步。
本文将介绍一款多功能六位电子钟,其拥有多种实用功能,方便人们的生活。
一、外观设计这款多功能六位电子钟采用简约现代的外观设计,外壳采用高质量的塑料材料制作,兼具耐用性和美观度。
时钟采用LED显示屏幕,显示数字清晰可见,不受光线影响。
二、时间显示功能这款电子钟可以准确显示时分秒,并且可以通过设置进行闹钟和倒计时功能。
用户可以根据个人需求设置多个闹钟,并选择不同的铃声。
倒计时功能可以帮助人们掌握时间,并提醒完成项任务。
三、温度与湿度显示功能除了时间显示功能,这款电子钟还可以显示当前的室内温度和湿度。
这个功能对于需要具备监测环境的场合非常有用,比如办公室、仓库、实验室等。
用户可以通过设定阈值,在温度或湿度超出设定值时,电子钟会自动发出警报。
四、日历功能这款电子钟还具有日历功能,可以显示日期和星期几。
对于需要日程管理的人来说,这个功能非常实用。
用户可以通过设定提醒功能,将重要的事项输入到电子钟中,提醒自己及时处理。
五、倒计时器功能这款电子钟还可以设置倒计时器功能,能够帮助人们进行倒计时计算。
无论是烹饪、运动、学习还是工作等,倒计时器都能够提醒使用者保持高效的时间管理。
六、背光功能为了满足不同使用环境下的需求,这款电子钟还具备背光功能。
当光线不足时,用户可以通过按下背光按键,点亮背光,方便夜间使用。
七、便携性这款电子钟尺寸适中,便于携带。
无论是旅行还是外出办公,用户都可以随身携带这款电子钟。
八、电源和节能功能这款电子钟可以使用电池或者插电两种方式供电。
同时,它还具有节能功能,当电池电量不足时,电子钟会自动进入低功耗模式,延长电池寿命。
结论:这款多功能六位电子钟集时钟、温度、湿度、日历、倒计时器和背光功能于一体,方便人们的生活。
它的外观时尚,功能丰富,便携易用。
无论是在家庭、办公室还是旅行中,都能够派上用场。
语音报时的电子时钟的设计【文献综述】
![语音报时的电子时钟的设计【文献综述】](https://img.taocdn.com/s3/m/ac176ccdcc22bcd127ff0c3a.png)
文献综述电气工程及其自动化语音报时的电子时钟的设计前言:在当今繁忙的工作与生活中,时间与我们每一个人都有着非常密切的关系,每个人都受到时间的影响,为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。
电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站,码头办公室等公共场合,成为人们日常生活中必不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产带来了极大的方便,诸如定时自动报警、0按时自动打铃、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的,因此,研究数字钟及扩大其应用,有着非常现实的意义。
正文:电子时钟在我们日常生活中可以说是非常常见的,它的应用范围很广,当然我们既然知道他的用途之后,也要知道他是怎么来的,当然要做一个电子时钟可以有很多的方法。
1基于EDA仿真技术的电子时钟的设计EDA技术是将传统的“电路设计——硬件搭试——调试焊接”模式变为“功能设计——软件模拟——编程下载”方式,设计人员只需一台微机和相应的开发工具即可研制出各种功能电路。
通过EDA设计的数字钟可以实现3个功能:计时,整点报时以及重置时间,因此有3个子模块:计时、报时、重置时间。
计时模块分为秒计时器,分计时器以及整点报时模块,时计时器和星期计时器。
通过相应的仿真程序可以得到相应的仿真波形。
通过对置数信号的相应输入赋值可以实现。
这种电子系统设计技术采用自顶向下分层次,模块化设计方法,先化整为零,再优化综合,灵活通用,已成为研制,开发数字系统最理想的选择,是现代电子电路设计方法的一个趋势,体现了硬件设计向软件方向发展的新道路。
2实用多功能电子时钟的设计一种以AT89C51单片机为核心的实用多功能电子时钟,该时钟具有年、月、日、星期、时、秒显示和整点音乐报时及定时闹钟等功能。
AVR单片机数字电子钟
![AVR单片机数字电子钟](https://img.taocdn.com/s3/m/819a48cbbb4cf7ec4afed0bc.png)
《单片机技术》课程设计说明书数字电子钟院、部:电气与信息工程学院学生姓名:杨超指导教师:凌云职称讲师专业:通信工程班级:通信1201完成时间:2014年12月29日湖南工学院课程设计任务书课程:单片机技术课程设计题目:数字电子钟数字频率计数字电压表交通灯抢答器密码锁波形发生器数字温度计计算器数字式秒表适用班级:通信工程1201时间:2014~2015学年第一学期指导教师:凌云《单片机技术》课程设计任务书一、设计题目:数字电子钟、数字频率计、数字电压表、交通灯、抢答器、密码锁、波形发生器、数字温度计、计算器、数字式秒表。
二、适用班级:通信工程1201三、指导教师:凌云四、设计目的与任务:学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
五、设计内容与要求设计内容1、数字电子钟设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
2、数字频率计设计一个能够测量周期性矩形波信号的频率、周期、脉宽、占空比的频率计。
该频率计上电或按键复位后能自动显示系统提示符“P.”,进入测量准备状态。
按频率测量键则测量频率;按周期测量键则测量周期;按脉宽测量键则测量脉宽;按占空比测量键则测量占空比。
3、数字电压表设计一个能够测量直流电压的数字电压表。
测量电压范围0~5V,测量精度小数点后两位。
该电压表上电或按键复位后能自动显示系统提示符“P.”,进入测量准备状态,按测量开始键则开始测量,并将测量值显示在显示器上,按测量结束键则自动返回“P.”状态。
最全面的AVRmega16定时计数器的学习笔记
![最全面的AVRmega16定时计数器的学习笔记](https://img.taocdn.com/s3/m/0c41da32650e52ea55189828.png)
定时计数器学习笔记ATmega16一共配置了2个8位和1个16位,共3个定时计数器,它们是8位的定时计数器T/C0、T/C2和16位的定时计数器T/C1。
一、学习和使用定时计数器时,必须注意以下的基本要素:1、脉冲信号源。
脉冲信号源是指输入到定时计数器的计数脉冲信号。
通常用于定时计数器计数的脉冲信号可以由外部输入引脚提供,也可以由单片机内部提供。
2、计数器类型。
计数器类型是指计数器的计数运行方式,可分为加一(减一)计数器,单程计数或双向计数等。
3、计数器的上下限。
计数器的上下限指计数单元的最小值和最大值。
一般情况下,计数器的下限值为零,上限值为计数单元的最大计数值,即255(8位)或65535(16位)。
需要注意的是,当计数器工作在不同模式下时,计数器的上限值并不都是计数单元的最大计数值255或65535,它将取决于用户的配置和设定。
4、计数器的事件。
计数器的事件指计数器处于某种状态时的输出信号,该信号通常可以向MCU申请中断。
如当计数器计数到达计数上限值255时,产生“溢出”信号,向MCU申请中断。
二、8位定时计数器T/C0、T/C2(一)T/C0、T/C2的特点:(1)单通道计数器。
(2)比较匹配时清零计数器(自动重装特性,Auto Reload)。
(3)可产生无输出抖动(glitch-free)的,相位可调的脉宽调制(PWM)信号输出。
(4)频率发生器。
(5)外部事件计数器(仅T/C0)。
(6)带10位的时钟预分频器。
(7)溢出和比较匹配中断源(TOV0、OCF0和TOV2、OCF2)。
(8)允许使用外部引脚的32kHz手表晶振作为独立的计数时钟源(仅T/C2)。
(二)寄存器1、TCNT0——TC0计数寄存器TCNT0是T/C0的计数值寄存器。
写TCNT0寄存器将在下一个定时器时钟周期中阻塞比较匹配。
因此,在计数器运行期间修改TCNT0的内容,有可能将丢失一次TCNT0与OCR0的匹配比较操作2、OCR0——输出比较寄存器8位寄存器OCR0中的数据用于同TCNT0寄存器中的计数值进行匹配比较。
基于mega16单片机的数字时钟实验报告
![基于mega16单片机的数字时钟实验报告](https://img.taocdn.com/s3/m/c36899e5551810a6f5248673.png)
}
else
{
if(read_key_6())
{
if(tiaowei==0)
tiaowei=6;
else
tiaowei--;
}
temp1 = tiaowei%2; //检测tiaowei为奇数还是偶数
temp2 = tiaowei/2; //确定调整的是time数组的第几个
if(temp1 >=2)
4
对数码管进行编码,从右到左依次是,0;1;2;3;4;5;定义tiaowei的状态来判断哪个数码管闪亮且对其调整。Tiaowei的初始值为6,此时没有数码管闪亮,且不对任何值进行调整。当每检测到一次key2的按键时tiaowei自动减一次1,且对该编码的数码管进行半秒钟亮一次的操作和通过key1的按键来实现对其对应时钟的位进行调整。如下是其调整的部分代码:
else //调节分钟或者秒位
{
if(temp1) //调节分钟或者秒的十位
{
time[temp2]=time[temp2]+10;
if(time[temp2]>=60)
time[temp2]=的个位
{
time[temp2]++;
temp5=time[temp2]%10;
}
8
本闹铃的音乐为林俊杰--《可惜没如果》。采用15个音符,即低音区和高音区的各7个音符和高音区的第一个音符。
从网上查找资料,下图为其音符对应的不同频率:
写出的CTC模式下产生一定频率所需的计数值和基本单位时间值代码如下:
flash unsigned int t[16] = {262143,1908,1701,1515,1433,1276,1136,1012,956,865,759,716,638,568,506,470};
多功能6位电子钟说明书
![多功能6位电子钟说明书](https://img.taocdn.com/s3/m/05d9c9014a7302768e99393f.png)
多功能6位电子钟说明书一、原理说明:1、显示原理:显示部分主要器件为2位共阳红色数码管,驱动采用PNP型三极管驱动,各端口配有限流电阻,驱动方式为扫描,占用P1.0~P1.6端口。
冒号部分采用4个Φ3.0的红色发光,驱动方式为独立端口驱动,占用P1.7端口。
2、键盘原理:按键S1~S3采用复用的方式与显示部分的P3.5、P3.4、P3.2口复用。
其工作方式为,在相应端口输出高电平时读取按键的状态并由单片机支除抖动并赋予相应的键值。
3、迅响电路及输入、输出电路原理:迅响电路由有源蜂鸣器和PNP型三极管组成。
其工作原理是当PNP型三极管导通后有源蜂鸣器立即发出定频声响。
驱动方式为独立端口驱动,占用P3.7端口。
输出电路是与迅响电路复合作用的,其电路结构为有源蜂鸣器,4.7K定值电阻R16,排针J3并联。
当有源蜂鸣器无迅响时J3输出低电平,当有源蜂鸣器发出声响时J3输出高电平,J3可接入数字电路等各种需要。
驱动方式为迅响复合输出,不占端口。
输入电路是与迅响电路复合作用的,其电路结构是在迅响电路的PNP型三极管的基极电路中接入排针J2。
引脚排针可改变单片机I/O口的电平状态,从而达到输入的目的。
驱动方式为复合端口驱动,占用P3.7端口。
4、单片机系统:本产品采用AT89C2051为核心器件(AT89C2051烧写程序必须借助专用编程器,我们提供的单片机已经写入程序),并配合所有的必须的电路,只具有上电复位的功能,无手动复位功能。
二、使用说明:1、功能按键说明: S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。
2、功能及操作说明:操作时,连续短时间(小于1秒)按动S1,即可在以上的6个功能中连续循环。
中途如果长按(大于2秒)S1,则立即回到时钟功能的状态。
1、时钟功能:上电后即显示10:10:00 ,寓意十全十美。
2、校时功能:短按一次S1,即当前时间和冒号为闪烁状态,按动S2则小时位加1,按动S3则分钟位加1,秒时不可调。
多功能数字钟设计实验报告
![多功能数字钟设计实验报告](https://img.taocdn.com/s3/m/0e17df5ca66e58fafab069dc5022aaea988f4160.png)
多功能数字钟设计实验报告多功能数字钟设计实验报告一、引言数字钟是一种常见的时间显示设备,其简洁明了的显示方式受到了广泛的欢迎。
然而,随着科技的不断发展,人们对于数字钟的功能要求也越来越高。
本实验旨在设计一款多功能数字钟,以满足人们对于时间显示设备的更多需求。
二、设计原理1. 时间显示:数字钟应能准确地显示当前的时间,包括小时、分钟和秒钟。
为了实现精确的时间显示,我们采用了基于晶体振荡器的时钟电路,并结合数码管显示技术,使得时间能够以数字形式直观地呈现。
2. 日期显示:除了时间显示外,数字钟还应具备日期显示的功能。
我们通过添加一个实时时钟模块,可以获取当前的日期信息,并通过数码管显示出来。
3. 闹钟功能:为了提醒用户重要的时间节点,我们在数字钟中加入了闹钟功能。
用户可以设置闹钟的时间,并在到达设定时间时,数字钟会发出声音或震动来提醒用户。
4. 温湿度显示:为了更好地满足用户的需求,我们还在数字钟中添加了温湿度显示功能。
通过接入温湿度传感器,数字钟可以实时监测当前的温度和湿度,并将其显示在数码管上。
5. 其他功能:除了以上功能外,我们还可以根据用户需求进行扩展,如倒计时功能、闪烁效果等。
三、实验步骤1. 硬件设计:根据设计原理,我们需要选择合适的元器件进行电路的搭建,包括晶体振荡器、数码管、实时时钟模块、温湿度传感器等。
2. 电路连接:根据电路原理图,将各个元器件按照正确的连接方式进行连接,确保电路的正常工作。
3. 程序编写:通过编写合适的程序代码,实现数字钟的各项功能。
包括时间显示、日期显示、闹钟功能、温湿度显示等。
4. 调试测试:在完成硬件连接和程序编写后,我们需要对数字钟进行调试测试,确保各项功能的正常运行。
可以通过模拟不同的时间、设置不同的闹钟时间等来测试数字钟的稳定性和准确性。
5. 优化改进:根据实际测试结果,我们可以对数字钟进行优化改进,提高其性能和稳定性。
例如,优化显示效果、增加功能扩展等。
AVR Mega16中断与定时器
![AVR Mega16中断与定时器](https://img.taocdn.com/s3/m/19347ffff705cc17552709e0.png)
中断与定时器AVR Mega16 一共有21个中断源 3个外部中断 INT0、INT1、INT2 8个定时器中断3个串口中断 RXC 、TXC 、UDRESPI 、AD 、EEPROM 、模拟比较、TWI 、SPM 各一个 RESET 中断 SPI 串行传输结束SPI, STC$01411保存程序存储器内容就绪SPM_RDY$02821定时器/ 计数器0 溢出TIMER0 OVF $012 10定时器/ 计数器0 比较匹配TIMER0 COMP $026 20定时器/ 计数器1 溢出TIMER1 OVF $010 9外部中断请求2INT2 $024 19定时器/ 计数器1 比较匹配B TIMER1 COMPB $00E 8两线串行接口TWI$02218定时器/ 计数器1 比较匹配 ATIMER1 COMPA $00C7模拟比较器ANA_COMP $020 17定时器/ 计数器1 事件捕捉TIMER1 CAPT $00A 6EEPROM 就绪EE_RDY $01E 16定时器/ 计数器2 溢出TIMER2 OVF $008 5ADC 转换结束ADC $01C 15定时器/ 计数器2 比较匹配TIMER2 COMP $006 4USART , Tx 结束USART, TXC$01A 14外部中断请求1INT1 $004 3USART 数据寄存器空USART, UDRE $018 13外部中断请求0INT0 $002 2USART , Rx 结束USART, RXC $01612外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAG AVR 复位RESET$0001中断定义中断源程序地址向量号中断定义中断源程序地址向量号MCU 控制寄存器— INT0、INT1INTx 的上升沿产生异步中断请求11INTx 的下降沿产生异步中断请求0 1 INTx 引脚上任意的逻辑电平变化都将引发中断1 0 INTx 为低电平时产生中断请求0 0 说明ISCx0 ISCx1MCU 控制与状态寄存器—INT2INT2上升沿产生中断请求1INT2下降沿产生中断请求0 说明ISC2外部中断控制——通用中断控制寄存器GICRGICR 的INTx置位为允许INTx 中断 GICR 的INTx 清零为禁止INTx 中断通用中断标志寄存器-GIFR外部中断产生时,硬件自动置位对应的中断请求标志位 中断响应时,硬件自动清除中断请求标志位 中断请求标志位可以通过软件写“1”实现清零 T/C0控制寄存器TCCR0普通模式和CTC模式下:定时器中断屏蔽寄存器-TIMSKOCIE2(OCIE0): T/C2(T/C1)输出比较匹配中断允许标志位OUTPUT COMPARE INTERRUPT ENABLE TOIE2(TOIE0): T/C2(T/C1)溢出中断允许标志位OC0引脚方波频率:CTC模式下利用比较匹配产生波形输出)1(2/_OCRnNff OICLKOCn+=T0计数寄存器-TCNT0T0比较输出寄存器-OCR0定时器中断标志寄存器-TIFR特殊功能IO 寄存器-SFIPSR10: T/C1 与T/C0 预分频器复位T/C1 与T/C0 共用同一预分频器,且预分频器复位对两个定时器均有影响。
AVR之MEGA16简介
![AVR之MEGA16简介](https://img.taocdn.com/s3/m/5de93a0cba1aa8114431d939.png)
即单片微型计算机的简称,又称单片微机, 微控制器. 它是在一块半导体芯片上,集成了CPU(中 它是在一块半导体芯片上,集成了CPU(中 央处理器),ROM(程序存储器),RAM 央处理器),ROM(程序存储器),RAM (数据存储器),I/O接口,定时器/ (数据存储器),I/O接口,定时器/计数器, 中断系统等功能部件,构成了一台完整的 数字电子计算机.
Байду номын сангаас
AVR系列单片机的选型 AVR系列单片机的选型
AVR单片机系列齐全, AVR单片机系列齐全,可适用于各种不同场合的 要求.AVR单片机有3个档次: 要求.AVR单片机有3个档次: 低档Tiny系列AVR单片机: 低档Tiny系列AVR单片机: 主要有 Tiny11/12/13/15/26/28等; Tiny11/12/13/15/26/28等; 中档AT90S系列AVR 单片机: 中档AT90S系列AVR 单片机: 主要有 AT90S1200/2313/8515/8535等; AT90S1200/2313/8515/8535等; (正在淘汰或转 型到Mega中 型到Mega中) 高档ATmega系列AVR单片机: 高档ATmega系列AVR单片机: 主要有 ATmega8/16/32/64/128( ATmega8/16/32/64/128( 存储容量为 8/16/32/64/128 KB). KB).
ATmega8 & ATmega16 的相同点
两者都属于AVR的ATmega系列高档单片机 两者都属于AVR的ATmega系列高档单片机 在内核和指令上完全相同 (只要稍微留意前面说到的不同点就可以了)
AVR的开发环境 AVR的开发环境
编译软件: ICC AVR (C 编译器) GCCAVR(WinAVR) (C 编译器) 编译器) IAR AVR (C编译器,支持C和EC++等.) (C编译器,支持C EC++等.) Code Vision AVR (C编译器 ) (C编译器 BASCOMBASCOM-AVR FastAVR BASIC 是属于高阶程式语言的一种,英文名称 的全名是 "Beginner's All-Purpose Symbolic AllInstruction Code",取其首字字母简称 "BASIC", Code",取其首字字母简称 "BASIC", 适用于初学者的多功能符号指令码" 适用于初学者的多功能符号指令码"
数字电子时钟实验心得5篇
![数字电子时钟实验心得5篇](https://img.taocdn.com/s3/m/0cfc1b8dcaaedd3382c4d36f.png)
数字电子时钟实验心得5篇_数字电子时钟实验心得1_基于AVR单片机Mega_的电子时钟设计摘要】Mega_是一款采用先进RISC精简指令,内置A/D的8位单片机,可支持低电压联机Flash和EEPROM写入功能;同时还支持Basic和C等高级语言编程.用它设计电子时钟不仅成本低,硬件简单,.基于AVR单片机Mega_的电子时钟设计摘要】Mega_是一款采用先进RISC精简指令,内置A/D的8位单片机,可支持低电压联机Flash和EEPROM写入功能;同时还支持Basic和C等高级语言编程.用它设计电子时钟不仅成本低,硬件简单,而且很容易实现系统移植.介绍了如何利用AVR系列单片机Mega_及__字符液晶来设计电子时钟的方法,同时给出了相应的电路原理及部分语言程序.数字电路课程设计的心得体会为什么没人啊?都在忙本科教育评估去了.最核心的是时序逻辑电路的设计,要培养出良好的空间想象能力.高性能的数字信号处理芯片,不用标准单片机和标准嵌入系统,那速度慢,要缴纳知识产权许可费用,发达国家都是专门有针对性设计的时序逻辑电路的独立设计.例如上个世纪80年代的苹果牌个人计算机,就是用许多通用中小规模数字集成电路搭建的时序逻辑电路,国内以此仿照了中华学习机.现在的CPU设计复杂,时序逻辑电路都集成在芯片里面,集成度高,要靠高等院校的教材和实验课程,实在没法设计出低端的CPU.所以一般都是购买国外集成电路系统的构架,以此为基础设计,这就有知识产权的费用,到了流片的时候,人家要统计你的生产数量,要收费的.这就是基础教育关系的国家安全的一个例子.电子时钟课程设计报告我们刚刚做完的课程设计.给你啦__ 数字钟设计报告设计者: _2_3 _2_6 目录 1 设计目的 3 2 设计要求指标 3 2.1 基本功能 3 2.2 扩展功能 4 3.方案论证与比较 4 4 总体框图设计 4 5 电路原理分析 4 5.1数字钟的构成 4 5.1.1 分频器电路 5 5.1.2 时间计数器电路 5 5.1.3分频器电路 6 5.1.4振荡器电路 6 5.1.5数字时钟的计数显示电路 6 5.2 校时电路 7 5.3 整点报时电路 8 6系统仿真与调试 8 7.结论 8 参考文献 9 实验作品附图 10 数字钟摘要:数字钟是一种用数字电路技术实现时.分.秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用.数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路.目前,数字钟的功能越来越强,并且有多种专门的大规模集成电路可供选择.从有利于学习的角度考虑,这里主要介绍以中小规模集成电路设计数字钟的方法.经过了数字电路设计这门课程的系统学习,特别经过了关于组合逻辑电路与时序逻辑电路部分的学习,我们已经具备了设计小规模集成电路的能力,借由本次设计的机会,充分将所学的知识运用到实际中去.本次课程设计要求设计一个数字钟,基本要求为数字钟的时间周期为24小时,数字钟显示时.分.秒,数字钟的时间基准一秒对应现实生活中的时钟的一秒.供扩展的方面涉及到定时自动报警.按时自动打铃.定时广播.定时启闭路灯等.因此,研究数字钟及扩大其应用,有着非常现实的意义.1 设计目的 1.掌握数字钟的设计.组装与调试方法.2.熟悉集成元器件的选择和集成电路芯片的逻辑功能及使用方法.3.掌握面包板结构及其接线方法 4.熟悉仿真软件的使用.2 设计要求及指标 2.1基本功能 1)时钟显示功能,能够正确显示〝时〞.〝分〞.〝秒〞.2)具有快速校准时.分.秒的功能.3)用555定时器与RC组成的多谐振荡器产生一个标准频率(1Hz)的方波脉冲信号.2.2扩展功能 1)用晶体振荡器产生一个标准频率(1Hz)的脉冲信号.2)具有整点报时的功能.3)具有闹钟的功能.4)…… 3.方案论证与比较本设计方案使用555多谐振荡器来产生1HZ的信号.通过改变相应的电阻电容值可使频率微调,不必使用分频器来对高频信号进行分频使电路繁复.虽然此振荡器没有石英晶体稳定度和精确性高,由于设计方便,操作简单,成为了设计时的首选,但是由于与实验中使用的555芯片产生的脉冲相比较,利用晶振产生的脉冲信号更加的稳定,同过电压表的测量能很好的观察到这一点,同时在显示上能够更加接进预定的值,受外界环境的干扰较少,一定程度上优于使用555芯片产生信号方式.我们组依然同时设计了555和晶振两个信号产生电路.(本实验报告中着重按照原方案设计的555电路进行说明) 4. 系统设计框图数字式计时器一般由振荡器.分频器.计数器.译码器.显示器等几部分组成.在本设计中555振荡器及其相应外部电路组成标准秒信号发生器,由不同进制的计数器.译码器和显示器组成计时系统.秒信号送入计数器进行计数,把累计的结果以时 . 分 . 秒的数字显示出来.时显示由二十四进制计数器.译码器.显示器构成, 分 . 秒显示分别由六十进制计数器.译码器.显示器构成.其原理框图如图1.1所示.5.电路原理分析 5.1数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.在此使用555振荡器组成1Hz的信号.数字钟原理框图(1.1) 5.1.1振荡器电路 555定时器组成的振荡器电路给数字钟提供一个频率为1Hz的方波信号.其中OUT为输出.5.1.2时间计数器电路时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器.分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器.5.1.3分频器电路通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频.通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现.例如,将32768Hz的振荡信号分频为1HZ的分频倍数为32768( ),即实现该分频功能的计数器相当于15级2进制计数器.5.1.4振荡器电路利用555定时器组成的多谐振荡器接通电源后,电容C1被充电,当电压上升到一定数值时里面集成的三极管导通,然后通过电阻和三极管放电,不断的充放电从而产生一定周期的脉冲,通过改变电路上器件的值可以微调脉冲周期.5.1.5数字时钟的计数显示控制在设计中,我们使用的是74___0十进制计数器,来实现计数的功能,实验中主要用到了_0的置数清零功能(特点:消耗一个时钟脉冲),清零功能(特点:不耗时钟脉冲),在上级_0控制下级_0时候通过组合电路(主要利用与非门)实现,在连接电路的时候要注意并且强调使能端的连接,其将影响到.基于单片机的电子时钟的设计与制作(C语言) 要求:采用万年历芯片进行设计采用万年历芯片,其实可以用时钟芯片DS__.显示用什么,是数码管,还是LCD__?设计与制作,是要做出实物吗?要是仿真,给你一个仿真图,可以做参考._数字电子时钟实验心得2_数字电子钟的逻辑框图如图3-4所示.它由555集成芯片构成的振荡电路.分频器.计数器.显示器和校时电路组成.555集成芯片构成的振荡电路产生的信号经过分频器作为秒脉冲,秒脉冲送入计数器,计数结果通过〝时〞.〝分〞.〝秒〞译码器显示时间.1. 振荡器石英晶体振荡器的特点是振荡频率准确.电路结构简单.频率易调整.它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限止时,才达到最后稳定.这用压电谐振的频率即为晶体振荡器的固有频率.一般来说,般来说,振荡器的频率越高,计时精度越高,但耗电量将增大.如果精度要求不高也可以采用由集成电路定时器555与RC组成的多谐振荡器.如图3-4-1所示.设振荡频率f=1KHz,R为可调电阻,微调R1可以调出1KHz输出.2. 分频器由于振荡器产生的频率很高,要得到秒脉冲,需要分屏电路.本实验由集成电路定时器555与RC组成的多谐振荡器,产生1KHz的脉冲信号.故采用3片中规模集成电路计数器74LS90来实现,得到需要的秒脉冲信号.3. 计数器秒脉冲信号经过6级计数器,分别得到〝秒〞个位.十位.〝分〞个位.十位以及〝时〞个位.十位的计时.〝秒〞〝分〞计数器为六十进制,小时为十二进制.(1)六十进制计数由分频器来的秒脉冲信号,首先送到〝秒〞计数器进行累加计数,秒计数器应完成一分钟之内秒数目的累加,并达到60秒时产生一个进位信号,所以,选用一片74LS90和一片74LS92组成六十进制计数器,采用反馈归零的方法来实现六十进制计数.其中,〝秒〞十位是六进制,〝秒〞个位是十进制.如图3-4-3-1所示.(2)十二四进制计数〝_翻1〞小时计数器是按照〝_——_——_——……——_——_——_——_——……〞规律计数的,这与日常生活中的计时规律相同.在此实验中,小时的个位计数器由4位二进制同步可逆计数器74LS_1构成,十位计数器由D触发器74LS74构成,将它们级连组成〝_翻1〞小时计数器.计数器的状态要发生两次跳跃:一是计数器计到9,即个位计数器的状态为Q_Q_Q_Q00=10_,在下一脉冲作用下计数器进入暂态1_0,利用暂态的两个1即Q_Q_使个位异步置0,同时向十位计数器进位使Q10=1;二是计数器计到_后,在第_个脉冲作用下个位计数器的状态应为Q_Q_Q_Q00=00_,十位计数器的Q10=0.第二次跳跃的十位清0和个位置1信号可由暂态为1的输出端Q10,Q_,Q00来产生.图3-4-3-2 M_计数器功能表4. 译码器译码是指把给定的代码进行翻译的过程.计数器采用的码制不同,译码电路也不同.74LS48驱动器是与84_BCD编码计数器配合用的七段译码驱动器.74LS48配有灯测试LT.动态灭灯输入RBI,灭灯输入/动态灭灯输出BI/RBO,当LT=0时,74LS48出去全1.5. 显示器本系统用七段发光二极管来显示译码器输出的数字,显示器有两种:共阳极显示器或共阴极显示器.74LS48译码器对应的显示器是共阴极显示器.6. 校时电路当数字钟走时出现误差时,需要校正时间.校时电路实现对〝时〞〝分〞〝秒〞的校准.在电路中设有正常计时和校对位置.本实验实现〝时〞〝分〞的校对.对校时的要求是,在小时校正时不影响分和秒的正常计数;在分校正时不影响秒和小时的正常计数.需要注意的时,校时电路是由与非门构成的组合逻辑电路,开关S1或S2为〝0〞或〝1〞时,可能会产生抖动,为防止这一情况的发生我们接入一个由RS触发器组成的防抖动电路来控制.图3-4-6-1 校时开关的功能表3.5 实验主体电路的装调·由图3-4所示的数字中系统组成框图按照信号的流向分级安装,逐级级联.这里的每一级是指组成数字中的各个功能电路.·级联时如果出现时序配合不同步,或剑锋脉冲干扰,引起的逻辑混乱,可以增加多级逻辑门来延时.如果显示字符变化很快,模糊不清,可能是由于电源电流的跳变引起的,可在集成电路器件的电源端Vcc加退藕滤波电容.通常用几十微法的大电容与0._μF的小电容相并联.·画数字钟的主体逻辑电路图. 如图3-5图3-5 数字钟的主体电路逻辑图3.6 功能扩展电路(1)定时控制电路数字钟在指定的时刻发出信号,或驱动音响电路〝闹时〞,或对某装置的电源进行接通或断开〝控制〞.不管是闹时还是控制,都要求时间准确,即信号的开始时刻与持续时间必须满足规定的要求.例如要求上午7时59分发出闹时信号,持续时间为1分钟.本实验设计为7时59分时,音响电路的晶体管导通,则扬声器发出1KHz的声音.持续1分钟到8点整晶体管因输入端为〝0〞而截止,电路停闹.图3-6 闹时电路(2)仿广播电台整点报时电路仿广播电台整点报时电路的功能要求是,每当数字钟计时快要到整点时发出声响,通常按照4低音1高音的顺序发出间断声响,以最后一声高音结束的时刻为整点时刻.设4声低音(约500Hz)分别发生在59分51秒.53秒.55秒及57秒,最后一声高音(约1KHz)发生在59分59秒,它们的持续时间均为1秒.图3.7 整个电路的组装及调试和扩展电路检查均无连线错误并且显示正常后,将两个电路连为一个整体,接上+5V电源.观察时钟是否显示正常;是否在上午7时59分发出闹时信号,持续时间一分钟;是否有四声低音分别发生在59分51秒.53秒.55秒及57秒,最后一声高音法正在59分59秒,它们持续时间均为1秒.若不正常则检查电路各个部分,直到得到满意的结果.我们共经过两天的调试,圆满完成了这次为期两周的课程设计.四.实验总结短短的两周课程设计结束了.看着自己设计.连线.调试成功的数字电子钟,很有成就感.真的很有收获,体会到了什么是学以致用,理论与实践的差别到底有多大.以前上课都是上一些最基本的东西而现在却可以将以前学的东西做出有实际价值的东西.在这个过程中,我的确学得到很多在书本上学不到的东西,如:怎么设计一个六十.十二进制计数器,如何实现校时的防抖动等等.但也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,找了老半天结果却是接头的方向接错了,有时更是忘接地了.在学习中的小问题在课堂上不可能犯,在动手的过程中却很有可能犯.特别是在接电路时,一不小心就会犯错,而且很不容易检查出来.在调试主板电路时,十位不进位,检查电路,以为没有什么问题,后来一步一步的检查,发现总的地线没接,接上总的地线,一切正常.副版是我的同组刘玉龙连接的电路,在主板和副版连接起来后,新的问题又出现了.第一,计数太快了,正常一秒,我们设计的数字电子表却可以走两三秒,显然输入不是1Hz 的脉冲信号;第二,我们的校时电路连接正确,可是每次校时,开关S1或S2为〝0〞或〝1〞时,会产生抖动,无法正常校时.针对这两个问题,我们进行了分析,进而转化为实际的操作.我们在+5V电压和地线之间分别加了两个电容,通过滤波,选择我们需要的1Hz脉冲信号.对于无法正常校时的问题,在设计中接入一个由RS触发器组成的防抖动电路来控制校时.把时间调到上午7点58分,等7点59分准确闹钟响起,持续一分钟.再将时间跳到58分,等59分51秒.53秒.55秒及57秒都发出4声低音,最后一声高音发生在59分59秒.,持续时间都是一秒钟.数字电子钟已经成功完成了.我的动手能力又有了进一步的提高,我感到十分的高兴.同时学到了课本上没有的东西,也锻炼了自己独立解决问题的能力.这在以后的学习和生活中会有很大的用处.但是我还有不足,按照电路连接实物时,器件的摆放不够科学,最终导致了,只有自己能看懂电路的走向.不过我会在以后的学习中逐步提高,做一个动手能力强的大学生.十分感谢自动化系提供这么好的机会,让我们把学到的知识应用到实践中,同时谢谢老师的耐心指导._数字电子时钟实验心得3_数字电子钟的设计(由数字IC构成)一.设计目的1.熟悉集成电路的引脚安排.2.掌握各芯片的逻辑功能及使用方法.3.了解面包板结构及其接线方法.4.了解数字钟的组成及工作原理.5.熟悉数字钟的设计与制作.二.设计要求1.设计指标时.数字电子钟的设计(由数字IC构成)一.设计目的1.熟悉集成电路的引脚安排.2.掌握各芯片的逻辑功能及使用方法.3.了解面包板结构及其接线方法.4.了解数字钟的组成及工作原理.5.熟悉数字钟的设计与制作.二.设计要求1.设计指标时间以24小时为一个周期;显示时.分.秒;有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号.2.设计要求画出电路原理图(或仿真电路图);元器件及参数选择;电路仿真与调试;PCB文件生成与打印输出.3.制作要求自行装配和调试,并能发现问题和解决问题.4.编写设计报告写出设计与制作的全过程,附上有关资料和图纸,有心得体会.三.设计原理及其框图1.数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.图 3-1所示为数字钟的一般构成框图.图3-1 数字钟的组成框图⑴晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路.⑵分频器电路分频器电路将32768Hz的高频方波信号经32768( )次分频后得到1Hz的方波信号供秒计数器进行计数.分频器实际上也就是计数器.⑶时间计数器电路时间计数电路由秒个位和秒十位计数器.分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器.分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为_进制计数器.⑷译码驱动电路译码驱动电路将计数器输出的84_BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流.⑸数码管数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管.2.数字钟的工作原理 1)晶体振荡器电路晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定.图3-2所示电路通过CMOS非门构成的输出为方波的数字式晶体振荡电路,这个电路中,CMOS非门U1与晶体.电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波.输出反馈电阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器.电容C1.C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个_0度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能.由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确.晶体_TAL的频率选为32768HZ.该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数.从有关手册中,可查得C1.C2均为30pF.当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施.由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10MΩ.较高的反馈电阻有利于提高振荡频率的稳定性.非门电路可选74HC00.图3-2 COMS晶体振荡器 2)分频器电路通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频.通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现.例如,将32768Hz的振荡信号分频为1HZ的分频倍数为32768(_5),即实现该分频功能的计数器相当于15极2进制计数器.常用的2进制计数器有74HC393等.本实验中采用CD4_0来构成分频电路.CD4_0在数字集成电路中可实现的分频次数最高,而且CD4_0还包含振荡电路所需的非门,使用更为方便.CD4_0计数为_级2进制计数器,可以将32768HZ的信号分频为2HZ,其内部框图如图3-3所示,从图中可以看出,CD4_0的时钟输入端两个串接的非门,因此可以直接实现振荡和分频的功能.图3-3 CD4_6内部框图 3)时间计数单元时间计数单元有时计数.分计数和秒计数等几个部分.时计数单元一般为_进制计数器计数器,其输出为两位84_BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为84_BCD码.一般采用10进制计数器74HC390来实现时间计数单元的计数功能.为减少器件使用数量,可选74HC390,其内部逻辑框图如图 2.3所示.该器件为双2—5-10异步计数器,并且每一计数器均提供一个异步清零端(高电平有效).图3-4 74HC390(1/2)内部逻辑框图秒个位计数单元为10进制计数器,无需进制转换,只需将QA与CPB(下降沿有效)相连即可.CPA(下降没效)与1HZ秒输入信号相连,Q3可作为向上的进位信号与十位计数单元的CPA相连.秒十位计数单元为6进制计数器,需要进制转换.将10进制计数器转换为6进制计数器的电路连接方法如图3-5所示,其中Q2可作为向上的进位信号与分个位._数字电子时钟实验心得4_随着单片机技术的飞速发展,在其推动下,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高.时间就是金钱.时间就是生命.时间就是胜利……,准确的掌握时间和分配时间对人们来说至关重要,时钟是我们生活中必不可少的工具.电子钟的设计方法有很多种,但是基于单片机并通过LCD显示的电子时钟具有编程灵活.精确度高.便于携带.显示直观等特点.利用STC单片机对DS__时钟芯片进行读写操作并通过_864中文液晶显示实时时钟信息,这样便构成了一个单片机电子时钟.关键词:单片机,电子时钟,LCD_864,DS__,闹钟.第一章引言_57年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来.现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零.从而达到计时的功能,是人民日常生活补课缺少的工具.石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时.分.秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好.该电子时钟由STC89C52,按键,LCD_864中文液晶显示器,DS__等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A VR课程设计数字时钟物联网专业一、课程目的通过课程设计,充分利用所学知识,将知识整合,实现最基本的数字时钟。
二、课程要求1、时间显示、日历、并且显示屏可以切换2、秒表,可以记录多个时间,可以加入时间3、叫醒闹钟设置,闹钟等4、温度显示5、记事提醒子模块:液晶,按键,DS1302时钟,温度传感器,其他等三、功能设计1、时间显示:通过调用ds1302时间函数,实现时间的显示。
通过按键二的控制,显示四行数据,第二行显示时间,其余三行可自由添加;按键零实现调制时间的分钟数和时钟数,按键一为加一控制,按键二为减一控制,按键七为跳回主界面控制。
2、日历设置:同样是通过调用ds1302日历函数,实现日历的显示。
通过按键二的控制,跳入日历显示界面,第二行显示日历,其余三行可自由发挥;按键零实现调制天、月和年,按键一为加一控制,按键二为减一控制,按键七为跳回主界面。
3、闹钟显示:实现蜂鸣器和时间函数的同时调用,在当前时间等于闹钟时间时,可以自行跳出闹钟界面,按键七可返回之前界面;在主菜单项,可以通过按键三实现闹钟界面显示,按键零可实现闹钟时间的小时和分钟的调制,按键一为加一,按键二为减一,按键七跳回主界面。
闹钟自动跳出提醒,按键七可以退出闹钟响应。
4、显示屏显示:整个显示屏的显示直接调用DS12864显示,菜单六栏,分别为时钟显示,日历显示,闹钟显示,温度显示,记事本及秒表,通过按键控制相应的区域。
四、课程器材A VR实验箱一台五、课程连线1、按键JP37接PB口,实现按键控制2、ds12864的D口,接PD口,实现显示屏显示3、RS,RW,E分别接PA5,PA6,PA74、ds1302的SCK,I/C,RST口分别接PA0,PA1,PA2,实现时钟显示5、ds1820的JP39接PA3,实现温度传感器6、ds1820的JP16接PA4,实现蜂鸣器六、课程代码DS1302#include <mega16.h>#define PA0 0#define PA1 1#define PA2 2/*复位脚*/#define RST_CLR PORTA &= ~(1 << PA2)/*电平置低*/#define RST_SET PORTA |= (1 << PA2)/*电平置高*/#define RST_IN DDRA &= ~(1 << PA2)/*方向输入*/#define RST_OUT DDRA |= (1 << PA2)/*方向输出*//*双向数据*/#define IO_CLR PORTA &= ~(1 << PA1)/*电平置低*/#define IO_SET PORTA |= (1 << PA1)/*电平置高*/#define IO_R PINA & (1 << PA1)/*电平读取*/#define IO_IN DDRA &= ~(1 << PA1)/*方向输入*/#define IO_OUT DDRA |= (1 << PA1)/*方向输出*//*时钟信号*/#define SCK_CLR PORTA &= ~(1 << PA0)/*时钟信号*/#define SCK_SET PORTA |= (1 << PA0)/*电平置高*/#define SCK_IN DDRA &= ~(1 << PA0)/*方向输入*/#define SCK_OUT DDRA |= (1 << PA0)/*方向输出*/#define ds1302_sec_add 0x80 //秒数据地址#define ds1302_min_add 0x82 //分数据地址#define ds1302_hr_add 0x84 //时数据地址#define ds1302_date_add 0x86 //日数据地址#define ds1302_month_add 0x88 //月数据地址#define ds1302_day_add 0x8a //星期数据地址#define ds1302_year_add 0x8c //年数据地址#define ds1302_control_add 0x8e //控制数据地址#define ds1302_charger_add 0x90#define ds1302_clkburst_add 0xbeunsigned char time_buf[8] = {0x20,0x14,0x05,0x14,0x23,0x59,0x00,0x02};/*向DS1302写入一字节数据*/void ds1302_write_byte(unsigned char addr, unsigned char d) {unsigned char i;RST_SET; /*启动DS1302总线*//*写入目标地址:addr*/IO_OUT;addr = addr & 0xFE;/*最低位置零*/for (i = 0; i < 8; i ++) {if (addr & 0x01) {IO_SET;}else {IO_CLR;}SCK_SET;SCK_CLR;addr = addr >> 1;}/*写入数据:d*/IO_OUT;for (i = 0; i < 8; i ++) {if (d & 0x01) {IO_SET;}else {IO_CLR;}SCK_SET;SCK_CLR;d = d >> 1;}RST_CLR; /*停止DS1302总线*/ }/*从DS1302读出一字节数据*/unsigned char ds1302_read_byte(unsigned char addr) {unsigned char i;unsigned char temp;RST_SET; /*启动DS1302总线*//*写入目标地址:addr*/IO_OUT;addr = addr | 0x01;/*最低位置高*/for (i = 0; i < 8; i ++) {if (addr & 0x01) {IO_SET;}else {IO_CLR;}SCK_SET;SCK_CLR;addr = addr >> 1;}/*输出数据:temp*/IO_IN;for (i = 0; i < 8; i ++) {temp = temp >> 1;if (IO_R) {temp |= 0x80;}else {temp &= 0x7F;}SCK_SET;SCK_CLR;}RST_CLR; /*停止DS1302总线*/return temp;}/*向DS302写入时钟数据*/void ds1302_write_time(void) {ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护ds1302_write_byte(ds1302_sec_add,0x80); //暂停//ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充电ds1302_write_byte(ds1302_year_add,time_buf[1]); //年ds1302_write_byte(ds1302_month_add,time_buf[2]); //月ds1302_write_byte(ds1302_date_add,time_buf[3]); //日ds1302_write_byte(ds1302_day_add,time_buf[7]); //周ds1302_write_byte(ds1302_hr_add,time_buf[4]); //时ds1302_write_byte(ds1302_min_add,time_buf[5]); //分ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒ds1302_write_byte(ds1302_control_add,0x80); //打开写保护}/*从DS302读出时钟数据*/void ds1302_read_time(void) {time_buf[1]=ds1302_read_byte(ds1302_year_add); //年time_buf[2]=ds1302_read_byte(ds1302_month_add); //月time_buf[3]=ds1302_read_byte(ds1302_date_add); //日time_buf[4]=ds1302_read_byte(ds1302_hr_add); //时time_buf[5]=ds1302_read_byte(ds1302_min_add); //分time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7F;//秒time_buf[7]=ds1302_read_byte(ds1302_day_add); //周}/*DS302初始化函数*/void ds1302_init(void) {RST_CLR; /*RST脚置低*/SCK_CLR; /*SCK脚置低*/RST_OUT; /*RST脚设置为输出*/SCK_OUT; /*SCK脚设置为输出*/}DS18B20#include <mega16.h>#include <delay.h>#define PA3 PORTA3#define DQ_IN DDRA &= ~(1 << PA3) /*设置输入*/#define DQ_OUT DDRA |= (1 << PA3) /*设置输出*/#define DQ_CLR PORTA &= ~(1 << PA3) /*置低电平*/#define DQ_SET PORTA |= (1 << PA3) /*置高电平*/#define DQ_R PINA & (1 << PA3) /*读了电平*/unsigned char flag; /*中断标志缓存*//*延时函数延时时间:i X 10 + 16uS。
CPU频率为:1MHz。
*/void delay_10us(unsigned char i) {if (i == 0) {return ;}while (i--) {delay_us(1);// NOP();delay_us(1);// NOP();delay_us(1);// NOP();delay_us(1);// NOP();}}/*DS18B20复位函数*/unsigned char ds1820_reset(void) {unsigned char i;flag = SREG; /*中断保护*/SREG&=0x7F;//CLI(); /*关中断*/DQ_OUT;DQ_CLR;delay_10us(49); /*延时500uS(480-960)*/DQ_SET;DQ_IN;delay_10us(7); /*延时80uS*/i = DQ_R;delay_10us(49); /*延时500uS(保持>480uS)*/ if (flag & 0x80) { /*恢复中断状态*/SREG|=0x80;//SEI();}if (i) {return 0x00;}else {return 0x01;}}/*DS18B20字节读取函数*/unsigned char ds1820_read_byte(void) {unsigned char i;unsigned char value = 0;flag = SREG; /*中断保护*/SREG&=0x7F;//CLI(); /*关中断*/for (i = 8; i != 0; i--) {value >>= 1;DQ_OUT;DQ_CLR;delay_us(4);DQ_SET;DQ_IN;delay_us(10);if (DQ_R) {value|=0x80;}delay_10us(5); /*延时60uS*/}if (flag & 0x80) { /*恢复中断状态*/SREG|=0x80;//SEI();}return(value);}/*DS18B20字节写入函数*/void ds1820_write_byte(unsigned char value) {unsigned char i;flag = SREG; /*中断保护*/SREG&=0x7F;//CLI(); /*关中断*/ for (i = 8; i != 0; i--) {DQ_OUT;DQ_CLR;delay_us(4);// NOP(); /*延时4uS*/// NOP();// NOP();// NOP();if (value & 0x01) {DQ_SET;}delay_10us(7); /*延时80uS*/DQ_SET; /*位结束*/value >>= 1;}if (flag & 0x80) { /*恢复中断状态*/SREG|=0x80;//SEI();}}/*启动ds1820转换*/void ds1820_start(void) {ds1820_reset();ds1820_write_byte(0xCC); /*勿略地址*/ds1820_write_byte(0x44); /*启动转换*/}/*DS8B20读取温度信息*/unsigned int ds1820_read_temp(void) {unsigned int i;unsigned char buf[9],pp;pp=ds1820_reset();if(pp==0x01){//有传感器ds1820_write_byte(0xCC); /*勿略地址*/ds1820_write_byte(0xBE); /*读取温度*/for (i = 0; i < 9; i++) {buf[i] = ds1820_read_byte();}i = buf[1];i <<= 8;i |= buf[0];return i;}elsereturn(0x07D0);}DS12864#include <mega16.h>#include <string.h>#define uchar unsigned char#define uint unsigned int#define RS (1<<5)//0010 0000#define RW (1<<6)//0100 0000#define EN (1<<7)//1000 0000void time_ms(uint ms){for(;ms>1;ms--);}//写数据void WriteData(unsigned char WDLCM)//101{//ReadStatusLCM(); //检测忙//time_ms(100);PORTA|=RS; //RS=1 PORTA=0000 0001time_ms(100);PORTA&=~RW; //RW=0 PORTA=0000 0001time_ms(100);PORTA|=EN; //EN=1 PORTA=0000 0001 time_ms(100);PORTD=WDLCM; //输出数据time_ms(100);PORTA&=~EN; //EN=0time_ms(100);}//写指令void WriteCommand(unsigned char WCLCM) //001 {//ReadStatusLCM(); //根据需要检测忙PORTA&=~RS; //RS=0time_ms(100);PORTA&=~RW; //RW=0time_ms(100);PORTA|=EN; //EN=1time_ms(100);PORTD=WCLCM; //输出指令time_ms(100);PORTA&=~EN; //EN=0time_ms(100);}//读状态:检测忙void ReadStatus()//011{uchar temp;uchar flag = 1;while(flag==1){DDRD=0x00; //端口D改为输入PORTD=0xff;time_ms(100);PORTA&=~RS; //RS=0time_ms(100);PORTA|=RW; //RW=1time_ms(100);PORTA|=EN; //EN=1time_ms(1000);temp = PIND; //读端口Dtime_ms(1000);DDRD=0xff; //端口D改为输入time_ms(100);PORTA&=~EN; //EN=0time_ms(100);if(temp>>7==0)flag = 0;}}//LCM初始化void LCMInit(void){WriteCommand(0x38); //三次显示模式设置,不检测忙信号0011 1000功能设置WriteCommand(0x38);WriteCommand(0x38);WriteCommand(0x38); //显示模式设置,开始要求每次检测忙信号WriteCommand(0x08); //关闭显示0000 1000WriteCommand(0x01); //显示清屏0000 0001WriteCommand(0x06); //显示光标移动设置0000 0110 脱离睡眠模式WriteCommand(0x0C); //显示开及光标设置0000 1100}void LCMClear(){WriteCommand(0x01);delay_ms(5);}void DisplayList(unsigned char X,char *DData){unsigned char length;unsigned char i=0;char *p;p = DData;length = strlen(p);//WriteCommand(0x08);//关闭显示0000 1000WriteCommand(X);//10000000 10010000 10001000 10011000WriteCommand(0x06);//显示光标移动设置0000 0110 脱离睡眠模式WriteCommand(0x0C);//显示开及光标设置0000 1100WriteCommand(X);for(i=0;i<length;i++){WriteData(DData[i]);i++;WriteData(DData[i]);}}BELL//PA7口用一条1pin线连接到小喇叭的jp16#include <mega16.h> //包含型号头文件#include <stdio.h> //标准输入输出头文件#include "bell.h" //包含自定义常量头文件#define uchar unsigned char#define uint unsigned int#pragma interrupt_handler Timer1_Ov:10/*-------------两只老虎-------------*/unsigned char MusicTable2[77]={13,2, 15,2, 17,2, 13,1, 0,1,13,2, 15,2, 17,2, 13,1, 0,1,17,2, 18,2, 20,2, 0,2,17,2, 18,2, 20,2, 0,2,20,1, 22,1, 20,1, 18,1, 17,2, 13,2,20,1, 22,1, 20,1, 18,1, 17,2, 13,2,15,2, 8,2, 13,2, 0,2,15,2, 8,2, 13,2, 0,2,0xff};/*-----------------新年好------------------*/unsigned char MusicTable1[129]={ 13,1, 13,1, 13,2, 8,2,//音符,拍数,17,1, 17,1, 17,2, 13,2,13,1, 17,1, 20,2, 20,2,18,1, 17,1, 15,2, 0,2,15,1, 17,1, 18,2, 18,2,17,1, 15,1, 17,2, 13,2,13,1, 17,1, 15,2, 8,2,12,1, 15,1, 13,2, 0,2,13,1, 13,1, 13,2, 8,2, //音符,拍数,17,1, 17,1, 17,2, 13,2,13,1, 17,1, 20,2, 20,2,18,1, 17,1, 15,2, 0,2,15,1, 17,1, 18,2, 18,2,17,1, 15,1, 17,2, 13,2,13,1, 17,1, 15,2, 8,2,12,1, 15,1, 13,2, 0,2,0xff};//0, 1, #1, 2, #2, 3, 4, #4, 5, #5, 6, #6, 7,uintToneTable[37]={ZERO,DO_L,DOA_L,RE_L,REA_L,MI_L,FA_L,FAA_L,SO_L,SOA_L,LA_L, LAA_L,TI_L,DO ,DOA ,RE ,REA ,MI ,FA ,FAA ,SO ,SOA ,LA ,LAA ,TI ,DO_H,DOA_H,RE_H,REA_H,MI_H,FA_H,FAA_H,SO_H,SOA_H,LA_H,LAA_H,TI_H};uint tone;/*******************************************函数名称: Timer1_Ov功能: 定时器1溢出中断服务函数(完成单个音的产生)参数: 无返回值: 无********************************************/void Timer1_Ov(void){if(tone)//若不是休止符,则发声{TCNT1=tone; //计数值装入寄存器PORTA^=BIT(BEEP);//蜂鸣器接口电平翻转}}/*******************************************函数名称: Timer1_init功能: Timer1的初始化参数: 无返回值: 无********************************************/void Timer1_init(void){TCCR1A=0x00; //普通端口操作TCCR1B=0x01; //8分频SREG|=0x80; //开放全局中断}/*******************************************函数名称: Music功能: 完成整曲的音乐演奏参数: pmusic--曲谱数组指针返回值: 无********************************************/void Music(unsigned char *pMusic){while(*pMusic!=0xFF) //0xFF为音乐结尾符{TIMSK=0x04; //Timer1溢出中断使能tone=ToneTable[*pMusic]; //取音调频率TCNT1=tone; //将频率值对应的计数值写入计时器,开始发声pMusic++; //乐谱音符指针+1 ,取拍数Delayms((*pMusic)*10); //按拍数延时Delayms((*pMusic)*10);TIMSK=0x00; //发声结束,屏蔽Timer1溢出中断pMusic++; //乐谱音符指针+1 ,取下一音符}Delayms(1000); //曲谱结束,等待}主函数#include <mega16.h>#include <delay.h>#include "12864.c"#include "ds1302.c"#include "ds1820.c"#include "bell.c"#define uchar unsigned char#define uint unsigned intuchar x[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x 29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x60,0x6 1,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x7 8,0x79,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x90,0x91,0x92,0x93,0x94,0x9 5,0x96,0x97,0x98,0x99};uchar led_buf[5],y[3]={0x00,0x00,0x10};char char_1[]={"闹钟:09:00:00"};char char_2[]={"2014年05月05日"};char char_3[]={"时间:00:00:00"};char char_4[]={"温度:20.1℃"};char char_5[]={"00: 00: 00"};char char1[]={" 课程设计"};char char2[]={" 1.时钟显示"};char char3[]={" 2.日历显示"};char char4[]={" 3.闹钟信号"};char char5[]={" 4.温度显示"};char char6[]={" 5.记事本"};char char7[]={" 6.秒表"};void clock(){ds1302_read_time();if(y[0]==time_buf[4]&&y[1]==time_buf[5]&&y[2]==time_buf[6]) {LCMInit();Board_init( ); //初始化开发板/Timer1_init(); //Timer1初始化while(1){ds1302_read_time();DisplayList(0x80,"闹钟时间到~");DisplayList(0x88,char_1);//DisplayList(0x98,"按键七可退出闹钟");PORTA.4=0;delay_ms(500);PORTA.4=1;delay_ms(500);if((PINB&(1<<7))==0){PORTA.4=1;LCMInit();break;}}}}void timedisplay(){int a,b,count=0;while(1){clock();//DisplayList(0x80,"可调时钟");//DisplayList(0x88,"按键一:加");//DisplayList(0x98,"按键二:减");ds1302_read_time();char_3[6] = (time_buf[4] >> 4) + '0';/*时*/char_3[7] = (time_buf[4] & 0x0F) + '0';char_3[10] = (time_buf[5] >> 4) + '0';/*分*/char_3[11] = (time_buf[5] & 0x0F) + '0';char_3[14] = (time_buf[6] >> 4) + '0';/*秒*/char_3[15] = (time_buf[6] & 0x0F) + '0'; DisplayList(0x90,char_3);for(a=0;a<60;a++) //分if(x[a]==time_buf[5])break;for(b=0;b<24;b++) //时if(x[b]==time_buf[4])break;if((PINB&(1<<0))==0){count++;}if(count==1){delay_ms(30);DisplayList(0x95," ");delay_ms(20);if((PINB&(1<<1))==0){a++;if(a==60)a=0;time_buf[5]=x[a];ds1302_write_byte(0x82,time_buf[5]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){a--;if(a<0)a=59;time_buf[5]=x[a];ds1302_write_byte(0x82,time_buf[5]);delay_ms(5);ds1302_write_time();}}if(count==2){delay_ms(30);DisplayList(0x93," ");delay_ms(20);if((PINB&(1<<1))==0){b++;if(b==24)b=0;time_buf[4]=x[b];ds1302_write_byte(0x84,time_buf[4]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){b--;if(b<0)b=23;time_buf[4]=x[b];ds1302_write_byte(0x84,time_buf[4]);delay_ms(5);ds1302_write_time();}}if(count==3){count=0;}if((PINB&(1<<7))==0){break;LCMInit();}}}void setclock(){int i=0,j=0,account=0;ds1302_read_time();char_1[6] = (y[0] >> 4) + '0';/*时*/char_1[7] = (y[0] & 0x0F) + '0';char_1[10] = (y[1] >> 4) + '0';/*分*/char_1[11] = (y[1] & 0x0F) + '0';char_1[14] = (y[2] >> 4) + '0';/*秒*/char_1[15] = (y[2] & 0x0F) + '0';for(i=0;i<60;i++) //分if(x[i]==y[1])break;for(j=0;j<24;j++) //时if(x[j]==y[0])break;while(1){clock();//DisplayList(0x80,"闹钟设定");//DisplayList(0x88,"按键一:加");//DisplayList(0x98,"按键二:减");DisplayList(0x90,char_1);ds1302_read_time();if((PINB&(1<<0))==0){account++;}if(account==1){delay_ms(30);DisplayList(0x95," ");delay_ms(20);if((PINB&(1<<1))==0){i++;if(i==60)i=0;y[1]=x[i];char_1[10] = (y[1] >> 4) + '0';/*分*/char_1[11] = (y[1] & 0x0F) + '0';ds1302_write_byte(0x82,y[1]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){i--;if(i<0)i=59;y[1]=x[i];char_1[10] = (y[1] >> 4) + '0';/*分*/char_1[11] = (y[1] & 0x0F) + '0';ds1302_write_byte(0x82,y[1]);delay_ms(5);ds1302_write_time();}}if(account==2){delay_ms(30);DisplayList(0x93," ");delay_ms(20);if((PINB&(1<<1))==0){j++;if(j==24)j=0;y[0]=x[j];char_1[6] = (y[0] >> 4) + '0';/*时*/char_1[7] = (y[0] & 0x0F) + '0';ds1302_write_byte(0x84,y[0]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){j--;if(j<0)j=23;y[0]=x[j];char_1[6] = (y[0] >> 4) + '0';/*时*/char_1[7] = (y[0] & 0x0F) + '0';ds1302_write_byte(0x84,y[0]);delay_ms(5);ds1302_write_time();}}if(account==3){account=0;}if((PINB&(1<<7))==0){break;LCMInit();}}}void datedisplay(){int c,d,e,f,count=0;while(1){clock();//DisplayList(0x80,"可调日历");//DisplayList(0x88,"按键一:加");//DisplayList(0x98,"按键二:减");ds1302_read_time();char_2[0] = (time_buf[0] >> 4) + '0';/*年*/char_2[1] = (time_buf[0] & 0x0F) + '0';char_2[2] = (time_buf[1] >> 4) + '0';char_2[3] = (time_buf[1] & 0x0F) + '0';char_2[6] = (time_buf[2] >> 4) + '0';/*月*/char_2[7] = (time_buf[2] & 0x0F) + '0';char_2[10] = (time_buf[3] >> 4) + '0';/*日*/char_2[11] = (time_buf[3] & 0x0F) + '0';DisplayList(0x90,char_2);for(c=0;c<32;c++) //天if(x[c]==time_buf[3])break;for(d=0;d<13;d++) //月if(x[d]==time_buf[2])break;for(e=0;e<99;e++) //年if(x[e]==time_buf[1])break;for(f=0;f<21;f++)if(x[f]==time_buf[0])break;if((PINB&(1<<0))==0){count++;}if(count==1){delay_ms(30);DisplayList(0x95," ");delay_ms(20);if((PINB&(1<<1))==0){c++;if(c==31)c=0;time_buf[3]=x[c];ds1302_write_byte(0x86,time_buf[3]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){c--;if(c<0)c=31;time_buf[3]=x[c];ds1302_write_byte(0x86,time_buf[3]);delay_ms(5);ds1302_write_time();}}if(count==2){delay_ms(30);DisplayList(0x93," ");delay_ms(20);if((PINB&(1<<1))==0){d++;if(d==13)d=1;time_buf[2]=x[d];ds1302_write_byte(0x88,time_buf[2]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){d--;if(d<1)d=12;time_buf[2]=x[d];ds1302_write_byte(0x88,time_buf[2]);delay_ms(5);ds1302_write_time();}}if(count==3){delay_ms(30);DisplayList(0x91," ");delay_ms(20);if((PINB&(1<<1))==0){e++;if(e==100){e=0;if(++f==22)f=0;time_buf[0]=x[f];}time_buf[1]=x[e];ds1302_write_byte(0x8c,time_buf[1]);delay_ms(5);ds1302_write_time();}if((PINB&(1<<2))==0){e--;if(e<0){e=99;if(--f<0)f=21;time_buf[0]=x[f];}time_buf[1]=x[e];ds1302_write_byte(0x8c,time_buf[1]);delay_ms(5);ds1302_write_time();}}if(count==6){delay_ms(30);DisplayList(0x90," ");delay_ms(20);}if(count==4){count=0;}if((PINB&(1<<7))==0){break;LCMInit();}}}void templedisplay(){char i;while(1){clock();ds1820_start(); /*启动一次转换*/i = ds1820_read_temp(); /*读取温度数值*/i = (i * 10) / 16; /*数值处理*/i = i % 1000;led_buf[2] = i / 100;i = i % 100;led_buf[1] = i / 10;led_buf[0] = i % 10;char_4[6] = led_buf[2]+ '0';char_4[7] = led_buf[1]+ '0';char_4[9] = led_buf[0]+ '0';DisplayList(0x90,"天气预测");DisplayList(0x98,char_4);if((PINB&(1<<7))==0){break;LCMClear();}}}void main(void){bit key=0;LCMInit(); //LCM初始化ds1302_init();delay_ms(10);ds1302_write_time();ds1302_read_time();//端口初始化DDRA=0xff;PORTA=0x10;DDRB=0x00;PORTB=0xff;DDRC=0x00;PORTC=0xff;DDRD=0xff;PORTD=0x00;time_ms(5);time_ms(5);LCMInit(); //LCM初始化DisplayList(0x80," A VR 实验");DisplayList(0x90," 2012112151");DisplayList(0x88," 栗雨然");DisplayList(0x98," 神婆设计");delay_ms(900);while(1){if((PINB&(1<<0))==0){key=~key;}if(key==0){DisplayList(0x80,char1); //显示第一行DisplayList(0x90,char2); //显示第二行DisplayList(0x88,char3); //显示第三行DisplayList(0x98,char4);}if(key==1){DisplayList(0x80,char1); //显示第一行DisplayList(0x90,char5); //显示第二行DisplayList(0x88,char6); //显示第三行DisplayList(0x98,char7);}if((PINB&(1<<1))==0){LCMInit();timedisplay();LCMInit();}if((PINB&(1<<2))==0){LCMInit();datedisplay();LCMInit();}if((PINB&(1<<3))==0){LCMInit();setclock();LCMInit();}if((PINB&(1<<4))==0){LCMInit();templedisplay();LCMInit();}if((PINB&(1<<5))==0){LCMInit();DisplayList(0x90,"啦啦啦啦啦啦");DisplayList(0x88,"我不会~");DisplayList(0x98,"哈哈哈哈哈哈");delay_ms(2000);LCMInit();}if((PINB&(1<<6))==0){LCMInit();//miaobiao();LCMInit();}clock();}}七、课程显示八、课程心得通过A VR的课程学习,我们基本了解了A VR的DS1302、DS18B20、DS12864的功能设计,学习了单片机的基本操作功能,知道了A VR跑马灯、继电器、8路指示灯8路开关、数码管的静态显示、数码管的动态显示、端口按键判断技术、矩阵按键识别技术、12864及74LS17的基本操作和功能,依靠先前所学技术,逐步实现数字时钟的功能设计。