单片机课程基于ZG使用C语言编程的电子钟显示有源代码.docx
《单片机课程基于ZG使用C语言编程的电子钟显示有源代码.docx》由会员分享,可在线阅读,更多相关《单片机课程基于ZG使用C语言编程的电子钟显示有源代码.docx(27页珍藏版)》请在冰豆网上搜索。
![单片机课程基于ZG使用C语言编程的电子钟显示有源代码.docx](https://file1.bdocx.com/fileroot1/2023-2/26/087aa8b2-8f6a-4703-a5fe-ab94a2fbaf77/087aa8b2-8f6a-4703-a5fe-ab94a2fbaf771.gif)
单片机课程基于ZG使用C语言编程的电子钟显示有源代码
学号:
浙江理工大学
课程设计
题目
实时时钟显示设计
学院
计算机科学与技术
专业
计算机科学与技术
班级
姓名
指导教师
2010
年
11
月
28
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
实时时钟显示设计
初始条件:
1.课程设计使用ZG211硬件综合实验平台(8051单片机),配有课程设计接口芯片和辅助芯片以及器件;
2.ZG211有程序设计集成开发环境,程序设计语言为C语言;
3.ZG211硬件综合实验平台使用说明书;
要求完成的主要任务:
(包括课程设计工作量及其技术要求,撰写说明书具体要求)
1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;
2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。
3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。
查阅和学习课程设计题目需要的辅助芯片以及器件资料。
4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。
5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。
给出程序流程图。
在集成开发环境中调试程序。
给出程序的详细注释。
能够解释使用程序模拟电路时序信号和数据。
6.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。
时间安排:
第13周:
1.熟悉ZG211硬件综合实验平台,KEILCUVISION2集成开发环境;查阅接口芯片资料,熟悉接口芯片和它的使用方法。
2.设计硬件电路原理图。
第14周:
1.使用C语言或汇编语言设计和调试接口程序。
2.撰写计算机硬件综合设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
实时时钟显示设计
1需求分析
1.1实验目的
1.掌握IO口操作。
2.掌握显示及键盘芯片的运用。
3.了解中断的运用。
4.了解I2C总线操作。
1.2实验设备
1.PC机一台;ZG-211单片机系统实验板一块;实验连接线若干。
2.芯片:
CH451,89S52,CD4052,PCF8563。
3.配套并口编程线一根。
4.配套电源一个。
1.2.1CH451芯片
(1)概述
CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。
CH451内置RC振荡电路,可以动态驱动8位数码管或者64位LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描;CH451通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。
(2)特点
1.显示驱动
①内置大电流驱动级,段电流不小于30mA,字电流不小于160mA。
②动态显示扫描控制,直接驱动8位数码管或者64位发光管LED。
③可选数码管的段与数据位相对应的不译码方式或者BCD译码方式。
④字数据左移、右移、左循环、右循环。
⑤各数字独立闪烁控制。
⑥通过占空比设定提供16级亮度控制。
⑦支持段电流上限调整,可以省去所有限流电阻。
⑧扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。
2.键盘控制
①内置64键键盘控制器,基于8×8矩阵键盘扫描。
②内置去抖动电路。
③键盘中断,低电平有效输出。
④提供按键释放标志位。
3.外部接口
①高速的4线串行接口,支持芯片级联,时钟速度从0到10MHz。
②串行接口中的DIN和DCLK信号线可以与其它接口电路共用。
③完全内置RC阻容振荡电路,根据需要可以外接阻容振荡。
④内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。
4.其它杂项
①可选多种封装:
DIP28、SOP28、DIP24S。
②经过授权采用了2项专利技术,低成本,简便易用。
1.2.289S52芯片
(1)主要性能
①与MCS-51单片机产品兼容。
②8K字节在系统可编程Flash存储器。
③1000次擦写周期。
④全静态操作:
0Hz~33Hz。
⑤三级加密程序存储器。
⑥32个可编程I/O口线。
⑦三个16位定时器/计数器。
⑧八个中断源。
⑨全双工UART串行通道。
⑩低功耗空闲和掉电模式。
11掉电后中断可唤醒。
12看门狗定时器。
13双数据指针。
14掉电标识符。
(2)功能特性描述
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
1.2.3CD4052芯片
(1)简要说明
CC4052是一个差分4通道数字控制模拟开关,有A0、A1两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止漏电流。
幅值为4.5~20V的数字信号可控制峰-峰值至20V的模拟信号。
例如,若VDD=+5V,VSS=0,VEE=-13.5V,则0~5V的数字信号可控制-13.5~4.5V的模拟信号。
这些开关电路在整个VDD-VSS和VDD-VEE电源范围内具有极低的静态功耗,与控制信号的逻辑状态无关。
当INH输入端=“1”时,所有的通道截止。
二位二进制信号选通4通道中的一通道,可连接该输入端至输出。
CC4052提供了16引线多层陶瓷双列直插(D)、熔封陶瓷双列直插(J)、塑料双列直插(P)和陶瓷片状载体(C)4种封装形式。
(2)推荐工作条件
电源电压范围…………3V~15V
输入电压范围…………0V~VDD
(3)工作温度范围
M类…………-55℃~125℃
E类………….-40℃~85℃
(4)极限值
电源电压…...-0.5V~18V
输入电压……-0.5V~VDD+0.5V
输入电流…………….±10mA
储存温度…………-65℃~150℃
(5)引出端符号
A0~A1地址端
1I0/O0~1I3/O3输入输出端
2I0/O0~2I3/O3输入输出端
INH禁止端
1O/I公共输出/输入端
2O/I公共输出/输入端
VDD正电源
VEE模拟信号地
Vss数字信号地
(6)逻辑符号
1.2.4PCF8563芯片
(1)概述
PCF8563是低功耗的CMOS实时时钟/日历芯片,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。
最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动产生增量。
(2)特性
①低工作电流:
典型值为0.25μA(VDD=3.0V,Tamb=25℃时)。
②世纪标志。
③大工作电压范围:
1.0~5.5。
④低休眠电流;典型值为0.25μA(VDD=3.0V,Tamb=25℃)。
⑤400KHz的I2C总线接口(VDD=1.8~5.5V时)。
⑥可编程时钟输出频率为:
32.768KHz,1024Hz,32Hz,1Hz。
⑦报警和定时器。
⑧掉电检测器。
⑨内部集成的振荡器电容。
⑩片内电源复位功能。
11I2C总线从地址:
读,0A3H;写,0A2H。
12开漏中断引脚。
(3)应用
①移动电话
②便携仪器
③传真机
④电池电源产品
(4)功能描述
PCF8563有16个8位寄存器:
一个可自动增量的地址寄存器,一个内置32.768KHz的振荡器(带有一个内部集成的电容),一个分频器(用于给实时时钟RTC提供源时钟),一个可编程时钟输出,一个定时器,一个报警器,一个掉电检测器和一个400KHzI2C总线接口。
所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。
前两个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器。
秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为BCD,星期和星期报警寄存器不以BCD格式编码。
当一个RTC寄存器被读时,所有计数器的内容被锁存,因此,在传送条件下,可以禁止对时钟/日历芯片的错读。
1.3实验板模块
真实实验板示意图如下:
2实验要求
1能正常操作LED数码显示。
2能通过中断方式接收按键信息。
3能通过I2C总线方式与PCF8563芯片交换数据。
4能正确解释并显示从PCF8563芯片取出的日期和时间数据。
在应用所学计算机硬件相关课程中的知识的基础之上,使用C语音实现对接口的编程方法。
熟悉51系列单片机原理,并口工作原理和编程方法。
学习CH451和DS18B20芯片的引脚功能和编程方法。
在PC机上安装Keilc51在线编程软件,编写“数字显示与键盘输入”程序。
使用并口线把ZG211实验板与PC机连接起来,仔细检查无误后接通电源。
PC机上C程序编译成功后,打开联机下载软件,将HEX文件下载到89S52单片机中去。
观看下载程序在89S52单片机中运行情况。
如有问题,则在PC机上修改程序,然后再次下载运行。
能正常操作LED数码显示,通过中断方式接收按键信息。
设计阶段,能够正确进行程序设计电路设计。
课程设计实验阶段,能够正确连接电路;能够分析和解决在实验中碰见的问题;解决问题的思路和方法正确;实验结果满足课程设计要求。
主要任务:
1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;
2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。
3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。
查阅和学习课程设计题目需要的辅助芯片以及器件资料。
4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。
5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。
给出程序流程图。
在集成开发环境中调试程序。
给出程序的详细注释。
能够解释使用程序模拟电路时序信号和数据。
6.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。
3实验原理
在单片机应用系统中的实时时钟信号,一般都由专门的时钟芯片来提供,单片机只需要定期读取时钟芯片中固定地址中的时钟信息即可。
本实验板采用的是PCF8563时钟芯片。
PCF8563芯片的引脚说明见表下表。
符号
管脚号
描述
OSCI
1
振荡器输入
OSCO
2
振荡器输出
/INT
3
中断输出(开漏:
低电平有效)
VSS
4
地
SDA
5
串行数据I/O
SCL
6
串行时钟输入
CLKOUT
7
时钟输出(开漏)
VDD
8
正电源
PCF8563芯片在第一次运行时需要设置控制寄存器和状态寄存器,见表如下,一般均设置为0。
地址位
BIT
符号
描述
00
7
TEST1
TEST1=0;普通模式
TEST1=1;EXT_CLK测试模式
5
STOP
STOP=0;芯片时钟运行STOP=1;所有芯片分频器异步置
逻辑0;芯片时钟停止运行,(CLKOUT在32.768KHZ时
可用)
3
TESTC
TESTC=0;电源复位功能失效(普通模式时置逻辑0)
TESTC=1;电源复位功能有效
6,4,2,1,0
0
缺省值置逻辑0
01
7,6,5
0
缺省值置逻辑0
4
TI/TF
TI/TP=0:
当TF有效时INT有效(取决于TIE的状态)
TI/TP=1:
INT脉冲有效(取决于TIE的状态)
注意:
若AF和AIE都有效时,则INT一直有效
3
AF
当报警发生时,AF被置逻辑1;在定时器倒计数结束时,
TF被置逻辑1,它们在被软件重写前一直保持原有值,
若定时器和报警中断都请求时,中断源由AF和TF决定,
若要使清除一个标志位而防止另一标志位被重写,应运
用逻辑指令AND。
2
TF
1
AIE
标志位AIE和TIE决定一个中断的请求有效或无效,当
AF或TF中一个为“1”时中断是AIE和TIE都置
“1”时的逻辑或。
AE=0:
报警中断无效;AIE=1:
报
警中断有效TIE=0:
定时器中断无效;TIE=1:
定时器
中断有效
0
TIE
在PCF8563芯片中,秒、分钟、小时、日、月、年编码格式为BCD。
星期不以BCD格式编码。
具体格式见表如下。
地址
说明
BIT
符号
描述
02H
秒/VL寄存器
7
VL
VL=0:
保证准确的时钟/日历数据VL=1:
不保证准确的时钟/日历数据
6~0
<秒>
代表BCD格式的当前秒数值,值为00~99
例如:
<秒>=1011001,代表59秒
03H
分钟寄存器
7
-
无效
6~0
<分钟>
代表BCD格式的当前分钟数值,值为00~59
04H
小时寄存器
7~6
-
无效
5~0
<小时>
代表BCD格式的当前小时数值,值为00~23
:
05H
日寄存器
7~6
-
无效
5~0
<日>
代表BCD格式的当前日数值,值为01~31。
当年计数器的值是闰年时,PCF8563自动给
二月增加一个值,使其成为29天
06H
星期寄存器
7~3
-
无效
2~0
<星期>
代表当前星期数值0~6,这些位也可由用户
重新分配
07H
月寄存器
7
C
世纪位;C=0指定世纪数为20××,C=1指
定世纪数为19××,“××”为年寄存器
中的值。
当年寄存器中的值由99变为00
时,世纪位会改变。
6~5
-
无用
08H
年寄存器
7~0
年
代表BCD格式的当前年数值,值为00~99
实验只使用PCF8563的时间读取功能,只需对该芯片地址02H-08H的内存进行读写操作,其它地址的内存保持为默认值,实验板上提供电池,可以在掉电后保持时钟正常工作。
实验板上PCF8563的相关连接原理图如下图所示。
其中CD4052芯片的操作见下表。
A
B
选通状态
0
0
X=X0;Y=Y0
1
0
X=X1;Y=Y1
0
1
X=X2;Y=Y2
1
1
X=X3;Y=Y3
4I2C协议
I2C总线用两条线(SDA和SCL)在芯片和模块间传递信息。
SDA为串行数据线,SCL为串行时钟线。
1.只有在总线空闲时才允许启动数据传送。
2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态不允许。
有跳变时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止信号。
(1)起始信号
时钟线保持高电平期间,数据线电平从高到低的跳变作为I2C总线的起始信号。
(2)停止信号
时钟线保持高电平期间,数据线电平从低到高的跳变作为I2C总线的停止信号。
总线时序
写周期时序
起始/停止时序
(3)器件寻址
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。
8位从器件地址的高4位固定为1010。
接下来的3位A2A1A0为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问。
从器件8位地址的最低位,作为读写控制位。
“1”表示对从器件进行读操作,“0”表示对从器件进行写操作。
在主器件发送起始信号和从器件地址字节后,PCF8563监视总线并当其地址与发送的从地址相符时响应一个应答信号(通过SDA线)。
PCF8563再根据读写控制位(R/W)的状态进行读或写操作。
(4)应答信号
I2C总线数据传送时每成功地传送一个字节数据后,接收器都必须产生一个应答信号,应答的器件在第9个时钟周期时将SDA线拉低,表示其已收到一个8位数据。
PCF8563在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写操作,则在每接收一个8位字节之后响应一个应答信号。
当PCF8563工作于读模式时,在发送一个8位数据后释放SDA线并监视一个应答信号,一旦接收到应答信号,PCF8563继续发送数据,如主器件没有发送应答信号,器件停止传送数据并,等待一个停止信号主器件。
应答时序图
从器件地址位
其中A0、A1和A2对应24C02的管脚1、2和3,PCF8563的从地址读操作时为0A3H,写操作时为0A2H。
(5)写操作:
1.字节写
在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从器件产生应答信号后,主器件发送PCF8563的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。
PCF8563再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中PCF8563不再应答主器件的任何请求。
字节写时序图
2.页写
用页写,PCF8563可以一次写入16个字节的数据,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号。
主器件被允许发送P(PCF8563:
P=15;)个额外的字节。
每发送一个字节数据后PCF8563产生一个应答位并将字节地址低位加1,高位保持不变。
如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖。
接收到P+1字节数据和主器件发送的停止信号后,芯片启动内部写周期将数据写到数据区,所有接收的数据在一个写周期内写入PCF8563。
页写时序图
(6)应答查询
可以利用内部写周期时禁止数据输入这一特性,一旦主器件发送停止位指示主器件操作结束时,PCF8563启动内部写周期,应答查询立即启动,包括发送一个起始信号和进行写操作的从器件地址。
如果PCF8563正在进行内部写操作,不会发送应答信号。
如果PCF8563已经完成了内部自写周期,将发送一个应答信号,主器件可以继续进行下一次读写操作。
(7)写保护
写保护操作特性可使用户避免由于不当操作而造成对存储区域内部数据的改写,当WP管脚接高时整个寄存器区全部被保护起来而变为只可读取。
(8)读操作
PCF8563读操作的初始化方式和写操作时一样,仅把(R/W)位置为1,有三种不同的读操作方式:
立即地址读、选择读和连续读。
立即地址读:
PCF8563的地址计数器内容为最后操作字节的地址加1。
也就是说,如果上次读/写的操作地址为N,则立即读的地址从地址N+1开始。
如果N=E(这里对24C02,E=255;对PCF8563,E=16),则计数器将翻转到0且继续输出数。
PCF8563接收到从器件地址信号后(R/W位置1),它首先发送一个应答信号,然后发送一个8位字节数据。
主器件不需发送一个应答信号,但要产生一个停止信号。
立即地址读时序图
(9)选择性读
操作允许主器件对寄存器的任意字节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址执行一个伪写操作。
在PCF8563应答之后,主器件重新发送起始信号和从器件地址,此时R/W位置1,PCF8563响应并发送应答信号,然后输出所要求的一个8位字节数据,主器件不发送应答信号但产生一个停止信号。
选择读时序图
(10)连续读
连续读操作可通过立即读或选择性读操作启动。
在PCF8563发送完一个8位字节数据后,主器件产生一个应答信号来响应,告知PCF8563主器件要求更多的数据,对应每个主机产生的应答信号PCF8563将发送一个8位数据字节。
当主器件不发送应答信号而发送停止位时结束此操作。
从PCF8563输出的数据按顺序由N到N+1输出。
读操作时地址计数器在PCF8563整个地址内增加,这样整个寄存器区域在可在一个读操作内全部读出。
当读取的字节超过E(对于PCF8563,E=16;对24C02,E=255)计数器将翻转到零并继续输出数据字节。
连续读时序图
5实验步骤
5.1硬件连接
将并口线插在实验板与PC机的并口插座上。
按图连接实验线路。
CH451与CPU连接实验线路。
5.2软件设计
进入KEILC开发环境编写程序。
首先根据2.3.5节I2C协议内容,编写I2C函数。
在编写I2C函数时,应注意代码的可重用性,方便其它函数调用。
例如:
编写起始信号函数时,可以将它独立出来,
VOIDBEGIN()
{
程序代码
}
PCF8563的I2C接口最大频率是400KHZ,在程序中对一个IO口操作完后,需要延时2.5毫秒(本实验板CPU晶振为11.0592MHZ,一个指令周期为1.08毫秒)。
写好I2C读写函数后,可对PCF8563进行操作。
先将CD4052的通道选为0,这样CPU与PCF8563物理联接起来了。
第一次操作需要对PCF8563进行初始化设置。
先将0X00分别写入PCF8563中地址为0X0,0X01的寄存器中,接着将要设置的时间按:
年、月、星期、日、小时、分、秒的顺序,以BCD码格式写入地址为0X08--0X02的寄存器中,具体见表2-8、表2-9。
在将时间按:
年、月、星期、日、小时、分、秒读出后,按“XX-XX-XX”格式分两屏显示出来,显示接口的应用见。
6实验成功标志
1按下1号按键,显示测量得到的日期。
②按下2号按键,显示测量得到的时间。
7程序说明
1.send_disp_data向CH451芯片发送命令。
2.send_comm向CH451芯片发送命令。
3.disp_initialize向CH451芯片发送初始化命令。
4.key中断函数,获取当前按键状态。
5.Display_TEST测试显示LED数码管。
6.InitMCU初始化MCU。
7.delay_1ms毫秒级延时。
8.chang_4052选择4052的通道。
9.PCF8563Start向时钟芯片