基于单片机的智能时钟设计.docx
- 文档编号:14208389
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:26
- 大小:143.38KB
基于单片机的智能时钟设计.docx
《基于单片机的智能时钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能时钟设计.docx(26页珍藏版)》请在冰点文库上搜索。
基于单片机的智能时钟设计
基于Proteus的智能时钟显示
1课程设计的任务与要求
1.1课程设计的任务
DS1302采用MAX7219控制8位LED显示时钟的设计,时钟显示年、月、日、星期、时、分、秒。
1.2课程设计的要求
由于单片机的P口有限,8位LED数码管的驱动采用相应的串入并出的芯片,在此采用MAX7219来实现LED的驱动控制。
8位LED要显示时间/日期,因此增加一个时间/日期切换键。
在DS3102时钟窗口中,时间的显示格式为:
时-分-秒;日期的显示格式为:
日-月-年。
若要调整时间/日期,应先按下“调整控制”键,再按下相应的时间/日期调整键,时间/日期调整键为加1调整。
此系统具有2008年至2030年的秒、分、时、日、月、年、星期的功能。
1.3课程设计的研究基础
Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计与分析,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩,是近年来备受电子设计爱好者青睐的一款新型电子线路设计与仿真软件。
利用Kiel软件使用汇编或c语言、调试与仿真、烧写.HEX文件到单片机中、讲单片机插入电路板进行脱机运行、完成单片机系统设计。
2基于Proteus的时钟显示系统方案制定
2.1方案提出
方案一:
采用传统的AT89C51作为的控制核心,加上LED数码管,按键,驱动控制MAX7219,时钟芯片DS1302。
按键1对时钟进行星期加1调整,按键2对时钟进行年加1调整,按键3对时钟进行月加1调整,按键4对时钟进行日加1调整,按键5对时钟进行时加1,按键6对时钟进行分钟加1,按键7对时钟进行时间/日期切换,按键8对时钟进行调整控制。
方案二:
采用FTC10F04单片机控制为核心,带有非易失性Flash程序储存器,直接外接LED数码管显示时间/日期,通过外接的按键对其进行时间/日期切换及进行相应的加1调整。
2.2方案比较
方案一:
本方案采用了MAX7219控制8位LED数码管,因为接入了MAX7219器件,可以减少占用单片机接口。
同时还接入了DS1302,它内含一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、星期、日、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。
可以简化电路,让程序更有效执行。
单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各种领域运用广泛。
方案二:
FTC10F04单片机直接控制8位LED数码管显示,通过按键进行功能调整。
数码管直接接单片机上,会占用很多单片机的接口,甚至会造成单片机的接口不够用的现象。
还需要编复杂的程序去实现时钟显示。
但它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。
其主要特点如下:
8KBFlashROM,可擦除1000次以上,数据保存10年。
2.3方案论证
由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一成本比较低,适合做设计。
同时,由于方案一接入了MAX7219器件,DS1302,方案一总体占用单片机的接口比方案二少,程序也相对简单有效,更利于设计,让功能能够尽量正确执行。
2.4方案选择
本设计采用方案一进行设计。
3基于Proteus时钟显示系统设计
3.1各单元模块功能介绍及电路设计
(1)SPI总线
SPI总线又称为同步串行外设接口,是一种符合工业标准、全双工、三线或四线通信方式的总线系统。
它允许MCU与各种外围设备以串行方式进行通信。
在SPI接口中,数据的传输需要一条时钟线、一条数据和一条控制线(有些芯片需要两条控制线)。
SPI可以工作在主模式下或从模式下。
在主模式下每位数据发送/接收需要一个时钟周期。
(2)DS1302时钟芯片
DS1302是DALLAS公司推出的SPI总线涓流充电时钟芯片,内含一个实时时钟和日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、星期、日、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。
(3)AT89C51芯片
ATMEL公司生产的AT89C51单片机采用高性能的静态80C51设计,并采用先进工艺制造,还带有非易失性Flash程序储存器。
它是一种高性能、低功耗的8位COM微处理芯片,市场应用最多。
其主要特点如下:
256字节内部RAM;
电源控制模式;
时钟可停止和恢复;
空闲模式;
掉电模式;
6个中断源;
4个中断优先级;
4个8位I/O口;
全双工增强型TUAR;
3个16位定时/计数器:
T0、T1(标准80C51)和增加的T2(捕获和比较)
全静态工作方式:
0-24MHZ
(4)MAX7219驱动控制
MAX7219是美国MAXIN(美信)公司生产的一种集成化的串行输入/输出共阴极显示驱动器。
采用三线制串行接口技术进行数据的传送,可直接与单片机连接,用户能方便地修改内部参数实现多位LED数码管的显示。
其特点如下:
它连接微处理器与8位数字的7段数字LED显示。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,8*8的静态RAM用来存储每一个数据。
允许用户对每一个数据选择编码或者不编码。
整个设备包含低功耗关闭模式。
模拟和数字亮度控制。
一个扫描限制寄存器允许用户显示1-8位数据。
还有一个让所有LED发光的检测模式。
(5)LED数码管
LED(LightEmitingDiode,发光二极管)是单片机应用系统中常用的输出设备,LED由发光二极管构成,结构简单,价格便宜。
LED数码管的结构及分类
一般共阴极LED可以不外接电阻,但共阳极中LED一定要接外接电阻
(6)按键
键盘是由若干个按键组成,是向系统提供操作人员的干预命令及数据的接口设备。
在单片机应用系统中,为了控制系统的工作状态,以及相系统中输入数据时,键盘是不可缺少的输入设备,它是实现人机对话的纽带。
键盘按其结构分为编码键盘和非编码键盘两种方式。
编码键盘——通过硬件方法产生键码,能自动识别按下的键,并产生键码值,以并行或串行的方式发送给CPU,接口简单,速度快,单硬件电路复杂。
非编码键盘——通过软件的方法产生键码,不需要专用硬件,结构简单,成本低,单速度不如编码键盘。
键盘的工作原理
键盘是由按键构成,键的闭合与否通常用高低电平来进行检测。
键闭合时,为低电平,键断开时,为高电平。
由于按键机械弹性的作用,在断开或闭合时会产生抖动过程,抖动时间5~10ms。
为了防止误操作,必须消除按键抖动过程。
3.2电路参数的计算及元器件的选择
DS1302中AM-PM/12-24时方式:
小时寄存器的位7定义为12或24小时方式选择位。
它为高电平时,选择12小时方式。
在为第二个10小时位(20-23h)。
3.3特殊器件的介绍
DS1302有主电源/后备电源双电源引脚:
Vcc1在单电源与电源供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。
在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保持时间信息以及数据。
DS1302由Vcc1或Vcc2中较大者提供。
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。
在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。
时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达到248字节数。
如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
DS1302控制字节的最高有效位(位7),必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。
位5-1(A4-A0)指示操作单元的地址。
最低有效位(位0)如果为0,则表示要进行写操作;为1表示进行读操作。
控制字节总是从最低位开始输入/输出。
为了提高对32个地址寻址能力,可以把时钟/日历或RAM寄存器规定为多字节方式。
位6规定时钟或RAM,而位0规定读或写。
在时钟/日历寄存器的地址9-31或RAM寄存器中的地址31不能存储数据。
在多字节方式下,读或写从地址0的位0开始。
必须按数据传送的次序写最先的8个寄存器。
但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否写了全部31字节,所写的每一字节都将传送至RAM.
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
时钟暂停:
秒寄存器的位7定义为时钟暂停位。
当它为1时,DS1302停止振荡,进入低功耗备份方式,通常在对DS1302进行写操作时,停止振荡。
当它为0时,时钟开始启动。
3.4系统整体电路图
4基于Proteus时钟显示+系统仿真和调试
4.1仿真软件介绍
1.Proteus是一个基于ProSPICE混合模型仿真器的、完整的嵌入式系统软硬件设计仿真平台。
(1)Proteus由两个主要程序系统构成:
ISIS.EXE(电路原理图设计.电路原理仿真)、ARES.EXE(印刷电路版设计)
(2)Proteus的主要功能特点:
1)Proteus的元件库以生产厂家的真实参数建模,不仅仿真结果真实可信,而且能用箭头与颜色表示电流的方向与大小。
3)Proteus的电路原理图设计仿真功能,不仅有分离元件.小规模集成器件的仿真功能,而且有多种带CPU的可编程序器件的仿真功能,不仅能做电路基础、模拟电路与数字电路实验,而且能做单片机与接口实验。
特别是可为课程设计与毕业设计提供综合系统仿真。
是当前在高校的实验教学中应用较多的软件。
2)Proteus有印刷电路版设计,有印刷电路的自动布线功能。
(3)Proteus真正超群之处在于它对单片机电路的设计与仿真。
它与单片机的程序设计软件Keil兼容,能够把Keil编译好的“*.Hex”文件置入Proteus的单片机硬件中,从而实现软硬件一体的电路仿真。
2.Keilc51由德国KeilSoftware公司推出。
Uvision2是KeilSoftware公司推出的51系列单片机开发工具,集编辑、编译、仿真于一体,支持汇编语言和C语言。
4.2系统仿真实现
在ProteusISIS编辑窗口中,单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“EditComponent”对话框,在此对话框的“ClockFrequency”栏中设置单片机晶振频率为12MHZ,在“ProgramFile”栏中单击图标,选择先前用KeilUvision2生成的“.HEX”文件。
在ProteusISIS编辑窗口的“File”菜单中选择“SaveDesign”选项,保存设计文件。
单击ProteusISIS环境中左下方的仿真控制按钮
中的运行按钮,开始仿真。
4.3数据分析
根据仿真结果显示可知,本设计基本符合设计要求,能够实现显示年、月、日、星期、时、分秒功能。
通过时间/日期切换键可以进行互相转换,通过调整控制键可以对其时间/日期进行调整,显示屏显示相应的内容。
5总结
5.1设计小结
系统的功能完全符合设计任务的要求,同时系统具有很强的扩展性。
基于单片机设计的数字时钟精确度较高,程序具有可靠性和较好的可读性。
如果我们想要将它应用于实际控制之中,只要对上述程序和硬件电路稍加修改,便可得到实际控制的使用系统。
5.1收获体会
通过本次毕业设计,对毕业论文的完成有信心。
6参考文献
[1]谭浩强.C程序设计[M].北京:
清华大学出版社,2001.
[2]陈忠平,曹巧媛等.单片机原理及接口.北京:
清华大学出版社,2007.
[3]刘同法,陈忠平等.单片机基础与最小系统实践.北京:
北京航空航天大学出版社,2007.
[4]张靖武,周灵彬.单片机系统的Proteus设计与仿真.北京:
电子工业出版社,2007.
[5]阎石.数字电子技术基础.北京:
高等教育出版社,2006.
[6]周润景,袁伟亭,景晓松.Proteus在MCS-51&ARM7系统中的应用百例.北京:
电子工业出版社,2006.
[7]侯玉宝,陈忠平,李成群等.基于Proteus的51系列单片机设计与仿真.北京:
电子工业出版社,2008.
7附录
系统主要功能展示图
程序:
#include
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharxingqi,nian,yue,ri,xiaoshi,fen,miao;
ucharnianh,nianl,yueh,yuel,rih,ril,xiaoshih,xiaoshil,fenh,fenl,miaoh,miaol;
uchardd=2;
sbitclk=P1^0;
sbitdat=P1^1;
sbitrst=P1^2;
sbitA0=ACC^0;
sbitA1=ACC^1;
sbitA2=ACC^2;
sbitA3=ACC^3;
sbitA4=ACC^4;
sbitA5=ACC^5;
sbitA6=ACC^6;
sbitA7=ACC^7;
sbitp30=P3^0;
sbitp31=P3^1;
sbitp32=P3^2;
sbitp33=P3^3;
sbitp34=P3^4;
sbitp35=P3^5;
sbitp36=P3^6;
sbitp37=P3^7;
sbitdate=P2^0;
sbitload=P2^1;
sbitclkk=P2^2;
ucharbdatabitmsb;
sbitm7=bitmsb^7;
ucharx,y,c;
bitflag=0;
bitflagh=1;
ucharcodetab[]={0xff,//任意数
0X06,/*1*///共阴数码管
0X5B,/*2*/
0X4F,/*3*/
0X66,/*4*/
0X6D,/*5*/
0X7D,/*6*/
0X07,/*7*/
};
ucharcodetab2[]={0x7e,0x30,0x6d,0x79,0x33,
0x5b,0x5f,0x70,0x7f,0x7b};//max72190到9的字库
ucharcodetab1[]={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,0x29,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};
//-------------------------------------------------------
voidsend(void)//送一个字节
{ucharcount;
bitmsb=x;
for(count=0;count<8;count++)
{if(m7)
{clkk=0;
date=1;
_nop_();
clkk=1;
}
else{clkk=0;
date=0;
_nop_();
clkk=1;
}
bitmsb<<=1;
}
}
voidwr(void)
{
load=0;
send();
x=y;
send();
load=1;
}
voidready(void)
{
x=0xfb;//设置扫描限制
y=0x07;
wr();
x=0xf9;//译码模式
y=0x00;
wr();
x=0xfa;//亮度调节
y=0x0c;
wr();
x=0xfc;//关断模式
y=0x01;
wr();
}
//---------------------------------------------------------------
voidInputByte(uchardd)//写一个字节到1302中
{uchari;
ACC=dd;
for(i=8;i>0;i--)
{
dat=A0;
clk=1;
clk=0;
ACC=ACC>>=1;
}
}
//-------------------------------------------------------
voidOutputByte(void)//从ds1302中读i个数据出来
{uchari;
dat=1;
for(i=8;i>0;i--)
{ACC=ACC>>1;
A7=dat;
clk=1;
clk=0;
}
dd=ACC;
}
voidWrite(ucharaddr,ucharnum)
{rst=0;
clk=0;
rst=1;
InputByte(addr);//写地址
InputByte(num);//写数据
clk=1;
rst=0;
}
voidWriteSec(ucharnum)
{
Write(0x80,num);
}
voidWriteMin(ucharnum)
{
Write(0x82,num);
}
voidWriteHr(ucharnum)
{
Write(0x84,num);
}
voidWriteDay(ucharnum)
{
Write(0x86,num);
}
voidWriteMn(ucharnum)
{
Write(0x88,num);
}
voidWriteWe(ucharnum)
{
Write(0x8a,num);
}
voidWriteYs(ucharnum)
{
Write(0x8c,num);
}
voidDisableWP(void)//writedata,read0
{
Write(0x8e,0x00);
}
voidRead(ucharaddr)
{rst=0;
clk=0;
rst=1;
InputByte(addr);
OutputByte();
clk=1;
rst=0;
}
//初始化设置时间08年5月27号,23点58分00秒
voidmain(void)
{uchari;
uintxt=0;
ucharfen1,fen2,fen3,fen4;
P3=0xff;
DisableWP();//非写保护
WriteSec(0x00);//秒//bcd码
WriteMin(0x58);//分
WriteHr(0x23);//时
WriteDay(0x27);//日
WriteMn(0x05);//月
WriteYs(0x08);//年
WriteWe(0x02);//星期
//7219设置
ready();//初始化
for(i=0;i<222;i++);
for(i=0;i<222;i++);
while
(1)
{Read(0x8b);//读星期数据
xingqi=dd;
Read(0x8d);//读年数据
fen1=dd;
fen2=fen1&0x0f;
//这是因为proteus提供的显示方式用的bcd进制,所以就要这种方法转十进制
fen3=fen1&0xf0;
fen3>>=4;
nian=fen3*10+fen2;
nianh=nian/10;
nianl=nian%10;
Read(0x89);//读月数据
fen1=dd;
fen2=fen1&0x0f;
fen3=fen1&0xf0;
fen3>>=4;
yue=fen3*10+fen2;
yueh=yue/10;
yuel=yue%10;
Read(0x87);//读日数据
fen1=dd;
fen2=fen1&0x0f;
fen3=fen1&0xf0;
fen3>>=4;
ri=fen3*10+fen2;
rih=ri/10;
ril=ri%10;
Read(0x85);//读小时数据
fen1=dd;
fen2=fen1&0x0f;
fen3=fen1&0xf0;
fen3>>=4;
xiaoshi=fen3*10+fen2;
xiaoshih=xiaoshi/10;
xiaoshil=xiaoshi%10;
Read(0x83);//读分数据
fen1=dd;
fen2=fen1&0x0f;
fen3=fen1&0xf0;
fen3>>=4;
fen=fen3*10+fen2;
fenh=fen/10;
fenl=fen%10;
Read(0x81);//读秒数据
fen1=dd;
fen2=fen1&0x0f;
fen3=fen1&0xf0;
fen3>>=4;
miao=fen3*10+fen2;
miaoh=miao/10;
miaol=miao%10;
if(flagh)
{c=1;
x=1;
for(i=0;i<1;i++)
{
y=tab2[xiaoshih];
x=c;
wr();
c++;
y=tab2[xiaoshil];
x=c;
wr();
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 智能 时钟 设计