一、实验名称:流水灯仿真实验
二、实验目的:
- 掌握ARM处理器的输入输出接口。
- 掌握通过MDK提供的仿真功能,实现系统的仿真运行。
- 通过该编程实验,进一步巩固和强化学生ARM汇编编程的能,ARM应用程序框架,培养学生实际应用的能力。
三、实验内容:
按下面电路图,编写一个流水灯程序,并通过MDK的仿真功能进行验证。
实验要求:
- 有1个拨码开关K1(接GPB1端口)作为输入;
- 有4个指示灯作为输出(接GPB5-GPB5端口);
- 拨码开关K1输入高电平时,指示灯从上到下(LED1到LED4)循环显示,每次只有一个灯亮;
- 拨码开关K1输入低电平时,指示灯从下到上(LED4到LED1)循环显示,每次只有一个灯亮;
- 要求每个灯点亮持续的时间是20ms-30ms之间。
- 使用C语言编写程序,给完整程序并加注释。
- 通过MDK的仿真功能验证程序的正确性。
main.c参考代码:
#include <S3C2440.H>
#include<stdio.h>
#include<stdlib.h>
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
void delay()
{
int i;
for(i = 0; i < 5; i++);
}
int main(){
int i;
GPBCON = 0x155551; //GPB1是输入端口,其余端口都是输出端口
GPBDAT = ~(0);
while(1){
while((GPBDAT & (1<<1)) == 0){ // 开关k1关闭,端口GPB1是低电平
// 指示灯从下到上(LED4到LED1)循环显示,每次只有一个灯亮
for(i = 8; i >= 5; i--){
GPBDAT &= ~(1<<i);
delay();
GPBDAT = ~(0);
}
}
while((GPBDAT & (1<<1)) != 0){ // 开关k1打开,端口GPB1是高电平
// 指示灯从上到下(LED1到LED4)循环显示,每次只有一个灯亮
for(i = 5; i <= 8; i++){
GPBDAT &= ~(1<<i);
delay();
GPBDAT = ~(0);
}
}
}
}