单片机最小系统拓展实时日历时钟显示设计.docx
- 文档编号:27644001
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:21
- 大小:283.95KB
单片机最小系统拓展实时日历时钟显示设计.docx
《单片机最小系统拓展实时日历时钟显示设计.docx》由会员分享,可在线阅读,更多相关《单片机最小系统拓展实时日历时钟显示设计.docx(21页珍藏版)》请在冰豆网上搜索。
单片机最小系统拓展实时日历时钟显示设计
武汉理工大学华夏学院
信息工程课程设计报告书
课程名称电子产品制作
课程设计总评成绩
学生姓名、学号
学生专业班级
指导教师姓名
课程设计起止日期2012.11.5—2012.11.22
课程设计基本要求
课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。
课程设计报告是科学论文写作的基础,不仅可以培养和训练学生的逻辑归纳能力、综合分析能力和文字表达能力,也是规范课程设计教学要求、反映课程设计教学水平的重要依据。
为了加强课程设计教学管理,提高课程设计教学质量,特拟定如下基本要求。
1.课程设计教学一般可分为设计项目的选题、项目设计方案论证、项目设计结果分析、答辩等4个环节,每个环节都应有一定的考核要求和考核成绩。
2.课程设计项目的选题要符合本课程设计教学大纲的要求,该项目应能突出学生实践能力、设计能力和创新能力的培养;该项目有一定的实用性,且学生通过努力在规定的时间内是可以完成的。
课程设计项目名称、目的及技术要求记录于课程设计报告书一、二项中,课程设计项目的选题考核成绩占10%左右。
3.项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,实施最佳方案的软件程序、硬件电路原理图和PCB图。
项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。
4.项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。
项目设计结果分析记录于课程设计报告书第四项中,考核成绩占25%左右。
5.学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。
文献阅读摘要记录于课程设计报告书第五项中,考核成绩占10%左右。
6.答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。
答辩考核成绩占25%左右。
7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。
课程设计指导教师应认真指导学生课程设计全过程,认真评阅学生的每一份课程设计报告,给出课程设计综合评阅意见和每一个环节的评分成绩(百分制),最后将百分制评分成绩转换为五级分制(优秀、良好、中等、及格、不及格)总评成绩。
8.课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。
一、课程设计项目名称
单片机最小系统拓展实时日历时钟显示设计
二、项目设计目的及技术要求
设计目的:
学会运用51单片机设计实施日历时钟显示系统。
技术要求:
1.在51单片机系统中设置、获取、记录实时的日历时钟信息并通过LED显示或LCD显示。
2.能够进行长时间的记录,并且存储的时间信息在掉电情况下能长期保存。
3.初始的时间信息要求用户用键盘输入或通过PC机和单片机的串口通信来设置。
4.利用已有设备进行安装调试。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB图)
1.可行性方案
1.1单片机芯片的选择方案和论证
方案一:
采用AT89C52,片内ROM全都采用FlashROM:
能以3V超低压工作;同时也与MCS-51系列单片机完全兼容,该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片的多次拔插,所以不会对芯片造成一定的损坏。
方案二:
采用AT89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
1.2显示模块选择方案和论证
方案一:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。
方案二:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
所以采用了LED数码管作为显示。
1.3时钟芯片的选择方案和论证
方案一:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒,分,时,日,周,月,年以及闰年补偿的年进行计数,而且精度高,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA.
方案二:
直接采用单片机定时计数器提供秒信号,使用程序实现时,分,秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
1.4电路设计最佳方案确定
综上各方案所述,对此次课程设计的方案选定:
以单片机AT89C52为主控制器,
时间数据是通过时钟芯片DS1302来读取,并通过LED数码管显示出来,并用键盘来完成对当前时间的调整。
2.硬件设计
2.1电路设计框图
图1电路设计
2.2系统概述
本电路是有AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,他是一种高性能,低功耗,带RAM的实时时钟电路,它可以对年,月,日,周日,时,分,秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据,DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年,月,日,周日,时,分,秒,具有使用寿命长,精度高和低功耗等特点。
具有掉电自动保存功能;显示部分由15个数码管,74HS138,74LS244构成。
使用动态扫描显示方式对数字的显示。
2.3单片机最小系统设计
单片机AT89C52的最小系统电路如图2所示:
图2AT89C52单片机最小系统
2.4外接电源接口电路
图3外接电源接口电路
2.5显示电路
图4为显示电路的电路图,采用了LED驱动芯片MAX7219。
使用两片MAX7219,实现16为数码管显示。
因为本设计要实现显示年(4位数字)、月(2位数字)、日(2位数字)、星期(1位数字)、小时(2位数字)、分钟(2位数字),总共需要13位数码管,而一片MAX7219最多只能支持8位数码管的显示,所以,我们需要单片机分别连接两片MAX7219来实现13位数码管显示。
图4显示电路电路图
2.6外接晶体引脚
图5外接晶振
2.7复位电路
图6手动复位电路
在系统运行的过程中,有时可能对系统需要进行复位,为了避免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路。
如图6所示。
这种电路的设计,在系统的运行过程中需要复位时,只需使开关闭合,在RST端就会出现一定时间的高电平信号,从而使单片机实现复位。
2.8DS1302时钟电路图
图7DS1302时钟电路
3.软件设计
软件的设计是设计控制系统的应用程序。
其任务是在整体设计和硬件设计的基础上,确定程序结构,分配内RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整应用程序,与硬件相结合完成相应功能。
3.1日历时钟子程序设计
DS1302与CPU的连接需要三条线,即SCLK(7),I/O(6),RST(5)。
日历时钟DS1302的读写需要初始化时序,读时序,写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机启动写时序开始,如果要求但总线器件回送是低位在先。
读写都是16位数据高8位是地址低8位是数据,在读写时要严格遵从起读写时序,否则读写将会失效。
图8日历时钟的写和读
3.2实验程序
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]={~0xC0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,
~0x90,~0x88,~0x83,~0xc6,~0xa1,~0x86,~0x8e,~0xff,~0x0c,~0xbf};/*0-F、灭(16)、P.-*/
uchart0,t1,sec,min,hour,function,a0,a1,a2,a3,a4,a5,a6,a7;
bitshan;
voiddelay(uintcount);
ucharkeychuli();
ucharkey();
voiddisplay(uchar,uchar,uchar,uchar,uchar,uchar,uchar,uchar);
voidsend();
voidini();
voidchuli();
//***************主函数**********************************************
voidmain()
{ini();
while
(1)
{display(16,16,16,16,16,16,16,17);//没有键按下是侠士P.
if(key()==1)//当k1按下后则定时器驱动时钟开始走
{TR0=1;function=1;shan=0;
while
(1)
{send();//送数
display(a0,a1,a2,a3,a4,a5,a6,a7);//显示
chuli();//处理}}}}
//*************初始化程序******************************************
voidini()
{
TMOD=0x01,
TH0=0x3c,TL0=0xb0;TH1=0x3c,TL1=0xb0;//定时50ms中断一次
EA=1,ET0=1,TR0=0;ET1=1;TR1=0;}
//**************键值处理程序*************************
voidchuli()
{switch(key())
{
case0:
break;
case1:
//当按键k1按下后
{function++;//判断按下的次数
switch(function)
{case1:
TR0=1;TR1=0;shan=0;break;//一次条秒同时闪烁
case2:
//两次调分同时闪烁
case3:
//三次调分同时闪烁
case4:
TR0=0;TR1=1;shan=1;break;//四次跳出调整状态时钟继续走时
case5:
function=1;TR0=1;TR1=0;shan=0;break;//轮流循环
}}
break;
case2:
//k2键上调
{switch(function)
{case1:
break;
case2:
sec++;if(sec==60)sec=0;break;
case3:
min++;if(min==60)min=0;break;
case4:
hour++;if(hour==24)hour=0;break;}}
break;
case4:
//k3键下调
{switch(function)
{case1:
break;
case2:
sec--;if(sec==255)sec=59;break;
case3:
min--;if(min==255)min=59;break;
case4:
hour--;if(hour==255)hour=23;break;
}}break;}}
//*************定时器0的中断服务程序************************
voidtimer0()interrupt1using3
{
TH0=0x3c,TL0=0xb0;
t0++;
if(t0==20)
{t0=0;
sec++;
if(sec==60)
{sec=0;
min++;
if(min==60)
{
min=0;
hour++;
{if(hour==24)
hour=0;
}}}}}
//*************定时器1的中数服务程序,对shan取反,以使灯闪烁***************
voidtimer1()interrupt3using2
{
TH0=0x3c,TL0=0xb0;
t1++;
if(t1==40)
{
t1=0;
shan=~shan;
}}
//***********************************************
ucharkeychuli()
{uchark;
k=P1;//P1口内容送K
k=~k;//取反
k=(k&0xff);//屏蔽高4位,如果扫描8键,屏蔽该句。
return(k);//返回键值
}
/************************************************************************
*函数原型:
key();
*功能:
键盘扫描函数,函数返回值即键值。
************************************************************************/
ucharkey()
{
ucharkeyzhi,keyzhii;//电子钟键盘按键键值临时存放
keyzhi=keychuli();//调P1口处理函数
if(keyzhi!
=0)//有键动作延时去抖动,否则函数返回
{
send();
display(a0,a1,a2,a3,a4,a5,a6,a7);
display(a0,a1,a2,a3,a4,a5,a6,a7);
keyzhi=keychuli();//再次调P1口处理函数
if(keyzhi!
=0)//真正有键按下,取键值并暂存
{
keyzhii=keyzhi;
while(keyzhi!
=0)//判按键是否释放,没有释放延时去抖动等待释放
{send();
display(a0,a1,a2,a3,a4,a5,a6,a7);
display(a0,a1,a2,a3,a4,a5,a6,a7);
keyzhi=keychuli();}
keyzhi=keyzhii;//按键释放后恢复按键键值
}}
return(keyzhi);//返回按键键值
}
//***************显示子程序***************
voiddisplay(uchara7,uchara6,uchara5,uchara4,uchara3,uchara2,uchara1,uchara0)
{P0=table[a7];
P2=0xfe;
delay
(1);
P0=table[a6];
P2=0xfd;
delay
(1);
P0=table[a5];
P2=0xfb;
delay
(1);
P0=table[a4];
P2=0xf7;
delay
(1);
P0=table[a3];
P2=0xef;
delay
(1);
P0=table[a2];
P2=0xdf;
delay
(1);
P0=table[a1];
P2=0xbf;
delay
(1);
P0=table[a0];
P2=0x7f;
delay
(1);
}
//******************将数送至缓冲单元,当shan的标志位为1时,再根据此时的此时的功能标示,对该位熄灭**************************
voidsend()
{a0=sec%10;
a1=sec/10;
a2=18;
a3=min%10;
a4=min/10;
a5=18;
a6=hour%10;
a7=hour/10;
if(shan==1)
{switch(function)
{
case2:
a0=16,a1=16;break;
case3:
a3=16,a4=16;break;
case4:
a6=16,a7=16;break;
}}}
//**************************延时子程序基数为1毫秒***********
voiddelay(uintcount)
{uintj;
while(count--!
=0)
{for(j=0;j<80;j++);}
}
4.单片机最小系统PCB原理图
图9单片机最小系统PCB原理图
四、项目设计结果分析(分析试验过程中获得的数据、波形、现象或问题的正确性和必然性,分析产生不正确结果的原因和处理方法)
实验结果:
当上电后,系统显示提示符P。
按下k1后,系统开始正常运行,此时按其它键均无效当再按下k1后,进入调秒状态,按k2加1,按k3减1,再按一下k1进入调分状态,再按一下,进入调时,再按一下,进入正常的运行状态在调整状态下,当调整该位时,该位会闪烁。
较好地完成了设置、获取、记录实时的日历时钟信息并通过LED显示或LCD显示。
掉电后DS1302会转用后备电池供电,在次上电后,时钟显示为当前时间。
证明了能够进行长时间的记录,并且存储的时间信息在掉电情况下能长期保存。
实验结论:
硬件设计中对于单片机最终选择了AT89C51,它是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。
同时还可以采用隔离等方式减少干扰。
软件设计中要完成键值处理,定时中断,延时,键盘扫描,显示等功能。
软件设计是核心部分,具有多样化,灵活性高,易移植等优点,要深深理会各指令的含义才能更加熟练应用,中断的合理利用可以减少CPU利用资源,具有执行效率高等优点,本设计用到定时器中断以减少对CPU的占用,更好的处理其他功能。
软件的设计大部分采用模块化设计的方法以方便调试,并使其可读性大大增强,方便更改和移植。
在这次课程设计中,我熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
我也发现了一些不足之处,在电路设计中,先仿真后连接实物图,但有时仿真和电路连接是不完全一致的,在实际电路的连接图中出错的原因都是界限和芯片的接触不良以及接线错误引起的,因此要学会区分仿真和电路连接图间的区别。
在此次课程设计中,我学会了独立思考并解决问题以及及时向同学求教不懂之处。
我认识到了知识要灵活运用的重要性以及要将知识与实际相结合的道理。
五、参考文摘(相关文摘不少于5篇,记录每篇文献的作者姓名.文献名称.文献发行城市:
文献出版社,出版年;文献内容摘要,每篇不少于100字)
【1】史建芳.智能仪器设计基础.北京:
电子工业出版社,2007.
摘要:
静态显示方式是指显示器显示某一字符时,相应段的发光二极管恒定导通或截止使显示字符的字段连续发光。
在静态显示方式中每位数码管都应有各自的驱动器件;为了便于程序控制在选择LED驱动器件时。
往往选择带锁存功能器件,用于锁存各自待显示数码。
因此,静态显示系统在每一次显示输出后能够保持显示不变。
仅在待显示数码需要改变时,才更新其数字显示器中锁存的内容。
这种显示方式的优点是亮度高,控制程序简单,显示稳定可靠。
【2】李群芳,张士军,黄建.单片微型计算机与接口技术(第三版).北京:
电子工业出版社.2008.
摘要:
从硬件连接方式看,键盘通常可分为独立式键盘和矩阵式键盘两类。
所谓独立式键盘是指各按键相互独立,每个按键分别于单片机的I/O口或外扩I/O芯片的一根输入线项链,通常每根输入线上按键的工作状态不会影响其他输入线的工作状态。
通过检测输入线的电平就可很容易判断哪个按键被按下。
独立式键盘电路配置灵活,软件简单,但在按键数较多时,会占用大量的输入口线。
【3】杨路明C语言程序设计教程.北京:
北京邮电大学出版社.2005.
摘要:
C语言程序由基本语句和函数组成,每个函数可完成相对独立的小任务,按一定的规则调用这些函数,就组成了解决某个特定问题的程序。
C语言程序的结构非常符合模块化程序的设计思想。
将大任务分解成若干个功能模块后,可以用一个或多个C语言的函数来实现这些功能模块,通过函数调用来实现完成大任务的全部功能。
任务,模块与函数的关系是:
大任务分成功能模块,功能模块则由一个或多个函数来实现。
因此,模块化的程序设计是靠设计函数和调用函数来实现的。
【4】康华光.电子技术基础(数字部分第五版).北京:
高等教育出版社.2006.
摘要:
时序电路可分为同步时序电路和异步时序电路两大类,若电路中触发器的时钟输入端没有接在统一的时钟脉冲上火电路中没有时钟脉冲电路中各存储单元的状态更新不是同时发生的,则这种电路称为异步时序电路。
根据电路是对脉冲边沿敏感还是对电平敏感。
异步时序电路又分为脉冲异步时序电路和电平异步时序电路两种,异步时序电路的状态转换取决于以任意时间间隔变化的输入信号序列,各存储单元的状态转换,应存在时间差异,而可能造成输出状态短时间内的不稳定。
【5】邱关源.电路(第五版).北京:
高等教育出版社.2006.
摘要:
运算放大器是一种包含许多晶体管的集成电路,它是目前获得广泛应用的多端器件一般放大器的作用是把输入电压放大一定倍数后在输送出去,其输出电压与输入电压的比值称为电压放大倍数,或电压增益。
运放是一种高增益高输入阻抗低输出电阻的放大器。
由于它能完成加法,积分,微分等数学运算,而被称为运算放大器。
然而,它的应用远远超出上述范围。
课程设计评分表
评分项目
评分成绩
1.选题合理、目的明确(10分)
2.设计方案正确,具有可行性、创新性(30分)
3.项目工艺水平及测试性能达到技术要求(25分)
4.参考文摘不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 最小 系统 拓展 实时 日历 时钟 显示 设计