东北大学秦皇岛分校数字时钟课程设计报告PCF8563.docx
《东北大学秦皇岛分校数字时钟课程设计报告PCF8563.docx》由会员分享,可在线阅读,更多相关《东北大学秦皇岛分校数字时钟课程设计报告PCF8563.docx(13页珍藏版)》请在冰豆网上搜索。
东北大学秦皇岛分校数字时钟课程设计报告PCF8563
东北大学秦皇岛分校
计算机与通信工程学院
单片机课程设计
设计题目数字钟设计
专业名称
电子信息工程
班级学号
4101327
学生姓名
马东慧
指导教师
哈森其其格
设计时间
2013.01.01—2013.01.07
一.前言
电子技术获得了飞速发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动啦社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间,忘记啦要做的事情,当事情不是很重要的时候,这种忘记无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机在朝着高性能和多品种的方向发展的同时也进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛地使用。
数字钟是采用数字电路实现对时、分、秒,数字显示的计时装置,广泛用于个人家庭,车站,码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大地方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、校时自动打铃、时间程序自动控制、定是广播、自动启闭路灯、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用有着非常现实的意义。
二.设计任务及要求
1.能够显示时,分,秒:
完成显示由秒00-一直加一到59,再恢复为00;分加一,由00至01,一直加一至59,再恢复00;时加一,由00至01,一直加一到59,再恢复00;
2.用PCF8563实现数字钟显示;
三.总体思路
通过iic总线在pcf8563时钟芯片中获得时间信息 单片机把时钟芯片的数据进行处理 在数码管上动态显示。
四.硬件电路设计
1.主控CPU部分
2.数码管显示电路
3.PCF8563实时时钟/日历芯片实验单元
4.模拟仿真电路
五.软件设计部分
(1)
#include"pcf8563.h"
voidiic_start(void)
{
SDA=1;
_nop_();
SCL=1;
somenop;
SDA=0;
somenop;
SCL=0;
}
voidiic_stop(void)
{
SDA=0;
_nop_();
SCL=1;
somenop;
SDA=1;
}
voidiic_ack(bitackbit)
{
if(ackbit)
SDA=0;
else
SDA=1;
somenop;
SCL=1;
somenop;
SCL=0;
SDA=1;
somenop;
}
bitiic_waitack(void)
{
SDA=1;
somenop;
SCL=1;
somenop;
if(SDA)
{
SCL=0;
iic_stop();
return0;
}
else
{
SCL=0;
return1;
}
}
voidiic_sendbyte(ucharbyt)
{
uchari;
for(i=0;i<8;i++)
{
if(byt&0x80)
SDA=1;
else
SDA=0;
somenop;
SCL=1;
byt<<=1;
somenop;
SCL=0;
}
}
uchariic_recbyte(void)
{
ucharda;
uchari;
for(i=0;i<8;i++)
{
SCL=1;
somenop;
da<<=1;
if(SDA)
da|=0x01;
SCL=0;
somenop;
}
returnda;
}
voidwrbyte_pcf8563(ucharadd,uchardat)
{
//器件地址0xa2
iic_start();
iic_sendbyte(0xa2);
iic_waitack();
iic_sendbyte(add);
iic_waitack();
iic_sendbyte(dat);
iic_waitack();
iic_stop();
delay(10);
}
ucharrdbyte_pcf8563(ucharadd)
{
ucharda;
iic_start();
iic_sendbyte(0xa2);
iic_waitack();
iic_sendbyte(add);
iic_waitack();
iic_start();
iic_sendbyte(0xa3);//芯片读地址
iic_waitack();
da=iic_recbyte();
iic_ack(0);
iic_stop();
returnda;
}
voiddelay(uchart)
{
uchari;
while(t--)
{
for(i=0;i<112;i++);
}
}
(2)
/***************单片机课程设计**********************/
/******晶振11.0592电子时钟芯片PCF8563************/
/******电路板对应protues仿真***********************/
#include
#include"pcf8563.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitwela=P2^7;
sbitdula=P2^6;
ucharcodetable[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};//段选编码
voiddis_delay(uintuiz)//显示函数的延迟函数
{
uintuix,uiy;
for(uix=uiz;uix>0;uix--)
for(uiy=10;uiy>0;uiy--);
}
voiddisplay(ucharucmiao,ucharucfen,ucharucshi)//显示函数
{
ucharucmiao_shi,ucmiao_ge,ucfen_shi,ucfen_ge,ucshi_shi,ucshi_ge;
ucmiao_shi=ucmiao/10;
ucmiao_ge=ucmiao%10;
ucfen_shi=ucfen/10;
ucfen_ge=ucfen%10;
ucshi_shi=ucshi/10;
ucshi_ge=ucshi%10;
P0=0x7f;//第一个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucmiao_ge];
dula=1;
dula=0;
dis_delay(20);
P0=0xbf;//第二个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucmiao_shi];
dula=1;
dula=0;
dis_delay(20);
P0=0xdf;//第三个数码管亮从后面查的
wela=1;
wela=0;
P0=0x40;
dula=1;
dula=0;
dis_delay(20);
P0=0xef;//第四个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucfen_ge];
dula=1;
dula=0;
dis_delay(20);
P0=0xf7;//第五个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucfen_shi];
dula=1;
dula=0;
dis_delay(20);
P0=0xfb;//第六个数码管亮从后面查的
wela=1;
wela=0;
P0=0x40;;
dula=1;
dula=0;
dis_delay(20);
P0=0xfd;//第七个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucshi_ge];
dula=1;
dula=0;
dis_delay(20);
P0=0xfe;//第八个数码管亮从后面查的
wela=1;
wela=0;
P0=table[ucshi_shi];
dula=1;
dula=0;
dis_delay(20);
}
voidmain()
{
ucharucmiao=0;
ucharucfen=0;
ucharucshi=0;
while
(1)
{
ucmiao=rdbyte_pcf8563(0x02)&0x7f;
ucmiao=((ucmiao&0xf0)>>4&0x0f)*10+(ucmiao&0x0f);
ucfen=rdbyte_pcf8563(0x03)&0x7f;
ucfen=((ucfen&0xf0)>>4&0x0f)*10+(ucfen&0x0f);
ucshi=rdbyte_pcf8563(0x04)&0x3f;
ucshi=((ucshi&0xf0)>>4&0x0f)*10+(ucshi&0x0f);
//
//if(miao>=60){miao=0;}
display(ucmiao,ucfen,ucshi);
}
}
(3)
#ifndef_PCF8563_H
#define_PCF8563_H
#include"reg52.h"
#include"intrins.h"
#definesomenop{_nop_();_nop_();_nop_();_nop_();_nop_();}
#defineucharunsignedchar
#defineuintunsignedint
sbitSCL=P1^6;
sbitSDA=P1^7;
voidiic_start(void);
voidiic_stop(void);
voidiic_ack(bitackbit);
voidiic_sendbyte(ucharbyt);
voidwrbyte_pcf8563(ucharadd,uchardat);
voiddelay(uchart);
bitiic_waitack(void);
uchari2c_recb