本科毕业设计万年历单片机课程设计文档格式.docx
- 文档编号:19413048
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:15
- 大小:203.19KB
本科毕业设计万年历单片机课程设计文档格式.docx
《本科毕业设计万年历单片机课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《本科毕业设计万年历单片机课程设计文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
2系统的硬件设计与实现1
2.1电路设计框图1
2.2系统硬件概述2
2.3主要单元电路的器件2
2.3.1单片机主控制模块2
2.3.2时钟电路模块的设计3
2.3.3显示模块的设计5
2.3.4实时时钟电路设计5
2.3.5功能按钮设计6
3整体电路图7
参考文献7
附件10
1设计方案选择
1.1控制部分的方案选择
采用51系列的89C51单片机,89C51单片机有丰富的中断源和时基,方便本实验的设计。
它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。
I/O口功能也比较强大,方便使用。
用89C51单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。
这些都方便对设计进行扩展,使设计更加完善。
成本也相对低一些。
1.2显示模块选择方案和论证
方案一:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形、显示多样,清晰可见,所以在此设计中采用LCD液晶显示屏。
所以采用了液晶显示屏作为显示。
1.3时钟芯片的选择方案和论证
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
所以不采用此方案。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
综上各方案所述,对此次作品的方案选定:
采用AT89C51作为主控制系统;
DS1302提供时钟;
液晶显示屏作为显示。
2系统的硬件设计与实现
2.1电路设计框图
按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键盘接口模块共4个模块组成,电路系统构成框图如图3-1所示。
主控芯片使用51系列AT89C51单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。
采用DSl302作为主要计时芯片,可以做到计时准确。
更重要的是,DSl302可以在很小电流的后备电源(2.5—5.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
显示模块采用普通的液晶显示屏,键输入采用查询法实现调整功能。
图3-1电路设计框图
2.2系统硬件概述
本电路是由AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;
时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;
显示部份由液晶显示屏对数字的显示。
2.3主要单元电路的器件
2.3.1单片机主控制模块
AT89C51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
1.内部结构
按功能分为8部分:
CUP,程序存储器,数据存储器,时钟电路,串行口,并行I/O口,中断系统,定时/计数器。
2.控制引脚
XTAL1和XTAL2:
时钟引脚,外接晶体引线端。
当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
RST/
:
RST是复位信号输入端,
是备用电源输入端。
当RST输入端保持2个机器周期以上高电平时,单片机完成复位初始化操作。
当主电源
发生故障而突然下降到一定低电压或断电时,第2功能
将为片内RAM提供电源以保护片内RAM中的信息不丢失。
ALE/PROG:
地址锁存允许信号输入端。
在存取外存储器时,用于锁存低8位地址信号。
当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。
此引脚的第2功能PROG是对片内带有4K字节EPROM的8751固外程序时,作为编程脉冲输入端。
:
程序存储器允许输出端。
当片外程序存储器的读选通信号,低电平有效。
CPU从外部程序存储器取指令时,
信号会自动产生负脉冲,作为外部程序存储器的选通信号。
/
程序存储器地址允许输入端。
当
为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片
外程序存储器指令;
为低电平时,CPU只执行片外程序存储器指令。
3.I/O口引脚
P0.0~P0.7:
P0口8位双向I/O口;
P1.0~P1.7:
P1口8位准双向I/O口;
P2.0~P2.7:
P2口8位准双向I/O口;
P3.0~P3.7:
P3口8位准双向I/O口。
4.片外总线结构
分为三部分:
数据总线DataBus(DB),地址总线AddressBus(AB),控制总线ControlBus(CB)。
2.3.2时钟电路模块的设计
(1)时钟芯片DS1302引脚及功能特点
图3-2示出DS1302的引脚排列,其中
为后备电源,
为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由
或
两者中的较大者供电。
大于
+0.2V时,
给DS1302供电。
小于
时,DS1302由
供电。
X1和X2是振荡源,外接32.768KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电动行时,在
大于等于2.5V之前,RST必须保持低电平。
中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
、
图3-2DS1302引脚排列
(2)时钟芯片DS1302的工作原理:
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。
表3-1为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。
位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;
该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
表6为DS1302的日历、时间寄存器内容:
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;
当该位为0时,时钟开始运行。
“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
表3-1DS1302的控制字格式
RAMRD
1A4A3A2A1A0
/CK/WR
(3)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
2.3.3显示模块的设计
采用8段数码管虽经济实惠,但操作比液晶显示来说略显繁琐。
液晶显示方式。
液晶显示效果出众,可以运用菜单项来方便操作,比较简单,所以,最后选择液晶显示方案。
显示电路图如图2.2所示。
图2.2液晶显示电路
2.3.4实时时钟电路设计
图2.3是DS1302与单片机的连接,其中Vcc1为后备电源,Vcc2为主电源。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
图2.3DS1302时钟电路
2.3.5功能按钮设计
当按钮被按下时,该按钮对应的I/O口被拉为低电平,松开时按钮对应的I/O口由内部的上拉电阻将该I/O拉为高电平,如图2.5所示:
图2.5键盘电路设计
3整体电路图
4心得体会
对于本次课程设计结合上学期所学习的单片机的基础知识,将硬件和软件的知识全都联系起来,硬件方面有电路的连接和芯片的选取,软件方面有程序的设计和编写。
本次课程设计是我遇到的较难的课程设计,是以前没有接触过如此复杂的硬件电路以及软件编程,在软、硬件设计和调试中遇到了不少的困难,在同学的帮助才逐一克服了难题,学习到了不少的专业知识。
在整个设计过程之前,我已经在网上找了相关方面的资料,万事开始难,一开始不知道从哪里下手。
后来慢慢学会分析系统,将系统模块化,各个模块可以在软件或者硬件上实现。
在确保各个模块的硬件电路和与之相搭配的程序能够正常工作后在把它们组成一个系统。
在今后的日子里,我会进一步加强自己的动手能力,丰富自己的知识面,不过总的来说这次单片机课设还是让我学到非常多的东西,也增加了我的动手机会,,希望自己以后更加严格的要求自己,做到更好。
参考文献
[1]谢自美.电子线路设计实验测试(第三版).武汉:
华中科技大学出版社
[2]李群芳.单片微型计算机与接口技术(第3版).电子工业出版社,2008
[3]刘教瑜.单片机原理及应用.武汉理工大学出版社,2011
[4]张东亮.单片机原理与应用.人民邮电出版社,2009
[5]郭天祥.51单片机C语言教程.电子工业出版社
附件
万年历源程序
#include<
reg52.h>
intrins.h>
string.h>
#defineuintunsignedint
#defineucharunsignedchar
//*******LCD*******
sbitLCDRS=P2^0;
//LCD数据/命令选择端
sbitLCDRW=P2^1;
sbitLCDEN=P2^2;
//LCD使能新号端
sbitQ=P1^3;
//******DS1302******
sbitIO=P1^0;
//1302数据线
sbitSCLK=P1^1;
//1302时钟线
sbitRST=P1^2;
//复位
uintnum=0;
uchar*week[]={"
SUN"
"
***"
MON"
TUS"
WEN"
THU"
FRI"
SAT"
};
ucharDate[]={"
Date:
2000-00-00"
ucharDate1[16]={"
SSS"
ucharTime[]={"
Time:
*00:
00-00*"
uchardate_time[7];
//从ds1302读取的当前日期时间
//=======延时=======
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
//********向1302写数据*********
voidwrite_ds1302(uchardat)
uchari;
for(i=0;
i<
8;
i++)
IO=dat&
0x01;
//保持最后一位为1,读状态
SCLK=1;
delay
(1);
SCLK=0;
dat>
>
=1;
//*********从1302读数据*********
ucharread_ds1302()
uchari,b=0x00;
b|=_crol_((uchar)IO,i);
returnb/16*10+b%16;
//与BCD码转换
//*********从指定位置读数据********
ucharread_data(ucharaddr)
uchardat;
RST=0;
RST=1;
write_ds1302(addr);
dat=read_ds1302();
returndat;
//*********读取当前日期时间*********
voidread_date_time()
uchari,addr=0x81;
7;
date_time[i]=read_data(addr);
addr+=2;
//----------LCD写指令----------
voidlcd_write_com(ucharcom)
LCDRS=0;
//RS为0时,写指令,RS为1时,写数据
P0=com;
delay(5);
LCDEN=1;
LCDEN=0;
//----------LCD写数据----------
voidlcd_write_data(uchardat)
LCDRS=1;
P0=dat;
//-------LCD初始化-------
voidlcd_init()
lcd_write_com(0x38);
//LCD显示模式设置
lcd_write_com(0x0c);
//LCD显示开/关及光标设置
lcd_write_com(0x06);
//当写一个字符后地址指针加1,且光标加1
lcd_write_com(0x01);
//显示清屏
//---------设置液晶显示位置-----------
voidset_lcd_pos(ucharp)
lcd_write_com(p|0x80);
//---------液晶显示程序----------
voidlcd_print(ucharp,uchar*s)
set_lcd_pos(p);
for(num=0;
num<
16;
num++)
lcd_write_data(s[num]);
delay(10);
//----------日期时间转换-----------
voidformat_datetime(uchard,uchar*p)
p[0]=d/10+'
0'
;
p[1]=d%10+'
//---------主程序----------
voidmain()
uintk=0;
LCDRW=0;
lcd_init();
read_date_time();
format_datetime(date_time[6],Date+8);
//年月日
format_datetime(date_time[4],Date+11);
format_datetime(date_time[3],Date+14);
strcpy(Date1,week[date_time[5]]);
format_datetime(date_time[2],Time+7);
//时间转换
format_datetime(date_time[1],Time+10);
format_datetime(date_time[0],Time+13);
lcd_print(0x00,Date);
while
(1)
if(Q==0)
{k=k+1;
switch(k%3)
{
case0:
lcd_print(0x00,Date);
break;
case1:
lcd_print(0x00,Time);
case2:
lcd_print(0x00,Date1);
}
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本科 毕业设计 万年历 单片机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)