硬件课程设计报告书.docx
- 文档编号:7007876
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:23
- 大小:376.51KB
硬件课程设计报告书.docx
《硬件课程设计报告书.docx》由会员分享,可在线阅读,更多相关《硬件课程设计报告书.docx(23页珍藏版)》请在冰豆网上搜索。
硬件课程设计报告书
学号:
0120510340608
课程设计
题目
实时时钟显示设计
学院
计算机科学与技术学院
专业
计算机科学与技术
班级
计算机0608班
姓名
欧阳志刚
指导教师
王莹
2009
年
12
月
31
日
课程设计任务书
学生姓名:
欧阳志刚专业班级:
计算机00608班
指导教师:
王莹工作单位:
计算机科学与技术学院
题目:
实时时钟显示设计
初始条件:
1.课程设计使用ZG211硬件综合实验平台(8051单片机),配有课程设计接口芯片和辅助芯片以及器件;
2.ZG211有程序设计集成开发环境,程序设计语言为C语言;
3.ZG211硬件综合实验平台使用说明书;
要求完成的主要任务:
(包括课程设计工作量及其技术要求,撰写说明书具体要求)
1.学习使用ZG211硬件综合实验平台,程序设计集成开发环境;
2.根据课程设计题目,进行需求分析,搞清楚课程设计需要设计需求和需要解决的设计内容。
3.查阅和学习课程设计题目需要的接口芯片资料,掌握接口芯片的使用方法和编程要领。
查阅和学习课程设计题目需要的辅助芯片以及器件资料。
4.设计接口芯片和辅助芯片以及器件与8051单片机连接硬件电路原理图。
5.设计与硬件电路原理图对应的C语言程序(或8051汇编语言)。
给出程序流程图。
在集成开发环境中调试程序。
给出程序的详细注释。
能够解释使用程序模拟电路时序信号和数据。
6.撰写课程设计报告,1)详细陈述以上的设计过程;2)详细陈述电路的调试过程。
时间安排:
第17周:
1.熟悉ZG211硬件综合实验平台,KEILCUVISION2集成开发环境;查阅接口芯片资料,熟悉接口芯片和它的使用方法。
2.设计硬件电路原理图,。
第18周:
1.使用C语言或汇编语言设计和调试接口程序。
2.撰写计算机硬件综合设计报告。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
实时时钟显示设计
一、设计目的
掌握IO口操作;
掌握显示及键盘芯片的运用;
了解中断的运用;
了解I2C总线操作。
二、设计设备
PC机一台;ZG-211单片机系统实验板一块;实验连接线若干
芯片:
CH451,89S52,CD4052,PCF8563
配套并口编程线一根
配套电源一个
三、需求分析
能正常操作LED数码显示
能通过中断方式接收按键信息
能通过I2C总线方式与PCF8563芯片交换数据
能正确解释并显示从PCF8563芯片取出的日期和时间数据
四、设计原理
在单片机应用系统中的实时时钟信号,一般都由专门的时钟芯片来提供,单片机只需要定期读取时钟芯片中固定地址中的时钟信息即可。
本实验板采用的是PCF8563时钟芯片。
PCF8563芯片的引脚说明见表1。
表1PCF8563引脚说明
该芯片有16个8位寄存器:
一个可自动增量的地址寄存器,一个内置32.768KHZ的振荡器(带有一个内部集成的电容),一个分频器(用于给实时时钟RTC提供源时钟),一个可编程时钟输出,一个定时器,一个报警器和一个掉电检测器。
所有16个寄存器设计成可寻址的8位并行寄存器,但不是所有位都有用。
前两个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器。
PCF8563芯片在第一次运行时需要设置控制寄存器和状态寄存器,见表2,一般均设置为0。
表2PCF8563控制/状态寄存器描述
在PCF8563芯片中,秒、分钟、小时、日、月、年编码格式为BCD。
星期不以BCD格式
编码。
具体格式见表3。
表3PCF8563寄存器位描述
实验只使用PCF8563的时间读取功能,只需对该芯片地址02H-08H的内存进行读写操作,
其它地址的内存保持为默认值,实验板上提供电池,可以在掉电后保持时钟正常工作。
实验板上PCF8563的相关连接原理图如图1所示。
其中CD4052芯片的操作见表4
表4CD4052功能说明
图1PCF8563原理图
五、I2C协议
I2C总线用两条线(SDA和SCL)在芯片和模块间传递信息。
SDA为串行数据线,SCL
为串行时钟线。
1.只有在总线空闲时才允许启动数据传送。
2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态不允许。
有跳
变时钟线为高电平时,数据线的任何电平变化将被看作总线的起始或停止信号。
起始信号:
时钟线保持高电平期间,数据线电平从高到低的跳变作为I2C总线的起始信号。
停止信号:
时钟线保持高电平期间,数据线电平从低到高的跳变作为I2C总线的停止信号。
图2总线时序
图3写周期时序
图4起始/停止时序
器件寻址:
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址。
8
位从器件地址的高4位固定为1010。
接下来的3位A2A1A0为器件的地址位,用来定义哪个器件以及器件的哪个部分被主器件访问。
从器件8位地址的最低位,作为读写控制位。
“1”表示对从器件进行读操作,“0”表示对从器件进行写操作。
在主器件发送起始信号和从器件地址字节后,PCF8563监视总线并当其地址与发送的从地址相符时响应一个应答信号(通过SDA线)。
PCF8563再根据读写控制位(R/W)的状态进行读或写操作。
应答信号:
I2C总线数据传送时每成功地传送一个字节数据后,接收器都必须产生一个应答信号,
应答的器件在第9个时钟周期时将SDA线拉低,表示其已收到一个8位数据。
PCF8563在接收到起始信号和从器件地址之后响应一个应答信号,如果器件已选择了写
操作,则在每接收一个8位字节之后响应一个应答信号。
当PCF8563工作于读模式时,在发送一个8位数据后释放SDA线并监视一个应答信号,
一旦接收到应答信号,PCF8563继续发送数据,如主器件没有发送应答信号,器件停止传送数据并,等待一个停止信号主器件。
图5应答时序图
图6从器件地址位
其中A0、A1和A2对应24C02的管脚1、2和3,PCF8563的从地址读操作时为0A3H,
写操作时为0A2H。
写操作:
1.字节写
在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从
器件产生应答信号后,主器件发送PCF8563的字节地址,主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。
PCF8563再次应答,并在主器件产生停止信号后开始内部数据的擦写,在内部擦写过程中PCF8563不再应答主器件的任何请求。
图7字节写时序图
2.页写
用页写,PCF8563可以一次写入16个字节的数据,页写操作的启动和字节写一样,不
同在于传送了一字节数据后并不产生停止信号。
主器件被允许发送P(PCF8563:
P=15;)个23额外的字节。
每发送一个字节数据后PCF8563产生一个应答位并将字节地址低位加1,高位保持不变。
如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖。
接收到P+1字节数据和主器件发送的停止信号后,芯片启动内部写周期将数据写到数据区,所有接收的数据在一个写周期内写入PCF8563。
图8字节写时序图
应答查询:
可以利用内部写周期时禁止数据输入这一特性,一旦主器件发送停止位指示主器件操作
结束时,PCF8563启动内部写周期,应答查询立即启动,包括发送一个起始信号和进行写操作的从器件地址。
如果PCF8563正在进行内部写操作,不会发送应答信号。
如果PCF8563
已经完成了内部自写周期,将发送一个应答信号,主器件可以继续进行下一次读写操作。
写保护:
写保护操作特性可使用户避免由于不当操作而造成对存储区域内部数据的改写,当WP
管脚接高时整个寄存器区全部被保护起来而变为只可读取。
读操作:
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)计数器将翻转到零并继续输出数据字节。
图11连续读时序图
六、实验步骤
硬件连接
将并口线插在实验板与PC机的并口插座上;按图13连接实验线路(CH451与CPU连接实验线路见图12);
图12连接实验线路
仔细检查无误后,接通电源。
(图中箭头表示需要接线的地方)
图13连接实验线路
软件设计
进入KEILC开发环境编写程序。
首先根据第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、表3。
在将时间按:
年、月、
星期、日、小时、分、秒读出后,按“XX-XX-XX”格式分两屏显示出来。
在进行I2C总线操作时,将所有中断关闭,以防中断程序,打乱其时序,操作完成再将中断恢复。
七、主要程序代码:
main()
{
unsignedchartemp=0;
unsignedcharTimeFLAG=0;
//MCU初始化
InitMCU();
//开关蜂鸣器,表示开始工作
speak_on();
delay_1ms(50);
speak_off();
Set_8563_Register();
Display_TEST();
while
(1)
{
if(key_data!
=0)//若有键按下
{
temp=key_data;
key_data=0;
switch(temp)
{
case0x40:
disp_time(0);
break;
case0x49:
disp_time
(1);
break;
default:
break;
}
}
}
}
voidspeak_on()
{
PC8255&=0xF7;//将8255PC口的第3位置0
}
/********************************************************\
|函数名speak_off|
|函数功能关闭蜂鸣器|
|参数无|
|返回值无|
\********************************************************/
voidspeak_off()
{
PC8255|=0x08;//将8255PC口的第3位置1
}
voidsend_disp_data(unsignedcharcomm,unsignedchar_data)
{
unsignedchari;
//送8BIT数据
for(i=0;i<8;i++)
{
DIN=(_data>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
//送4BIT命令
for(i=0;i<4;i++)
{
DIN=(comm>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
/*******************************************************\
|函数名send_comm|
|函数功能向CH451芯片发送命令|
|参数comm:
命令体|
|返回值无|
\*******************************************************/
voidsend_comm(unsignedcharcomm)
{
unsignedchari;
//送4BIT命令
for(i=0;i<4;i++)
{
DIN=(comm>>i)&0x01;
DCLK=1;
DCLK=0;
DCLK=1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
/*******************************************************\
|函数名disp_initialize|
|函数功能向CH451芯片发送初始化命令|
|参数无|
|返回值无|
\*******************************************************/
voiddisp_initialize()
{
chang_4052
(1);
DIN=0;
DIN=1;
DCLK=1;
LOAD=1;
DOUT=1;
send_disp_data(CH451_SETSYS,0x03);//设定系统参数
send_disp_data(CH451_SETDIS,0x80);//设定显示参数
}
/*******************************************************\
|函数名key|
|函数功能中断函数,获取当前按键状态|
|参数无|
|返回值无|
\*******************************************************/
voidkey()interrupt0
{
unsignedchari,temp;
EX0=0;//关中断
key_data=0;
temp=0;
send_comm(CH451_KEY);
for(i=0;i<7;i++)
{
temp=DOUT;
key_data=key_data|(temp<<(6-i));
DCLK=1;
DCLK=0;
DCLK=1;
}
/*key_print=key_data;
send_disp_data(CH451_LOAD0,0x10);
send_disp_data(CH451_LOAD1,0x10);
send_disp_data(CH451_LOAD2,key_data/10);
send_disp_data(CH451_LOAD3,key_data%10);
*/
EX0=1;//中断
}
/*******************************************************\
|函数名Display_TEST|
|函数功能测试显示LED数码管|
|参数无|
|返回值无|
\*******************************************************/
voidDisplay_TEST()
{
//初始化显示芯片
disp_initialize();
//延时
delay_1ms(100);
//送显“12345678”
send_disp_data(CH451_LOAD0,0x01);
send_disp_data(CH451_LOAD1,0x02);
send_disp_data(CH451_LOAD2,0x03);
send_disp_data(CH451_LOAD3,0x04);
send_disp_data(CH451_LOAD4,0x05);
send_disp_data(CH451_LOAD5,0x06);
send_disp_data(CH451_LOAD6,0x07);
send_disp_data(CH451_LOAD7,0x08);
delay_1ms(200);
//display_int(555);
//延时
delay_1ms(200);
//开中断,接受按键信息
EX0=1;
//"--------"
send_disp_data(CH451_LOAD0,0x12);
send_disp_data(CH451_LOAD1,0x12);
send_disp_data(CH451_LOAD2,0x12);
send_disp_data(CH451_LOAD3,0x12);
send_disp_data(CH451_LOAD4,0x12);
send_disp_data(CH451_LOAD5,0x12);
send_disp_data(CH451_LOAD6,0x12);
send_disp_data(CH451_LOAD7,0x12);
/*send_disp_data(CH451_LOAD0,0x08);
send_disp_data(CH451_LOAD1,0x08);
send_disp_data(CH451_LOAD2,0x08);
send_disp_data(CH451_LOAD3,0x08);
send_disp_data(CH451_LOAD4,0x08);
send_disp_data(CH451_LOAD5,0x08);
send_disp_data(CH451_LOAD6,0x08);
send_disp_data(CH451_LOAD7,0x08);
*/
}
/*******************************************************\
|函数名PCF8563Start|
|函数功能向时钟芯片发送开始信号|
|参数无|
|返回值无|
\*******************************************************/
voidPCF8563Start()
{
PCF8563SDA=1;
delay_1ms
(1);
PCF8563SCL=1;
delay_1ms
(1);
PCF8563SDA=0;
delay_1ms
(1);
PCF8563SCL=0;
delay_1ms
(1);
}
/*******************************************************\
|函数名PCF8563Stop|
|函数功能向时钟芯片发送停止信号|
|参数无|
|返回值无|
\*******************************************************/
voidPCF8563Stop()
{
PCF8563SDA=0;
delay_1ms
(1);
PCF8563SCL=1;
delay_1ms
(1);
PCF8563SDA=1;
delay_1ms
(1);
PCF8563SCL=0;
delay_1ms
(1);
}
/*******************************************************\
|函数名Get_Time|
|函数功能读取时钟|
|参数time:
读出的时钟数据|
|返回值0:
读取成功|
|1:
读取失败|
\*******************************************************/
unsignedcharGet_Time(unsignedchar*time)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 课程设计 报告书