实验1.流水灯实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}
}