- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
时钟显示教程
实验 时钟显示程序实例
一、实验目的
通过完成使用单片机完成时钟显示,让同学们掌握PCF8563芯片控制的方法
二、实验设备及软件
PC机一台、语音实验板一套(实验板、电源)、Keil开发软件、STC下载软件
三、实验内容
1、学会新建工程、编译代码、下载程序的方法
2、读懂PCF8563 IIC总线通讯时序图
3、学会使用PCF8563制作万年历
四、程序功能
完成PCF8563时钟数据的读取,并在数码管上输出显示
五、实验操作
操作流程如下:
1、新建Keil C工程,Keil的图标在电脑的桌面上。点击菜单的Project-New u Vision Project…
图1
2、保存工程到自建文件夹,工程名任取。
3、选择器件型号,该型号需与同学们桌面上的单片机板型号一致,本次实验的单片机型号为:STC89C52系列单片机,我们可以选择与之具有同样功能的Ateml-AT89S52型号单片机,如下图3、4所示:
图3
图4
4、选择好器件型号后将弹出如下对话框,选择“是”将启动代码添加到工程中,如下图5、6所示:
图5
图6
5、建立新的文件,点击图7蓝色方框所示按钮
图7
6、往文件中输入单片机代码并保存,如下图8、9所示:
图8
图9
7、将刚才输入的.c文件添加到工程中进行编译,如下图10、11、12所示:
右击Source Group 1
图10
选择main.c ,单机“Add”
图11
图12
8.工程配置,点击图13蓝色方框按钮,在弹出的对话框中点击上方“Output”按钮,勾选“Create HEX File”选项,否则无法生成单片机要烧录的Hex文件,点击确定返回。操作如下图13、14所示
图13
图14
9.工程编译,点击图15蓝色方框按钮,进行工程编译,结果如图16,hex文件输出在工程文件夹下。
图15
图16
10. 利用STC下载工具将serial.hex单片机程序烧写到单片机内部,双击桌面上的STC-ISP V35.exe图标,如下图17所示:
图17
11、在STC下载界面中选择对应的MCU型号、串口,并导入所需要下载的.hex文件,点击下载,此时重新给单片机上电即可将程序下载到单片机中。如下图18、19所示
图18
图19
13.实验效果,在语音实验板数码管上显示从PCF8563时钟芯片读出的时间值(分、秒)。
14.PCF8563时钟芯片操作简介
实验板PCF8563电路原理图
IIC通讯协议
一次完整的通讯包括起动、数据传输、停止三个部分
1.起动、停止时序
总线不忙是,数据线和时钟线保持高电平。数据线在下降沿而时钟线为高电平时为起动条件(S),数据线在下降沿而时钟线为高电平时为停止条件(P)
起动时序图
起动时序程序代码:
void start_8563(void)//启动8563
{
sda_8563 = 1;
scl_8563 = 1;
sda_8563 = 0;
}
停止时序图
停止时序程序代码
void stop_8563(void) //停止8563
{
sda_8563 = 0;
scl_8563 = 1;
sda_8563 = 1;
}
2.数据通讯时序
数据通讯时序图
写数据时序
在每个时钟脉冲上升沿传送一个数据位,主机控制的SDA线上的数据在时钟上升沿之前保持稳定
读数据时序
在每个时钟脉冲上升沿传送一个数据位,从机输出的SDA线上的数据在时钟上升沿之后保持稳定
写一个字节数据程序
void write_8563(uchar data_8563)//写一位数据8563
{
uchar i;
for(i=0;i8;i++)
{
scl_8563 = 0;
if(data_85630x80)
{
sda_8563 = 1;
}
else sda_8563 = 0;
scl_8563 = 1;
//Delay_x10us(1);
data_8563=1;
scl_8563 = 0;//最后拉低电平完成一个完整脉冲(error)
}
sda_8563 = 1;
scl_8563 = 1;//应答脉冲
scl_8563 = 0;
}
读一个字节数据程序
uchar read_8563(void) //读一位数据8563
{
uchar i,temp;
for(i=0;i8;i++)
{
scl_8563 = 0;
temp=1;
scl_8563 = 1;
if(sda_8563==1)
{
temp |= 0x01;
}
}
sda_8563 = 1;
scl_8563 = 0;//应答脉冲
scl_8563 = 1;
scl
文档评论(0)