*((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)键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。