西电ARM单片机实验报告 下载本文

*((u8*)0x20006000)=seg7table[18]; delay(8000); *((u8*)0x20007000)=0x3e; *((u8*)0x20006000)=seg7table[19]; delay(8000); }

}/****************************************************************************/ /* Function name : 循环延时子程序 */ /* Description : 循环 'time' 次 */ /* Return type :void */ /* Argument : 循环延时计数器 */ /****************************************************************************/ void Delay(int time) { int i; int delayLoopCount=10000; for(;time>0;time--); for(i=0;i

结果:在六个数码管上依次显示“HELLO”,可分辨出轮流显示。

3.在六个数码管上依次显示“HELLO”,分辨不出轮流显示。步骤同上。 程序如下(相对于步骤2,此处仅将Delay的延时从10000调至1):

void Test3_Seg7(void) { *((u8*)0x20007000)=0x00; for(;;) { *((u8*)0x20007000)=0x2f; *((u8*)0x20006000)=seg7table[16]; delay(1); *((u8*)0x20007000)=0x37; *((u8*)0x20006000)=seg7table[17]; delay(1); *((u8*)0x20007000)=0x3b; *((u8*)0x20006000)=seg7table[18]; delay(1); *((u8*)0x20007000)=0x3d; *((u8*)0x20006000)=seg7table[18]; delay(1); *((u8*)0x20007000)=0x3e; *((u8*)0x20006000)=seg7table[19]; delay(1); }

}

结果:在六个数码管上依次显示“HELLO”,不可分辨出轮流显示。

*4.在每个数码管上递增显示0-9。步骤同上。 程序如下:

/****************************************************************************/ /*文件名称: LEDSEG7.C */

/*实验现象: 数码管依次显示出0、1,2、??9、a、b、C、d、E、F */ /****************************************************************************/

void Test4_Seg7(void) { int i; for(;;) { *((u8*)0x20007000)=0x3e; for(i=0;i<0x0a;i++) { *((u8*)0x20006000)=seg7table[i]; delay(3000); } *((u8*)0x20007000)=0x3d; for(i=0;i<0x0a;i++) { *((u8*)0x20006000)=seg7table[i]; delay(3000); } *((u8*)0x20007000)=0x37; for(i=0;i<0x0a;i++) { *((u8*)0x20006000)=seg7table[i]; delay(3000); } *((u8*)0x20007000)=0x2f; for(i=0;i<0x0a;i++) { *((u8*)0x20006000)=seg7table[i]; delay(3000); }

*((u8*)0x20007000)=0x1f; for(i=0;i<0x0a;i++) { *((u8*)0x20006000)=seg7table[i]; delay(3000); } }

}/****************************************************************************/ /* Function name : 循环延时子程序 */ /* Description : 循环 'time' 次 */ /* Return type :void */ /* Argument : 循环延时计数器 */ /****************************************************************************/ void Delay(int time) { int i; int delayLoopCount=1000; for(;time>0;time--); for(i=0;i

结果:在每个数码管上递增显示0-9。

五、实验分析及总结

本实验中,数码管采用共阳极类型,所以是给0亮,操作时,先给地址0x20007000的某位给0,让指定的某位亮,然后给地址0x20006000送入编码好的数据,即seg7table,以此来实现让数码管显示指定的数。

实验二 键盘输入实验

一、实验目的

1、学习键盘驱动原理;

2、掌握通过CPU的I/O扩展键盘的方法。

二、实验仪器

JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、PC机、串口连接线。

三、实验原理

1.键盘实现方案

1)采用专门的芯片实现键盘扫描 2)采用软件实现键盘扫描

2.软键盘实现方案 当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O 口的输入将被拉低到逻辑0。

3.按键抖动

开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如下图所示的好几个脉冲。弹起的持续时间通常将维持在5ms~30ms 之间。

4.矩阵键盘电路

1)一个瞬时接触开关(按钮)放置在每一行与每一列的交叉点。每一行由一个输出端口的一位驱动,每一列由一个电阻器上拉且供给输入端口一位。

2)键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。