嵌入式系统实验报告 下载本文

(2)主函数中需要在开始初始化zlg7289。编写驱动和键值映射之后,在一个循环里面从键盘中读取按键的号码,根据键值映射读出按键的值。然后在主函数中,将读出的按键值在数码管上显示出来。

(3)Main函数的主要功能部分,GetKey()函数得到按键值是调用zlg7289获取键盘事件和核心。

3.7 实验结果总结

通过实验最终LED灯上能显示数字,即实现了通过键值控制LED灯

3.8 心得体会

通过本次实验对ZLG7289芯片的内部结构有了更进一步的了解,对ZLG7289驱动键盘和LED的方法也更进一步的进行了学习。

4. 实验四

4.1 实验名称

电机转动控制及中断实验

4.2 实验目的

(1)熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置

(2)编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。

(3)了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。

(4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。

4.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台 (3)PC (4)串口线

4.4 实验内容及要求

学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。

(1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速

(2)编程实现ARM的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。

(3)通过超级终端来控制直流电机与步进电机的切换。

4.5 实验设计与实验步骤

(1)新建工程,将“电机转动控制实验”中的文件添加到工程 (2)编写直流电机初始化数(MotorCtrl.c) (3)控制直流电机与步进电机

4.6 实验过程与分析

(1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换

(2)A/D转换可以把电信号转换成数字信号来控制电机的转速。 for(;;) { loop:

//if((rUTRSTAT0 & 0x1)) //有输入,则返回 if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机 {

*Revdata=RdURXH0(); goto begin; }

Delay(10);

ADData=GetADresult(0);

if(abs(lastADData-ADData)<20) goto loop; Delay(10);

count=-(ADData-lastADData)*3;

//(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角, //由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度 if(count>=0) {//转角大于零

for(j=0;j

for(i=0;i<=7;i++) {

SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } } else

{//转角小于零 count=-count;

for(j=0;j

for(i=7;i>=0;i--) {

SETEXIOBITMASK(stepdata[i], 0xf0); Delay(200); } } }

lastADData=ADData; } }

(3)S3C44B0X 具有6 个16bit定时器,每个定时器可以基于中断模式或 DMA模式运行。在定时中断服务程序中写需要定时处理的程序,每隔一段时间就会运行一次。

4.7 实验结果总结

利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。

4.8 心得体会

通过本次实验,熟悉了ARM自带的六路(三对)PWM,并对直流电机和步进电机的工作原理有了进一步的了解。

5. 实验五

5.1 实验名称

LCD驱动及触摸屏实验

5.2 实验目的

掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法;学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏;学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程对触摸屏进行控制。

5.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台 (3)PC (4)串口线

5.4 实验内容及要求

(1)学习LCD显示器的基本原理,理解其驱动控制方法 (2)编程对触摸屏进行控制,实现:

1.点击触摸屏上两点后,两点之间画出一条直线。 2.点击触摸屏并在其上移动,显示移动轨迹

(3)编程实现总线方式驱动模块的LCD和ARM内置的LCD控制器来驱动LCD

5.5 实验设计与实验步骤

(1)新建工程

(2)定义有关常量与宏

#define LCDWIDTH 320 #define LCDHEIGHT 240

U32* pLCDBuffer16=(U32*)0xc000000;// 一级缓存指针 U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];//二级缓存 (3)编写LCD 初始化函数 (4)编写LCD 刷新函数 (5)编写主函数

5.6 实验过程与分析

(1)通过不断刷新的方式获得LCD液晶屏幕的动画。即刷新函数将二级缓存LCDBuffer 的数据由32 位彩色图形信息转换成8 位256 色的图形信息,然后放到pLCDBuffer16指向的一级缓存。

(2)触摸屏的先得到触屏输出的电信号的值,然后转换为实际的屏幕坐标,再根据动作来决定如何处理缓存信息,刷新LCD。

LCD二级缓存矩阵: for (i=0;i<9;i++) { switch (i)

{ case 0: jcolor=0x00000000; // 黑色 break;

case 1: jcolor=0x000000e0; // 红色 break;

case 2: jcolor=0x0000d0e0; // 橙色 break;

case 3: jcolor=0x0000e0e0; // 黄 break;

case 4: jcolor=0x0000e000; // 绿色 break;

case 5: jcolor=0x00e0e000; // 青色 break;

case 6: jcolor=0x00e00000; // 蓝色 break;

case 7: jcolor=0x00e000e0; // 紫色 break;

case 8: jcolor=0x00e0e0e0; // 白色 break; }

for (k=0;k<240;k++)

for (j=i*32;j

jcolor=0x000000ff; for (i=0;i<240;i++) {if (i==80||i==160) jcolor<<=8;

for (j=288;j<320;j++) LCDBuffer[i][j]=jcolor; }

5.7 实验结果总结

本次实验由于坐标设定的问题并没有成功实现触摸痕迹的显示,但在测试过程中,在触摸屏上点击或移动时会在超级终端上有显示。

5.8 心得体会

虽然本次实验不太成功实现,但对LCD屏幕和触摸屏的工作原理有了进一步的了解,更好的掌握了LCD显示原理及显示驱动的嵌入式系统编程实现方法。

6. 实验六

6.1 实验名称

ucos-II裁剪实验

6.2 实验目的