(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 实验目的