实时时钟课设.docx
《实时时钟课设.docx》由会员分享,可在线阅读,更多相关《实时时钟课设.docx(23页珍藏版)》请在冰豆网上搜索。
实时时钟课设
武汉理工大学华夏学院
信息工程课程设计报告书
课程名称
课程设计总评成绩
学生姓名、学号
学生专业班级
指导教师姓名
课程设计起止日期
课程设计基本要求
课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。
课程设计报告是科学论文写作的基础,不仅可以培养和训练学生的逻辑归纳能力、综合分析能力和文字表达能力,也是规范课程设计教学要求、反映课程设计教学水平的重要依据。
为了加强课程设计教学管理,提高课程设计教学质量,特拟定如下基本要求。
1.课程设计教学一般可分为设计项目的选题、项目设计方案论证、项目设计结果分析、答辩等4个环节,每个环节都应有一定的考核要求和考核成绩。
2.课程设计项目的选题要符合本课程设计教学大纲的要求,该项目应能突出学生实践能力、设计能力和创新能力的培养;该项目有一定的实用性,且学生通过努力在规定的时间内是可以完成的。
课程设计项目名称、目的及技术要求记录于课程设计报告书一、二项中,课程设计项目的选题考核成绩占10%左右。
3.项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,实施最佳方案的软件程序、硬件电路原理图和PCB图。
项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。
4.项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。
项目设计结果分析记录于课程设计报告书第四项中,考核成绩占25%左右。
5.学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。
文献阅读摘要记录于课程设计报告书第五项中,考核成绩占10%左右。
6.答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。
答辩考核成绩占25%左右。
7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。
课程设计指导教师应认真指导学生课程设计全过程,认真评阅学生的每一份课程设计报告,给出课程设计综合评阅意见和每一个环节的评分成绩(百分制),最后将百分制评分成绩转换为五级分制(优秀、良好、中等、及格、不及格)总评成绩。
8.课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。
一、课程设计项目名称
最小单片机系统及其时钟显示电路设计
二、项目设计目的及技术要求
1.最小单片机系统:
其作用是和外围的时钟芯片通信,并控制数据传输过程,采集时间信息并予以处理;
2.日历时钟模块:
此模块由专用的实时时钟芯片构成,它是本设计的核心模块,由它提供实时的日历时钟信息;
3.液晶显示模块:
此模块用于实时日历时钟信息显示;
程序部分包括单片机和时钟芯片的接口程序(实现单片机和时钟芯片之间的数据传输过程)以及液晶显示程序。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB图)
一.可行性方案:
显示模块选择方案和论证
方案1:
采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多。
LED显示屏具有以下八大优点:
一、安全:
LED显示屏采用的是低压直流供电电压,因此使用上非常安全。
无论老人、小孩都可以安全使用而不会引起安全隐患。
二、柔软性:
LED显示屏采用非常柔软的FPC为基板,易于成型,适合各种广告造型需要。
三、寿命长:
LED显示屏的正常使用寿命是5~10万小时,每天24小时不停的工作,其寿命都差不多近10年。
因此,LED显示屏的寿命是传统的好几倍。
四、超节能:
相对于传统照明及装饰灯具而言,功率低了好几倍,而效果却好很多。
五、安装便捷:
安装结构灵活便捷,单人即可方便操作,结合产品的超轻重量,实现快速产品的快速、精准安装;拼装机构还具备自锁功能,消除误操作隐患,进一步保障产品的使用安全性。
六、纯正的色彩:
LED显示屏采用高亮度贴片,因此具备了LED发光元件的优点,光色纯正、柔和、无眩光。
既可以作为装饰用途,又可以兼做照明用途。
七、环保:
LED显示屏组成材料其材质是采用的环保材质,属于可回收利用型,不会因为大量使用而造成对环境的污染和破坏。
八、发热量小:
LED显示屏的发光元件是LED,由于单颗LED的功率很低,一般为0.04~0.08W,因此发热量不高。
可以作为鱼缸里的装饰照明,而不会产生大量热量造成水温升高,影响观赏鱼的生长。
方案2:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
点阵式的显示器由于能显示字符和图形也日益得到人们的青睐。
尤其在一些便携式仪器、仪表使用点阵式显示器更具有其独特优点。
他常常和单片机组合,作为小型液晶显示。
通常有通用级5x7点阵式文数字显示器4*8点阵数字8*16点阵ASC字符框架点阵式液晶显示器应用比较广泛;楼层显示器,模拟电路设计,电子设计,点阵液晶,触摸屏,通用变送模块,数字化压力传感器,电子产品研发,车辆测试模块,自动化检测,通用接口技术,单片机芯片应用等等。
方案3:
采用LED数码管动态扫描,LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼精看到字样了。
LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
最佳方案:
采用LED数码管动态扫描显示
二.硬件电路设计
按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、键盘接口模块、显示模块组成,电路系统构成框图如图1所示。
主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302。
DS1302作为主要计时芯片,可以做到计时准确。
图1实时日历时钟电路系统构成框图
单片机最小系统电路
单片机最小系统是最小的单片机系统,没有市场上买的有那么多功能。
通过自己喜欢的作用来扩展电路板。
电路简单,我的这个电路板是自己焊接的,这样然我更好的熟悉了电路。
这个电路通过扩展时钟电路,数码管显示电路来实现实时日历时钟电路显示。
图2单片机最小系统电路图
图3STC89C52芯片引脚
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。
当P0口的管脚第一次写“1”时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。
P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口作为AT89C51的一些特殊功能口,管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(计时器0外部输入)
P3.5T1(计时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
89C52单片机的最小系统,包括晶振电路,复位电路,确保系统的控制部分。
P0端口用作地址/数据复用总线AD[0~7],和日历时钟芯片相连。
P1端口用作数码管的段码接口,由于本设计的显示不会出现小数点,因此只使用了a、b、c、d、e、f、g,而没有使用dp(小数点)段。
P2端口的P2.1~P2.4作为数码管的位码接口,它们需要通过4-16译码电路以及驱动电路来控制13位数码管的位码选择。
P2端口的P2.0在反相之后为日历时钟芯片提供片选信号,需要反相是因为该片选信号为低电平有效。
单片机的P3.7(/RD)、P3.6(/WR)引脚和日历时钟芯片的读、写引脚直接相连,它们均为低电平有效。
复位电路
RST复位输入端。
当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
图4高低电位复位电路
日历时钟芯片部分的电路
图5实时日历时钟显示系统片选及日历时钟芯片部分电路
图5中,U3为6反相器74LS04,它将单片机的P2.0反相之后送至DS12C887的片选引脚。
U3为日历时钟芯片DS12C887,在本设计中,将其MOT引脚接地,选择Intel总线时序模式。
在以Intel总线时序模式工作时,它和51单片机的接口完全兼容,因此将它的地址/数据复用线AD0-AD7、锁存输入ALE、读输入DS、写输入
和51单片机的对应引脚直接相连。
显示电路
图6数码显示电路
图6为显示电路的电路图,采用了LED驱动芯片7HC573。
使用两片7HC573,实现16为数码管显示。
因为本设计要实现显示年(4位数字),月(2位数字),日(2位数字),小时(2位数字),分钟(2位数字),秒(2位数字)总共需要14位数码管,而一片7HC573最多只能支持8位数码管的显示,所以,我们需要单片机分别连接两片7HC573来实现8位数码管显示。
串口电路
图7串口通讯电路
DS1302时钟电路
图8DS1302时钟电路
DS1302的性能特性
·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;
·用于高速数据暂存的31×8位RAM;
·最少引脚的串行I/O;
·2.5~5.5V电压工作范围;
·2.5V时耗电小于300nA;
·用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
·简单的3线接口;
·可选的慢速充电(至VCC1)的能力。
DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。
它经过一个简单的串行接口与微处理器通信。
实时时钟/日历提供秒、分、时、日、周、月和年等信息。
对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。
时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302有主电源/后备电源双电源引脚:
VCC1在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。
DS1302由VCC1或VCC2中较大者供电。
当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。
晶振电路
图9晶振电路
外接石英晶体或者陶瓷谐振器以及电容C1、C2接在放大器的反馈回路(AT89C52内部有一个用于构成内部振荡器的高增益反相放大电路,XTAL1、XTAL2分别是该放大器的输入和输出端)中构成并联振荡电路。
为了使装置能够被外部时钟信号激活,XATL1应该有效,而XTAL2应该被悬空。
由于输入到内部的时钟信号电路通过了一个二分频的信号,外部信号的工作周期比没有别的要求,但是最大值和最小值的大小可以在数据表上观察出来。
当正常工作时,外部振荡器可以计算出XTAL1上的电容,最大可达到100pF。
这是由于振荡器电容和反馈电容之间的相互作用。
当外部信号是标准高电平或者低电平时,电容不会超过20pF。
外接晶体引脚XTAL1和XTAL2
1.XTAL1接外部晶体的一个引脚。
在单片机内部,它是构成片内振荡器的反相放大器的输入端。
当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。
2.XTAL2接外部晶体的另一个引脚。
在单片机内部,它是上述振荡器的反相放大器的输出端。
采用外部振荡器时,此引脚应悬浮不连接。
三.软件设计
流程图
图10时间程序流程图
软件设计分两部分:
时钟部分以及显示部分。
//晶振:
单片机最小系统实验板上实际晶振为11.0592M,
//这里为了方便计算时间,我们假设晶振为12M.
#include//包含52单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;//定义锁存器锁存端
sbitwela=P2^7;
sbitrs=P3^5;//定义1602液晶RS端
sbitlcden=P3^4;//定义1602液晶LCDEN端
sbits1=P3^0;//定义按键--功能键
sbits2=P3^1;//定义按键--增加键
sbits3=P3^2;//定义按键--减小键
sbitrd=P3^7;
sbitbeep=P2^3;//定义蜂鸣器端
ucharcount,s1num;
charmiao,shi,fen;
ucharcodetable[]="2012-11-4MON";//定义初始上电时液晶默认显示状态
ucharcodetable1[]="00:
00:
00";
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddi()//蜂鸣器发声函数
{
beep=0;
delay(100);
beep=1;
}
voidwrite_com(ucharcom)//液晶写命令函数
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)//液晶写数据函数
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_sfm(ucharadd,uchardate)//写时分秒函数
{
ucharshi,ge;
shi=date/10;//分解一个2位数的十位和个位
ge=date%10;
write_com(0x80+0x40+add);//设置显示位置
write_date(0x30+shi);//送去液晶显示十位
write_date(0x30+ge);//送去液晶显示个位
}
voidinit()//初始化函数
{
ucharnum;
rd=0;//软件将矩阵按键第4列一端置低用以分解出独立按键
dula=0;//关闭两锁存器锁存端,防止操作液晶时数码管会出乱码
wela=0;
lcden=0;
fen=0;//初始化种变量值
miao=0;
shi=0;
count=0;
s1num=0;
init_24c02();
write_com(0x38);//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//设置显示初始坐标
for(num=0;num<15;num++)//显示年月日星期
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40+6);//写出时间显示部分的两个冒号
write_date(':
');
delay(5);
write_com(0x80+0x40+9);
write_date(':
');
delay(5);
miao=read_add
(1);//首次上电从AT24C02中读取出存储的数据
fen=read_add
(2);
shi=read_add(3);
write_sfm(10,miao);//分别送去液晶显示
write_sfm(7,fen);
write_sfm(4,shi);
TMOD=0x01;//设置定时器0工作模式1
TH0=(65536-50000)/256;//定时器装初值
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
voidkeyscan()//按键扫描函数
{
if(s1==0)
{
delay(5);
if(s1==0)//确认功能键被按下
{s1num++;//功能键按下次数记录
while(!
s1);//释放确认
di();//每当有按键释放蜂鸣器发出滴声
if(s1num==1)//第一次被按下时
{
TR0=0;//关闭定时器
write_com(0x80+0x40+10);//光标定位到秒位置
write_com(0x0f);//光标开始闪烁
}
if(s1num==2)//第二次按下光标闪烁定位到分钟位置
{
write_com(0x80+0x40+7);
}
if(s1num==3)//第三次按下光标闪烁定位到小时位置
{
write_com(0x80+0x40+4);
}
if(s1num==4)//第四次按下
{
s1num=0;//记录按键数清零
write_com(0x0c);//取消光标闪烁
TR0=1;//启动定时器使时钟开始走
}
}
}
if(s1num!
=0)//只有功能键被按下后,增加和减小键才有效
{
if(s2==0)
{
delay(5);
if(s2==0)//增加键确认被按下
{
while(!
s2);//按键释放
di();//每当有按键释放蜂鸣器发出滴声
if(s1num==1)//若功能键第一次按下
{
miao++;//则调整秒加1
if(miao==60)//若满60后将清零
miao=0;
write_sfm(10,miao);//每调节一次送液晶显示一下
write_com(0x80+0x40+10);//显示位置重新回到调节处
write_add(1,miao);//数据改变立即存入24C02
}
if(s1num==2)//若功能键第二次按下
{
fen++;//则调整分钟加1
if(fen==60)//若满60后将清零
fen=0;
write_sfm(7,fen);//每调节一次送液晶显示一下
write_com(0x80+0x40+7);//显示位置重新回到调节处
write_add(2,fen);//数据改变立即存入24C02
}
i