if(key>9)
{//键值大于9显示十位 }
WriteSDIO(ZLG7289_CMD_DATA0|2);//发送十位数据 WriteSDIO((unsigned char)(key/10)); Delay(1);
WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示 WriteSDIO(4);
else
据老师要求,又将8位的改成了2位的,成功实现实验要求。
{//键值小于10不显示十位 }
WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示 WriteSDIO(1);
ZLG7289_DISABLE();//zlg7289放弃同步串口控制权
3.7 实验结果总结
通过本次实验,我熟悉ZLG7289芯片的内部结构,掌握了用ZLG7289驱动键盘和LED的方法,掌握了ARM汇编语言和C语言的编程方法,达到实验目的。
3.8 心得体会
实验过程中的编码耗时较长,自己的编程能力不足,在同学的协助下才完成,往后要加强这方面的练习。
4. 实验四
4.1 实验名称
电机转动控制及中断实验
4.2 实验目的
①熟悉ARM自带的六路(三对)PWM
②了解直流电机和步进电机的工作原理
③熟悉ARM自带的A/D转换器的工作原理及编程方法 ④利用A/D转换器实现对直流电机和步进电机
4.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。
软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。
4.4实验内容及要求
内容:
学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM 知识,掌握PWM 的生成方法,同时掌握I/O 的控制方法。 要求:
①编程实现ARM 芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速。
②编程实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。
③通过超级终端来控制直流电机与步进电机的切换。
4.5实验设计与实验步骤
首先,新建工程,将“Exp6 电机转动控制实验”中的文件添加到工程。其次,编写直流电机初始化数(MotorCtrl.c),设置寄存器TCFG0、TCFG1、TCNTB0、TCON,再次,控制直流电机,还有,初始化开发板,初始化直流电机,初始化AD转换器,采样AD值,延时,设置相应的脉冲宽度,延时。最后,采样AD值,延时,采样AD值,延时,根据AD旋钮转角确定步数及转动方向,发出步进电机控制命令,保存本次采样值。
4.6实验过程与分析
核心代码如下 void init_ADdevice()
{//初始化 }
int GetADresult(int channel) {
rADCCON=(channel<<2)|ADCCON_ENABLE_START; }
void init_MotorPort() {
rTCFG0=(0<<24)|2; rTCFG1=0; }
void SetPWM(int value) { }
rTCMPB0= MOTOR_MID+value; rTCNTB0= MOTOR_CONT; rTCMPB0= MOTOR_MID; rTCON=0x2; rTCON=0x19;
Delay(10);
while(!(rADCCON&ADCCON_FLAG));//转换结束 return rADCDAT;//返回采样值 rADCPSR=20;
rADCCON=ADCCON_SLEEP;
4.7 实验结果总结
实现了ARM 芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速。实现ARM 的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。通过超级终端来控制直流电机与步进电机的切换。通过键盘来控制直流电机的转动或停止。
4.8 心得体会
通过本次实验,熟悉了ARM自带的六路。了解了直流电机和步进电机的工作原理。熟悉了ARM自带的A/D转换器的工作原理及编程方法。掌握了利用A/D转换器实现对直流电机和步进电机的控制。因为看到自己努力的成果,我不由得多按了几次键盘来控制直流电机。
5. 实验五
5.1 实验名称
LCD驱动及触摸屏实验
5.2 实验目的
①掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法
②学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏。
③学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程
5.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。
软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。
5.4实验内容及要求
内容:
学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏。学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程实现对触摸屏的控制。 要求:
①点击触摸屏上两点后,两点之间画出一条直线。 ② 点击触摸屏并在其上移动,显示移动轨迹。
5.5实验设计与实验步骤
①新建工程,将“Exp8 触摸屏驱动实验”中的文件添加到工程。
②在头文件中定义宏及常量(tchscr.c,tchscr.h) ③定义驱动函数(tchscr.c)
读取触摸点x 轴电压值:发送读取x电压值,控制字SendSIOData,等待8个时钟节拍,读取采样值高8位,ReadSIOData,发送读取x电压值,控制字SendSIOData,将第一次采样值左移8位,读取低8位并与以前高8位组成16位数据,去掉低4位,保留12位有效数据。
读取触摸点坐标:打开ADS7843,读取触摸点x轴电,压值4次取平均值,读取触摸点y轴电压值4次取平均值,打开ADS7843,对采样结果进行转换。
④编写测试函数(tchscr.c)
将触摸动作及触摸点坐标在超级终端上显示出来。
⑤校准触摸屏坐标输出,转换坐标,与LCD 紧密配合 ⑥通讯软件超级终端来将生成的文件放到嵌入式开发平台中。
5.6实验过程与分析
核心代码如下:
void TchScr_GetScrXY(int *x, int *y, U8 bCal)
{//获得触摸点坐标
unsigned int temp;
rPDATF&=~ADS7843_PIN_CS;//打开ADS7843
SendSIOData(ADS7843_CMD_X);//发送读取x电压值控制字
SendSIOData(0);//等待8个时钟节拍,因为完成一转换需要16个时钟 temp=ReadSIOData();//读取采样值高8位 SendSIOData(ADS7843_CMD_X); temp<<=8;
temp|=ReadSIOData();//读取低8位并与以前高8位组成16位数据 *x=(temp>>4);//去掉低4位,保留12位有效数据 SendSIOData(0); temp=ReadSIOData();
SendSIOData(ADS7843_CMD_X); temp<<=8;
temp|=ReadSIOData(); *x+=(temp>>4);