实验1.流水灯实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

陕西科技大学实验报告

班级信工132学号 201306030214姓名孙丹丹实验组别 08 实验日期室温报告日期成绩

报告内容:(目的和要求、原理、步骤、数据、计算、小结等)

实验名称:流水灯实验

一、实验目的

1.学习基本的IO口线定义及输入输出方向定义

2.学习串并转换器件HC595的使用方法

3.学习用查询方式读IO口线上的开关量

二、实验内容说明

ARM7的口线在使用前均要给出功能定义,有些功能还要给出方向的定义,

本次实验中所用口线均被定义为基本的IO功能,其中P0.16方向为输入,P0.4、

P0.10、P0.12方向为输出。HC595芯片有3个数据量输入端,在数据转换中分别

用于片选(ST_CP)、数据输入(DS)和时钟产生(SH_CP);9个数据输出端

(Q0-Q7,Q7’——用于级联);OE使能端;MR低点平时将移位寄存器的数据清

零,通常将它接VCC。

三、实验说明

1、74HC595工作原理

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存

器和存储器是分别的时钟。数据在SHcp(见时序图)的上升沿输入,在STcp(见

时序图)的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存

器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一

个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,

具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总

线。

2、74HC595特点

(1)高速移位时钟频率F>25MHz。

(2)标准串行(SPI)接口。

(3)CMOS串行输出,可用于多个设备的级联。

(4)低功耗:TA=25℃时,I cc=4uA(MAX)。

2、74HC595引脚和说明

实验图1-1 74HC595引脚图

实验表1-2 74HC595的引脚

74HC595的数据端:QA--QH: 八位并行输出端,可以直接控制数码管的8个段。QH': 级联输出端。我将它接下一个595的SI端。 SI: 串行数据输入端。

SCLR(10脚): 低电平时将移位寄存器的数据清零。通常我将它接Vcc。

SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。

控制移位寄存器:SCK上升沿数据移位,SCK 下降沿数据保持。

RCK(12脚):上升沿时移位寄存器的数据进入存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲更新显示数据。

控制存储寄存器: RCK 上升沿移位寄存器的数据进入存储寄存器,RCK下降沿存储寄存器数据不变。

G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

四、实验原理图

实验图4-1 4流水灯原理图

实验图4-2 8流水灯原理图

五、实验步骤

1.开发板上JP11->LED、JP12->LED、JP13->LED、JP3短接

2.ADS1.2中编写源程序并调试,最后形成.hex

3.烧写.hex文件到实验板

4.按复位键运行

六、流程图

子程序显示流程图

主程序否

驱动输出子程序流程图

延时子程序流程图

七、实验结论与小结

实验分成两部分来做,4流水灯和8流水灯。两个跳线不同,实验时应注意。实现了LED 灯的流水显示。

八、实验源程序

#include "config.h"

#define LS_SH (1<<4)

//clk

#define LS_DS (1<<10) //data

#define ST_CP3 (1<<12) //store

#define uint unsigned int

#define uchar unsigned char

void delay(uint32 i)

{

uint32 j;

for(;i>0;i--)

for(j=50000;j>0;j--);

}

void SENT(uchar date)

{

uint i;

IO0CLR=ST_CP3;

for(i=8;i>0;i--)

{

IO0CLR=LS_SH;

if((date&0x80)!=0)

{ IO0SET=LS_DS; }

else

{ IO0CLR=LS_DS; }

date=date<<1;

IO0SET=LS_SH;

}

IO0SET=ST_CP3;

}

int main (void)

{// add user source code

uchar temp;

uint i;

PINSEL0=0xfccffcff; //P0.4 0.10 0.12 GPIO

SCS=0x00; //low power

IO0DIR=0x00001410; //P0.4 0.10 0.12 OUTPUT

while(1)

{

temp=0xfe;

for(i=8;i>0;i--)

{

SENT(temp);

delay(50);

temp=((temp<<1)+1);

}

}

相关文档
最新文档