CDIO基于51单片机的万年历设计与实现.docx
- 文档编号:16684118
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:35
- 大小:797.67KB
CDIO基于51单片机的万年历设计与实现.docx
《CDIO基于51单片机的万年历设计与实现.docx》由会员分享,可在线阅读,更多相关《CDIO基于51单片机的万年历设计与实现.docx(35页珍藏版)》请在冰点文库上搜索。
CDIO基于51单片机的万年历设计与实现
信息与电气工程学院
单片机应用系统(三级)项目
设计说明书
(2011/2012学年第二学期)
题目:
基于单片机的万年历设计及实现_____
专业班级:
学生姓名:
指导教师:
设计周数:
两周
设计成绩:
2012年6月20日
目录
1、CDIO设计目的2
2、CDIO设计正文2
2.1系统调研分析2
2.2方案设计3
2.2.1硬件电路的构造3
2.2.2软件模块化的设计3
2.3芯片及液晶介绍5
2.3.151系列单片机5
2.3.2DS18B207
2.3.3DS13029
2.3.4ZX12864R中文字库LCD11
2.4软件编程13
2.4.1delay函数13
2.4.2lcd12864函数13
2.4.3ds1302函数14
2.4.4ds18b20函数15
2.4.5display函数16
2.4.6keyascan函数16
2.4.7main函数17
2.5PROTEL电路原理图与PCB18
2.5.1电路原理图18
2.5.2PCB20
2.5.3实物图21
3、设计总结21
4、参考文献22
1、CDIO设计目的
熟悉系统分析与设计步骤:
对系统进行调研,详细分析系统,设计出基于单片机的万年历技术方案。
学习汉显12864,DS18B20,DS1302等芯片的使用,设计实现系统的关键技术。
设计并搭建系统电路,掌握硬件的选择,地址的分配与硬件连接。
编写单片机控制代码,设计系统软件并实现基本功能:
准确显示北京时间(时、分、秒、),采用24小时制;随时可以校准时间;采集温度进行显示;采用一键多用方案实现时间日期的调整。
熟悉使用protel画电路原理图,并画出PCB板。
2、CDIO设计正文
该部分包括:
系统调研与分析;万年历实现的硬件电路构造以及软件的流程图;几种芯片的认识与使用介绍;软件编程的重要功能分析;电路原理图与PCB板。
2.1系统调研分析
电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。
它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用STC90C52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
本设计应该基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。
在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。
在软件程序的编写时应该注意使用模块化编程使调理更加清晰易于调试时发现以及改正错误;电路焊接时应该注意的器件的选择以及布局,如采用万用版焊接应该仔细比对电路图,焊接完毕之后应该用数字万用表进行短讯测量,通过后方可上电下载程序检测。
万年历的设计过程在硬件与软件方面进行同步设计。
硬件部分主要由AT89C52单片机,LCD12864汉显电路,温度采集电路,时钟控制电路以及调时按键电路等组成。
在单片机的选择上使用了STC89C52单片机,该单片机适合于许多较为复杂控制应用场合。
LCD显示器使用ZX12864R中文字库LCD,温度采集使用DS18B20,时钟采集使用DS1302。
软件方面主要包括时间读取程序、时间调整程序,显示程序,温度采集处理程序等。
程序采用C语言编写,以便更简单地实现调整功能。
程序编写应该在keil软件中进行调试,确定没有问题后,在Proteus画出原理图与PCB,校正无误后焊接电路。
2.2方案设计
2.2.1硬件电路的构造
首先要熟悉51系列单片机的I/O控制端口,根据实际需要,在节约I/O口的前提条件下进行I/O的利用。
合理分配,且注意不要造成同意口多个芯片使用的情况。
经过实际测试与构思,系统硬件电路的方框图如图1,所示。
图1系统方框图
按键采用独立按键模式,设置K1,K2,K3三个独立按键以低电平有效的方式对利用P10,P11,P12三个口进行控制;分别对应为:
修改位置选择位;加法遍历位;减法遍历位。
时钟信号采用用DS1302芯片读取的形式,利用P34到P36三个口进行数据控制传输,其串行时钟信号为P36,使能位为P35,串行输出数据口为P34。
温度采集利用从DS18B20芯片读取,利用P37口进行数据传输,另外两个引脚接地。
单片机收到各路数据之后利用烧录的程序对各种数据进行处理后,利用PO口进行并行发送到12864汉显液晶进行数据的显示,12864汉显液晶具有二十个引脚,实际连接时按照编程时的设置分别连接各个I/O口。
最后,电源采用+5V电源供电,可以采用USB供电,稳压电源供电,串口供电等各种供电方式,由于DS1302没有加入备用电源纽扣电池,所以掉电不具有保护功能,掉电重启后应该再对时间进行重新设置。
2.2.2软件模块化的设计
由于万年历设计涉及使用的芯片与引脚比较复杂,编写程序时函数比较混乱,因此应该采用模块化编程思想,分别编写各个子函数,最后进行主函数组装测试。
各个子函数部分应该做到有意义的命名,例如可以将万年历子函数分为以下几个部分。
首先是最常用的延时函数,采用delay.h模块里面;设置液晶初始化以及读写命令的函数可以集中放在lcd12864.h子函数模块里面;将温度的收集与后期处理集中放置在ds18b20.h子函数模块里面;将时间的获取与后期处理集中放置在ds1302.h子函数模块里面;将按键控制函数放置在keyscan.h子函数模块里面;最后在display.h模块里面集中调用进行显示,主函数只需存放各个模块。
这样做到简介明了,便于其他开发人员维护与阅读。
组装完毕后的主函数应该按照如图2所示的流程进行处理显示。
图2软件流程图
程序的编写应该严格按照程序流程图的逻辑来进行,确保每个子函数均能独立运行,在不符合相关条件下互不干扰。
软件程序的编写还应该为各个模块设置好有意义的变量命名。
且最好设置为局部变量便与不与其他地方冲突。
2.3芯片及液晶介绍
2.3.151系列单片机
单片机(Microcontroller,又称微处理器)是在一块硅片上集成了各种部件的微型机,这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。
8051单片机的基本结构见图3所示。
图38051单片机的基本结构
8051是MCS-51系列单片机的一个产品。
MCS-51系列单片机是Intel公司推出的通用型单片机,8051单片机系列指的是MCS-51系列和其他公司的8051衍生产品。
这些衍生品是在基本型基础上增强了各种功能的产品。
8051系列的内部结构可以划分为CPU、存储器、并行口、串行口、定时器/计数器、中断逻辑几部分。
(1)中央处理器
8051的中央处理器由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。
算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。
ALU只能进行运算,运算的操作数可以事先存放到累加器ACC或寄存器TMP中,运算结果可以送回ACC或通用寄存器或存储单元中,累加器ACC也可以写为A。
B寄存器在乘法指令中用来存放一个乘数,在除法指令中用来存放除数,运算后B中为部分运算结果。
程序状态字PSW是个8位寄存器,用来寄存本次运算的特征信息,用到其中七位。
PSW的格式如图4所示,其各位的含义是:
图4PSW格式图
CY:
进位标志。
有进位/错位时CY=1,否则CY=0。
AC:
半进位标志。
当D3位向D4位产生进位/错位时,AC=1,否则AC=0,常用于十进制调整运算中。
F0:
用户可设定的标志位,可置位/复位,也可供测试。
RS1、RS0:
四个通用寄存器组选择位,该两位的四种组合状态用来选择0~3寄存器组。
。
OV:
溢出标志。
当带符号数运算结果超出-128~+127范围时OV=1,否则OV=0。
当无符号数乘法结果超过255时,或当无符号数除法的除数为0时OV=1,否则OV=0。
P:
奇偶校验标志。
每条指令执行完,若A中1的个数为奇数时P=1,否则P=0,即偶校验方式。
控制逻辑主要包括定时和控制逻辑、指令寄存器、译码器以及地址指针DPTR和程序寄存器PC等。
(2)引脚图
51系列单片机引脚如图5所示。
图5单片机引脚图
2.3.2DS18B20
DS18B20为达拉斯公司生产的课编程分辨率的单总线数字温度计。
其封装形式一般有图6所示三种。
图6DS18B20
引脚说明:
GND接地;DQ接数据I/O;VDD,可选电源电压;NC,无连接。
DS18B20拥有独特的单线接口仅需一个端口引脚进行通讯,每个器件有唯一的64位的序号存储在内部存储器中;简单的多点分布式测温应用;无需外部器件;测温范围为-55~+125℃(-67~+257℉);在-10~+85℃范围内精确度为±5℃;温度计分辨率可以被使用者选择为9~12位;最多在750ms内将温度转换为12位数字;用户可定义的非易失性温度报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;与DS1822兼容的软件;应用包括温度控制、工业系统、消费品、温度计或任何热感测系统。
DS18B20的核心功能是它的直接读数字的温度传感器。
温度传感器的精度为用户可编程的9,10,11或12位,分别以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。
温度寄存器格式如图7所示:
图7温度寄存器
温度与数据关系表如表1所示。
表1温度与数据关系表
温度℃
数据输出(二进制)
数据输出(十六进制)
+125
0000011111010000
07D0h
+85
0000010101010000
0550h
+25.0625
0000000110010001
0191h
+10.125
0000000010100010
00A2h
+0.5
0000000000001000
0008h
0
0000000000000000
0000h
-0.5
1111111111111000
FFF8h
-10.125
1111111101011110
FF5Eh
-25.0625
1111111001101111
FE6Eh
-55
1111110010010000
FC90h
DS18B20采用外部供电是与单片机连接电路图如图8所示。
图8外部电源给DS18B20供电图
DS18B20一般都是充当从机的角色,而单片机就是主机。
单片机访问DS18B20必须遵守,DS18B20复位-->执行ROM指令-->执行DS18B20功能指令。
而在单点上,可
以直接跳过ROM指令。
DS18B20的转换精度默认为12位,而分辨率是0.0625。
DS18B20温度读取函数参考步骤:
DS18B20开始转换:
1.DS18B20复位。
2.写入跳过ROM的字节命令,0xCC。
3.写入开始转换的功能命令,0x44。
4.延迟大约750~900毫秒
DS18B20读暂存数据:
1.DS18B20复位。
2.写入跳过ROM的字节命令,0xCC。
3.写入读暂存的功能命令,0xee。
4.读入第0个字节LSByte,转换结果的低八位。
5.读入第1个字节MSByte,转换结果的高八位。
6.DS18B20复位,表示读取暂存结束。
数据求出十进制:
1.整合LSByte和MSByte的数据
2.判断是否为正负数(可选)
3.求得十进制值。
正数乘以0.0625,一位小数点乘以0.625,二位小数点乘以6.25。
4.十进制的“个位”求出。
2.3.3DS1302
DS1302是DALLAS公司推出的涓流充电单片机进行通信可提供:
秒分时日日期月年的信息;每月的天数和闰年的天数可自动时钟芯片内含有一个实时时钟/日历和31字节静态RAM可通过简单的串行接口与调整;可通过AM/PM指示决定采用24或12小时格式;保持数据和时钟信息时功率小于1mW。
如图9所示。
图9DS1302引脚图
各引脚的功能为:
Vcc1:
主电源;Vcc2:
备份电源。
当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 SCLK: 串行时钟,输入,控制数据的输入与输出;I/O: 三线接口时的双向数据线;CE: 输入信号,在读、写数据期间,必须为高。 该引脚有两个功能: 第一,CE开始控制字访问移位寄存器的控制逻辑;其次CE提供结束单字节或多字节数据传输的方法。 DS1302有下列几组寄存器: ①DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图10所示。 图10DS1302有关日历时间的寄存器 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。 当为高时,选择12小时模式。 在12小时模式时,位5是,当为1时,表示PM。 在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。 当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。 在任何的对时钟和RAM的写操作之前,WP位必须为0。 当WP位为1时,写保护位防止对任一寄存器的写操作。 要想与DS1302通信,首先要先了解DS1302的控制字。 DS1302的控制字如图11。 图11控制字 控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。 位6: 如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0): 指示操作单元的地址;位0(最低有效位): 如为0,表要进行写操作,为1表示进行读操作。 控制字总是从最低位开始输出。 在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。 同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。 2.3.4ZX12864R中文字库LCD ZX12864R是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。 可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。 由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 模块引脚说明如表2所示。 表2引脚说明 引脚号 引脚名称 方向 功能说明 1 VSS GND 模块的电源地 2 VDD +5V- 模块的电源正端 3 V0 0-5V- 对比度调节输入参考电压 4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号 5 R/W(SID) H/L 并行的读写选择信号;串行的数据口 6 E(CLK) H/L 并行的使能信号;串行的同步时钟 7 DB0 H/L 数据0 8 DB1 H/L 数据1 9 DB2 H/L 数据2 10 DB3 H/L 数据3 11 DB4 H/L 数据4 12 DB5 H/L 数据5 13 DB6 H/L 数据6 14 DB7 H/L 数据7 15 PSB H/L 并/串行接口选择: H-并行;L-串行 16 NC 空脚 17 /RET H/L 复位低电平有效 18 NC 这脚没用,可以悬空 19 LED_A (LED+5V), 背光这脚可能与板上标的不符,以线路板标的为准 20 LED_K (LED-OV) 背光这脚可能与板上标的不符,以线路板标的为准 指令说明如表3所示。 表3(RE=0)基本指令集 指令 指令码 说明 执行时 间 (540 KHZ) RS RW DB 7 DB 6 DB 5 DB 4 DB 3 DB 2 DB 1 DB 0 清除显示 0 0 0 0 0 0 0 0 0 1 将DDRAM填满“20H”,并且 设定DDRAM的地址计数器 (AC)到“00H” 4.6ZX 地址归位 0 0 0 0 0 0 0 0 1 X 设定DDRAM的地址计数器 (AC)到“00H”,并且将游标移到开头原点位置;这个指 令并不改变DDRAM的内容 4.6ZX 进入点设定 0 0 0 0 0 0 0 1 I/D S 指定在资料的读取与写入时, 设定游标移动方向及指定显示的移位 72us 显示状 态开/关 0 0 0 0 0 0 1 D C B D=1: 整体显示ON C=1: 游标ONB=1: 游标位置ON 72us 游标或 显示移位控制 0 0 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位 控制位元;这个指令并不改变 DDRAM的内容 72us 功能设定 0 0 0 0 1 DL X 0 RE X X DL=1(必须设为1) RE=1: 扩充指令集动作 RE=0: 基本指令集动作 72us 设定 CGRAM地址 0 0 0 1 AC 5 AC 4 AC 3 AC 2 AC 1 AC 0 设定CGRAM地址到地址计数器(AC) 72us 设定 DDRAM 地址 0 0 1 AC 6 AC 5 AC 4 AC 3 AC 2 AC 1 AC 0 设定DDRAM地址到地址计数器(AC) 72us 读取忙 碌标志 (BF)和地址 0 1 BF AC 6 AC 5 AC 4 AC 3 AC 2 AC 1 AC 0 读取忙碌标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值 0us 写资料 到 RAM 1 0 D7 D6 D5 D4 D3 D2 D1 D0 写入资料到内部的RAM (DDRAM/CGRAM/IRAM/GDRAM) 72us 读出 1 1 D7 D6 D5 D4 D3 D2 D1 D0 从内部RAM读取资料 72us 汉字显示地址坐标如表4所示, 表4汉字显示坐标 80H 81H 82H 83H 84H 85H 86H 87H 90H 91H 92H 93H 94H 95H 96H 97H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH 2.4软件编程 本小节将按照模块化程序编写思想分块介绍编程的具体思路,以及给出重要的程序代码。 2.4.1delay函数 延迟函数模块为程序编写当中需要用到的延时提供了各种延时函数。 一般采用for循环达到延时要求,如大约50ms的延时函数为: //********************************** //延时函数,在12MHz下大约50ms延时 //********************************** voiddelay_50ms(uintt) { uinti,j; for(i=t;i>0;i--) for(j=6245;j>0;j--); } 2.4.2lcd12864函数 这部分为液晶相关函数的编写,主要涉及到了对液晶的命令写入,数据写入,固定汉字格式的显示,以及液晶初始化。 这一部分的难点在于对液晶写入时序的掌握和各种控制命令的记忆,以及对液晶显示时各个地址的运用。 例如液晶初始化需要设计到的地址写入,数据写入,固定指令的使用。 //********************************** //液晶12864初始化函数 //********************************** voidinit(void) { delay_50ms (2);//上电等待>40ms write_12864com(0x30);//功能设定: 基本指令集 delay_50us(4);//延时>100us write_12864com(0x30);//功能设定: 基本指令集 delay_50us(4);//延时>37us write_12864com(0x0c);//状态显示00001DCB;功能: D=1,整体显示ON;C=1,游标ON;B=1,游标位置ON delay_50us(4);//延时>100us write_12864com(0x01);//清除显示 delay_50us(240);//延时>10ms write_12864com(0x06);//进入点设置 delay_50us(10); } 2.4.3ds1302函数 本模块同上一个模块一样,同样应该注意对时序的运用,根据时序来写程序。 并且充分利用数组来存放读取的结果,便于显示函数的调用。 其次,由于芯片具有写保护功能所以每次i写入数据或指令是应禁止写保护。 最后,还
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CDIO 基于 51 单片机 万年历 设计 实现