实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc

上传人:b****3 文档编号:15507728 上传时间:2022-11-03 格式:DOC 页数:10 大小:431KB
下载 相关 举报
实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc_第1页
第1页 / 共10页
实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc_第2页
第2页 / 共10页
实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc_第3页
第3页 / 共10页
实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc_第4页
第4页 / 共10页
实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc

《实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc》由会员分享,可在线阅读,更多相关《实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc(10页珍藏版)》请在冰豆网上搜索。

实验四单片机原理及应用实验报告SPI按键显示接口设计文档格式.doc

(2)设计一个定时器。

能够输入定时时间,定时最长时间为99分59秒;

按启动键后开始倒计时,数码管显示当前剩余时间,每秒钟刷新一次数码管显示的数值;

定时时间到达后,用数码管闪烁指示。

三、实验说明

通过本实验,掌握ZLG7289专用按键显示芯片接口电路设计、制作与调试;

掌握SPI串行通信接口驱动程序设计;

掌握基于专用芯片的人机交互程序设计方法。

逐步掌握C语言的模块化程序设计方法。

必须用模块化方法进行C语言程序设计。

四、实验仪器和设备

PC机、KeiluVision2软件,C8051F020单片机,EC3在线仿真器。

五、实验原理

ZLG7289:

复位指令:

ZLG7289_Reset();

测试指令:

ZLG7289_Test();

左移指令:

ZLG7289_SHL();

右移指令:

ZLG7289_SHR();

循环左移:

ZLG7289_ROL();

循环右移:

ZLG7289_ROR();

下载数据:

ZLG7289_Download(mod,x,dp,dat);

闪烁控制:

ZLG7289_Flash(x);

消隐控制:

ZLG7289_Hide(x);

段点亮控制:

ZLG7289_SegOn(seg);

段关闭控制:

ZLG7289_SegOff(seg);

读键盘数据指令:

charZLG7289_Key()。

六、程序流程图

七、实验结果与分析

起始时系统默认为模式1,即计时器的功能,按下0键,可见数码管向上计时,计时最小单位是10ms,显示格式为xxx.xx;

计时最大值为999.99s.按下1键,计时暂停,按下2键,数码管清零。

如果再按下计时,从0重新计时。

当按下按键3,可以切换模式:

定时器和计时器。

当切换为定时器后,按键4、5分别可以设置定时初值,按键4设置定时器分钟初值,按键5设置秒的初值,最大可以设置到99min,99s。

当初值设置后,按下按键1,开始倒计时,显示的格式为xx.xx.以1s为基本单位倒计时。

当倒计时到0后,数码管将闪烁不止。

分析:

通过实验,完成了实验的各项任务,实现了简单的计时器和定时器的功能,并将两个功能写在了一个程序里,可切换使用不同的功能,熟悉了ZLG7289芯片的使用。

但是仍有许多不足之处。

在设计时,模块化的思想还不够深入,主程序里的程序代码太长,程序可读性变差;

在本实验中,由于ZLG7289芯片的工作时间很长,而在程序中又在不停的进行数码管数据的刷新,使得数码管显示不太稳定,而且对程序中断的判定也有很大影响,在今后的实验中,应该注意此芯片的使用,对数据不必刷新太快。

此次实验,让我们体会到对程序注释以及程序书写格式的注意,一个程序,如果格式写得乱七八糟,变量、函数的名字随便乱取,注释也没有,时间稍长,甚至连自己都很难看懂,所以,程序的写法显得尤为重要。

八、源代码

源代码必须有必要的注释,且要与流程图的逻辑关系对应。

#include<

ZLG7289.h>

bdwtd.h>

delay.h>

unsignedintms;

unsignedcharmin,s,j,k;

bitp,q;

//定义一个标准位p,在中断中使用

//定义一个标准位q,用于选择模式

/*

定义显示函数,用于将数据下载到ZLG芯片,并在数码管显示

*/

voidxianshi()

{

if(q==0)

{

/*

运用整数除法和取余的方法将各个单位的值分离出

*/

ZLG7289_Download(1,0,0,ms/10000);

ZLG7289_Download(1,1,0,(ms%10000)/1000);

ZLG7289_Download(1,2,1,(ms%10000%1000)/100);

ZLG7289_Download(1,3,0,(ms%10000%1000%100)/10);

ZLG7289_Download(1,4,0,(ms%10000%1000%100%10));

ZLG7289_Flash(0xff);

//让数码管不闪烁

}

else

{ //min=ms/60000;

//s=ms%60000/100;

ZLG7289_Download(1,0,0,0);

ZLG7289_Download(1,1,0,min/10);

ZLG7289_Download(1,2,1,min%10);

ZLG7289_Download(1,3,0,s/10);

ZLG7289_Download(1,4,0,s%10);

if(ms==0)

ZLG7289_Flash(0xe0);

//当计时完成后数码管闪烁

}

定义函数jian(),处理定时计时

voidjian()

{

if(ms==0)

TR0=0;

ms--;

min=ms/6000;

s=ms%6000/100;

定义函数jia(),用于处理计时器。

voidjia()

if(ms>

=99999)

ms=0;

ms++;

由于所有的计时都是用10ms为基本计数单位,所以将输入的分钟,秒都转化为10ms

voidjiafa()

ms=min*6000+s*100;

voidmain()

bdwtd();

//关闭看门狗,在bdwtd()中已令EA=1

XBR2=0x40;

//设置端口I/O交叉开关寄存器,交叉开关使能

P3MDOUT=0xff;

//P3端定义推挽输出

ZLG7289_Init(10);

//ZLG7289初始化

ms=0;

//ms为计时基本单位,初值设为0

min=0;

s=0;

q=0;

CKCON=0x08;

//定时器时钟控制,T0使用系统时钟(默认2M)

TMOD=0x01;

//T0方式控制选择计数方式1

TH0=(65536-20000)/256;

//为T0置初值,计数20000次时间为10ms

TL0=(65536-20000)%256;

//

TR0=0;

//先关闭T0

ET0=1;

//中断允许寄存器:

允许T0中断

PT0=1;

//设置优先级,设置T0高优先级

delay(10);

/*

初始化数码管,0~5号管显示为0

*/

for(k=0;

k<

5;

k++)

用选择语句,将2号管小数点显示

if(k==2)

ZLG7289_Download(1,k,1,0);

else

ZLG7289_Download(1,k,0,0);

ZLG7289_Hide(0x1f);

//将5~7消隐

进入死循环,扫描按键,等待中断

while

(1)

当有中断时,显示数据

if(p==1)

{ if(q==0)

{

jia();

xianshi();

}

else

jian();

p=0;

//完成处理清零标准位

}

当有按键按下时,ZLG7289_pinINT返回0,进入选择语句进行判断

if(ZLG7289_pinINT==0)

{

delay(10);

/*

进行按键查询,各个按键的意义如下

0:

计时开始

1:

计时停止

2:

清零

3:

模式选择

4:

设置倒计时分钟的初值

5:

设置倒计时秒的初值

*/

j=ZLG7289_Key();

//返回按键值

当按键为3时,表示模式切换用q作为标识,

0表示做秒表计时,1表示当计时器倒计时

if(j==3)

{

q=!

q;

while(!

ZLG7289_pinINT);

//等待按键释放

当按下按键0而且T0未开启,表示计数开始,开启T0

if(j==0&

&

TR0==0)

TR0=1;

//等待按键释放

当按下按键1,表示暂停计时,定时器T0停止计数

elseif(j==1)

TR0=0;

当按下按键2,表示清零,将计数基本单位置零,并在数码管上显示0

elseif(j==2)

ms=0;

min=0;

s=0;

for(k=0;

=4;

{

if(k==2) //这个选择是为显示2号管小数点

ZLG7289_Download(1,k,1,0);

else

ZLG7289_Download(1,k,0,0);

}

ZLG7289_Flash(0xff);

当输入按键为4时,表示输入定时初值的分钟部分

elseif(j==4)

if(min>

=59)

min=0;

else

min++;

/*

调用jiafa()函数,将输入的按键值计算加入总的10ms的值

*/

jiafa();

ZLG7289_Download(1,1,0,min/10);

ZLG7289_Downl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1