实验名称:数码管显示实验
实验目的:
1掌握JXARM9-244(1)0教学实验平台系统使用。
2. 熟悉ADT IDE ARM开发环境。
实验内容(含步骤):
1. 总体步骤:先编译,启动目标机,待显示2410后,进行创建链接,下载,运行
2. 实验过程:在编译过程中,编译失败,显示硬件连接失败,组员认为是目标机与电脑
连接问题,拔了插过,但仍然不行,后来换了一台电脑连接,编译成功,创建链接, 下载,运行就成功显示效果了。理解原理后,通过简单的修改地址20007000的内 容为0x80,知道最高位控制风扇的转停,推理后六位控制对应六个数码管的亮暗, 定义HELLOO的字符编码(HGFEDCBA对应每一段小管和小数点),数码管的
状态编码,利用视觉差成功显示HELLOO,然后通过j的计数和条件来实现了led 流水灯的伪同步
3.代码如下:
/****************************************************************************/
/*文件名称: LEDSEG7.C */
/*实验现象: 共阳数码管显示HELLOO,同时led流水灯1357亮(灭)2468灭(亮)交替闪烁 */
/****************************************************************************/
#define U8 unsigned char
/*HELLOO的字符编码*/
unsigned char hello[6] = {
0x89, 0x86, 0xc7, 0xc7, 0xc0, 0xc0,
};
/*六个数码管只亮一个的状态编码*/
unsigned char con[6] = {
0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe
};
void Delay(int time);
void Test_Seg7(void) {
int i, j;
int flag = 1;
for(j=0; ; j++) {
*((U8*) 0x20007000) = 0x80;
/* 数码管从HELLOO依次将字符显示出来 */
for(i=0;i<6;i++) {
/* 查表并输出数据 */
*((U8*) 0x20007000) = con[i] ;
*((U8*) 0x20006000) = hello[i];
Delay(1);
}
/*led流水灯1357亮(灭)2468灭(亮)交替闪烁*/
if (j%10==0){
if (flag==1) *((U8*) 0x20005000) = 0xaa;
else *((U8*) 0x20005000) = 0x55;
flag = !flag;
}
}
}
/****************************************************************************/
/* Function name : 循环延时子程序 */
/* Description : 循环 'time' 次 */
/* Return type :void */
/* Argument : 循环延时计数器 */
/****************************************************************************/
void Delay(int time) {
int i;
int delayLoopCount=100;
for(;time>0;time--);
for(i=0;i<delayLoopCount;i++);
}
实验总结:
XX:这次实验的课题是数码管显示实验,在这次实验中,我们学会了如何用代码操控数码管的显示,并按照自己的意愿用数码显示出hello的字样,感受到了用代码控制硬件的乐趣所在,这充分激起了我对嵌入式系统开发的兴趣,很高兴能以这样的实验来帮助我们入门。
XX:这次实验的课题是数码管显示实验,做一名软件班学生,这是第一次直接用软件操纵硬件,有趣。小组一起讨论如何用代码操控数码管的显示出HELLOO(利用视觉欺骗,快速闪过每个字母)并使8个小红灯有韵律的闪烁(为了好看)。其中用到了很多的16位地址(平时用的较少),本来在其中可以用到移位运算使其更灵活,但因为种种原因没做,嗯,听老师说,下次要用。
XX:本次实验题为数码管显示实验,从操作上及技术来讲,可谓是相当简单的一次实验,作为本嵌入式入门课程的第一次实验也是相当合理且充满趣味。(给老师点赞)本人也很荣幸能够作为荣获百分小组的组员之一。本次试验认识了我们需要操作的目标机,明白机器中每个组件其实映射到真实的物理地址之中,了解了其中部分组件的物理地址(如6位数码管)。这样由地址再来进行数码管变换显示程序的编写就便是逻辑和策略了。
XX:结合软硬件进行编程和以前在只在软件上编程有很大的不同。很多以前软件上比较简单的东西直接挪到硬件上实现会有一些问题。像LED刷新的速率过快了,LED显示的hello会不明显。我觉得应该是LED访问那个内存段的时候,内存正在被修改,LED灯读到了脏数据,导致了LED灯有时候会显示一些不该显示的东西。我加了延迟函数后效果明显好了很多。
XX:通过操控某个地址的内容来实现数码管的内容,熄亮状态,led流水灯的闪灭等转变,只是简单的映射,但也很巧妙。六个数码管的地址都是相同,地址只有一个,六个数码管每一刻显示的内容都相同,而每个数码管的状态亮或者灭是可以分别控制的,先第一个显示H,后面全灭,再第二个显示E,其他全灭,这样如果两次显示的时间极短,利用视觉停留效果实现HELLOO的显示。同时下面的led流水灯闪烁,arm不支持多线程,可以通过中断,条件语句等来实现并发。