单片机课程设计论文万年历.docx
- 文档编号:7447442
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:31
- 大小:253.03KB
单片机课程设计论文万年历.docx
《单片机课程设计论文万年历.docx》由会员分享,可在线阅读,更多相关《单片机课程设计论文万年历.docx(31页珍藏版)》请在冰豆网上搜索。
单片机课程设计论文万年历
单片机课程设计论文
设计题目:
基于DS12CR887时钟芯片的电子万年历
目录:
前言---------------------------------------------------P3
摘要---------------------------------------------------P4
正文---------------------------------------------------P4-P9
(1)设计方案的对比、选择及确定------------------------------P4-P5
(2)设计思路------------------------------------------------P5-P6
(3)单元电路设计--------------------------------------------P6-P7
(4)程序设计流程--------------------------------------------P8-P9
(5)课程设计心得--------------------------------------------P10-P13
参考文献-----------------------------------------------P14
附录---------------------------------------------------P15
(1)附录一原器件清单----------------------------------------P15
(2)附录二系统设计原理图------------------------------------P16
(3)附录三系统实物图----------------------------------------P17
(3)附录四源程序清单----------------------------------------P18-P31
前言
随着电子技术的不断发展,单片机技术在设计中所体现在出来的优势越来越明显,它不仅是电子信息类专业的一个重要部分,而且在其它类专业工程中也是不可缺少的。
广泛地应用于家电、工业过程控制、仪器仪表、智能武器、航空和空间飞行器等领域发展更是迅速,已成为新一代一些电子设备不可缺少的核心部件。
目前世界上单片机年产量已达十多亿片,通常是当年微处理器产量的4-5倍以上。
用最少的芯片就能实现最强大的功能。
可以想见,这是将来电子产品的主流方向,它将无可置疑地一步步取代其它同类产品,其数量之大和应用面之广,是其它任何类型的计算机所无法比拟的。
单片机是应工业测控需要而诞生的。
它把计算机最基本的功能电路,如CPU、程序存储器、数据存储器、I/O接口、定时、计数器、中断系统等集成到一块芯片上,形成单片形态的计算机。
单片机通常以最小系统运行,在家用电器中和常用的智能仪器仪表中常常可以“单片”工作,同时单片机在我们日常生活中也经常见到,如电子表、舞厅里的一些灯光的控制、一些招牌灯光的控制、工厂一些自动控制等。
将来只要有自动控制方面的都会离不开单片机的开发和使用,对于现代的自动化控制起着举足轻重的作用。
为了顺应形势发展的需要,我们学习了单片机课程,此次用液晶显示万年历和时间设置以及显示测温度的数据对单片机的学习起到了很好的巩固作用,尤其是对C语言程序的设计。
在此次课程设计的编写过程中得到了老师的大力支持和指导。
以及参考了多种电子设计资料如《电子线路设计·实验·测试》(第二版),《单片机的C语言应用程序设计》(第四版)等。
在编写此次课程设计的过程中由于时间的仓促和本人的水平有限,在设计和制作的过程中难免出现缺点和不足之处,还请各位老师批评和指正。
摘要:
电子万年历是一种通过电子元器件控制、执行、显示的电子产品。
其主要功能是显示公历、农历时间和温度,并能够进行时间的调节的定时和各种图形的变换。
电子万年历广泛应用于各种公共场所、商业场合和居民家庭。
由于其走时准确、误差极小、外观时尚等特点受到了广泛的欢迎。
我们的设计就是用目前我们掌握的相关知识,如:
单片机、模拟电路、数字电路等,进行一个简单电子万年历的设计和开发调试。
由于能力有限,我们设计的电子万年历的功能是:
显示公历时间和环境温度并能够进行时间的调节的定时。
正文:
一、设计方案的对比、选择及确定:
电子万年历的核心内容是对时间的处理。
具体说是对各位时间的正常运行、进位、调节和定时。
用什么来处理时间就成为了关键问题。
大体思路有两种,
一种是直接用89C51内部的定时器,另一种是用专门的事件处理芯片。
前者的缺点很明显,定时不准确、误差较大且在进位处理上过于麻烦,需要编制大量的程序来控制时间的处理过程。
而后一种就可以有效的解决以上提到的问题。
首先时钟芯片一般都具有独立的工作频率和内部工作电源,这样就可摆脱对CPU依赖,从而稳定工作。
其次时钟芯片内部有专门的控制寄存器和数据寄存器,这样就可以简单快捷地对其进行读取,同时也省去了大量的控制程序,控制较为简单。
最后时钟芯片具有掉电后继续工作和数据保存功能。
因此我设计小组决定选取时钟芯片来设计电子万年历。
而在芯片的选择上,常用的时钟芯片也分以下几种:
1.串口通讯类型
(1)I2C接口
Phlilps的PCF8563,PCF8583
EPSON的RX8025内置晶振,误差小,比较不错
MAXIM-DALLAS的DS1307
RICOH的RS5C372,国内的贝岭仿制型号BL5372
日本精工的S-35390
Intersil的X1288
深圳威帆电子公司出的SD2000系列,晶振,电池全部内置,体积较大;
(2)三线接口
MAXIM-DALLAS的DS1305,DS1302,其中DS1302国内有相关的仿制产品,PTI的仿制型号是PT7C4302。
台湾合泰的HT1380,HT1381
2.并口通讯类型
MAXIM-DALLASDS12C887系列
DS12C887的功能简介:
DS12C887实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。
由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。
在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
基于以上优点我们决定选用DS12C887芯片来完成我们的设计。
而在显示方面,为了方便控制、显示清楚、便于读取,我们选择了LCD芯片1602。
二、系统设计思路
此设计即液晶上显示年、月、日、时、分、秒、星期及温度(原理框图如图1.1),电路包括以下几个部分:
键盘、单片机、温度传感器及显示电路。
图1.1单片机实现液晶显示万年历以及温度总框图
各部分说明:
(1)键盘用来校正,调节液晶上显示的时间。
(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
(3)温度传感器用来采集温度值。
(4)单片机发送的信号经过显示电路通过译码最终在液晶上显示出来。
系统的主要元件:
主芯片AT89S52
时钟芯片DS12C887
显示芯片1602
温度测量芯片DS18B20
系统工作过程:
时间的主要处理过程是在DS12C887中完成的。
首先对此芯片进行初始化,对其初值进行设置,然后启动芯片工作。
芯片会在内部晶振提供的频率下对秒进行加计数并在必要时进位。
CPU会随时对12887进行读取数据的操作。
在读取了相应的寄存器的值后,CPU将读取的值进行处理,再通过I\O口把数据传入1602。
1602在接受到数据后在相应的位置上进行显示。
而温度信号会通过18B20进行采集,然后通过CPU处理后同样传给1602输出。
系统的设计按照系统的工作过程,将CPU相应的I\O口分配给对应的芯片完
成相应的控制和数据的传递。
简单地可概括为以CPU为中心,将12887和18B20
的时间的温度信号通过CPU处理后输入到1602进行输出显示。
三、单元电路设计
1AT89S52单片机系统设计
AT89S52是一种低功耗,高性能的CMOS8位微处理器,内部有8K字节的闪速PEROM,该芯片采用ATMEL公司高密度、非挥发性存储器工艺制成且与工业标准的MCS-51系列的引脚及指令兼容,FLASH系列存储器为快速擦写存贮器。
其最小系统设计如图所示
2DS12C887时钟芯片电路设计
DS12C887内部含有锂电池和晶振,可以在掉电的情况下正常工作。
MOT接VCC采用Intel总线时序,八位地址数据总线与P0口相连,片选信号接P1.4,地址信号接P1.5,读写信号接P1.6,数据信号接P1.7,中断申请信号接外部中断1(P3.3)。
3DS18B20温度传感器电路设计
DS18B20温度传感器是美国Dallas公司生产的最新的单线数字温度传感器,支持“1-Wire”接口。
其DQ经上拉电阻接在P3.0引脚。
4液晶1602电路设计
液晶1602用来显示时间,日期,周及温度。
其数据口与P2口相连,P3,7、P3.6、P3.5分别控制数据命令选择端、读写选择端及使能信号。
5键盘电路
键盘用来调节时间。
分别与P1.0、P1.1、P1.2、P1.3连接。
电路如图所示。
键盘功能描述:
key_1键为设置键
key_2键为时间加一键
key_3键为时间减一键
key_4键位定时设置键
四、程序设计流程
1主程序设计流程
2键盘扫描程序设计流程
调时方法:
按下key_1键为设置时间
按键次数功能
1设置秒
2设置分
3设置时
4设置日
5设置月
6设置年
7设置星期
8调节结束
按下key_4键为设置定时时间
按键次数功能
1设置秒
2设置分
3设置时
4设置结束
五、课程设计心得
参考文献:
【1】柴钰.单片机原理应用(M).西安:
西安电子科技大学出版社,2009.
附录
附录1
元器件清单:
芯片
器件
数目
芯片
器件
数目
AT89S52
1
电阻5K
1
DS12C887
1
电阻1K
2
DS18B20
1
电阻200
1
电容30PF
2
锁紧架
1
晶振12M
1
电源开关
1
小按键
5
电解电容10uF
1
液晶1602
1
电位器10K
1
附录2
系统设计原理图:
附录3
附录4
源程序清单:
1头文件:
//***************
//1602液晶显示头文件
//时间:
2009年4月28日
//***************
#ifndef__1602_H__
#define__1602_H__
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrs=P3^7;
sbitlcdrw=P3^6;
sbitlcden=P3^5;
#endif
//***************
//********************************
//DS12CR887时钟芯片头文件
//时间:
2009年5月15日
//********************************
#ifndef__ds12cr887_H__
#define__ds12cr887_H__
sbitdscs=P1^4;
sbitdsas=P1^5;
sbitdsrw=P1^6;
sbitdsds=P1^7;
sbitdsirq=P3^3;
#endif
//***************************
2源程序:
/********************************************/
/*****************万年历*********************/
//功能描述:
采用时钟芯片DS12CR887计时,DS18B20
//测量温度,LCD1602显示时间。
可从2000
//年至2099年随意调节,显示包括年、月、
//日、时、分、秒、星期和温度。
//键盘说明:
key_1键为设置键
//key_2键为时间加一键
//key_3键为时间减一键
//key_4键位定时设置键
//调时方法:
按下key_1键为设置时间
//按键次数功能
//1设置秒
//2设置分
//3设置时
//4设置日
//5设置月
//6设置年
//7设置星期
//8调节结束
//按下key_4键为设置定时时间
//按键次数功能
//1设置秒
//2设置分
//3设置时
//4设置结束
//制作时间:
2009年6月
/********************************************/
#include
#include"1602.h"
#include"ds12cr887.h"
/**************键盘引脚定义******************/
sbitkey_1=P1^0;//设置格式
sbitkey_2=P1^1;//+
sbitkey_3=P1^2;//-
sbitkey_4=P1^3;//定时设置
sbitbuzzer=P3^1;//蜂鸣器
sbitDQ=P3^0;//定义DS18B20
/******************小点闪烁********************/
bitat=0;
/******************全局变量********************/
uchart0=0,second=0,min=0,hour=0,day=0,month=0,year=0,weekday=0,flag=0,temp=0,flag1=0;
/******************初始化时间******************/
ucharcodetable1[]="2009-05-12MON";
ucharcodetable2[]="00:
00:
000000";
/*******************字符表*********************/
ucharcodeword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20,0x2d};
ucharcodeweek[][3]={"SUN","MON","TUE","WED","THU","FRI","SAT"};
/************数据缓冲与键盘计数变量************/
uchardatabuffer[14],TempBuffer[4],count,t_value;
uintnum=0;
/******************函数声明********************/
voidinit();
voidlcd_write_com(ucharcommand);//1602液晶写命令
voidlcd_write_data(uchardate);//1602液晶写数据
voiddelay(uinta);
voidnewbuf();//数据转换
voidkeyboard();//键盘子程序
voiddisp();//显示程序
voidwrite_ds(ucharadd,uchardate);
ucharread_ds(ucharadd);
voidInit_DS18B20();
voiddelay_18B20(unsignedinti);
ucharReadOneChar(void);
voidWriteOneChar(uchardat);
voidReadTemp(void);
voidtemp_to_str();
/***********************主函数**********************/
voidmain()
{
init();//初始化
Init_DS18B20();//DS18B20初始化
lcd_write_com(0x80+0x00);//设置指针地址为首行
for(num=0;num<15;num++)//将table字符串写入
{
lcd_write_data(table1[num]);
delay(20);
}
lcd_write_com(0x80+0x40);//设置指针地址为第二行
for(num=0;num<13;num++)//将table1字符串写入
{
lcd_write_data(table2[num]);
delay(20);
}
while
(1)
{
ucharb;
keyboard();//调整时间
ReadTemp();//开启温度采集程序
temp_to_str();//温度数据转换成液晶字符
lcd_write_com(0x80+0x40+9);
delay(20);
for(b=0;b<4;b++)
{
lcd_write_data(TempBuffer[b]);
delay(20);
}
if(flag==0)
{
second=read_ds(0x00);
min=read_ds(0x02);
hour=read_ds(0x04);
weekday=read_ds(0x06);
day=read_ds(0x07);
month=read_ds(0x08);
year=read_ds(0x09);
}
/*if(comp==min)
{
if(flag1==1)
{
buzzer=0;
}
}
elseflag1=0;*/
newbuf();
disp();
if(!
at)//闪烁
{
databuffer[2]=10;
databuffer[5]=10;
}
else
{
databuffer[2]=11;
databuffer[5]=11;
}
disp();
at=~at;
}
}
/*************************初始化*************************/
voidinit()
{
lcd_write_com(0x38);//设置显示模式
lcd_write_com(0x0c);//光标闪烁
lcd_write_com(0x06);
lcd_write_com(0x01);//清屏
write_ds(0x0a,0x20);
write_ds(0x0b,0x26);
read_ds(0x0c);
buzzer=1;
EA=1;
EX1=1;;
IT0=1;
}
/***********************LCD1602写命令************************/
voidlcd_write_com(ucharcommand)
{//液晶1602写命令
lcdrs=0;
lcdrw=0;
P2=command;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/*************************LCD1602写数据************************/
voidlcd_write_data(uchardate)
{
lcdrs=1;//液晶1602写数据
lcdrw=0;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/***************************延时函数****************************/
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
/******************************缓冲数据处理*************************/
voidnewbuf()//更新缓冲区子程序
{
databuffer[0]=second%10;
databuffer[1]=second/10;
databuffer[3]=min%10;
databuffer[4]=min/10;
databuffer[6]=hour%10;
databuffer[7]=hour/10;
databuffer[8]=day%10;
databuffer[9]=day/10;
databuffer[10]=month%10;
databuffer[11]=month/10;
databuffer[12]=year%10;
databuffer[13]=year/10;
}
/**************************液晶数据显示**************************/
voiddisp()//显示程序
{
ucharj=0;
lcd_write_com(0x80+0x40);//设置指针地址为第二行
lcd_write_data(word[databuffer[7]]);//小时十位
lcd_write_data(word[databuffer[6]]);//小时个位
lcd_write_data(word[databuffer[5]]);
lcd_write_data(word[databuffer[4]]);//分十位
lcd_write_data(word[databuffer[3]]);//分个位
lc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 论文 万年历