微机实验报告(含思考题)实验6

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六

基于ARM的键盘及数码管驱动实验

1.掌握键盘及数码管驱动原理。

2.掌握ZLG7290芯片的使用方法。

3.掌握I2C总线的协议标准。

4.掌握Linux下键盘驱动的实现方法。

编写测试程序控制键盘和数码管。

1.了解ARM9处理器结构

2.了解i2c协议

硬件:ARM嵌入式开发平台,PC 机Pentium100 以上。

软件:PC机Linux操作系统+MINICOM +AMRLINUX开发环境

1、ZLG7290寄存器介绍

ZLG7290内部有16个8bits寄存器,访问这些寄存器需要通过I2C 总线接口来实现.访问内部寄存器要通过“I2C总线地址+子地址”的方式来实现。ZLG7290B 的I2C 总线器件地址是70H(写操作)和71H(读操作)。

? 键值寄存器Key(地址:01H)

如果某个普通键(K1~K56)被按下,则微控制器可以从键值寄存器Key中读取相应的键值1~56。如果微控制器发现ZLG7290 的INT 引脚产生了中断请求,而从Key 中读到的键值是0,则表示按下的可能是功能键。键值寄存器Key 的值在被读走后自动变成0。? 显示缓冲区DpRam0~DpRam7(地址:10H~17H)

DpRam0~DpRam7 这8 个寄存器的取值直接对应8个数码管的显示内容。每个寄存器的8 个位分别对应数码管的a,b,c,d,e,f,dp 段,MSB 对应a,LSB 对应dp。例如大写字母H 的字型数据为6EH(不带小数点)或6FH(带小数点)。

? 命令缓冲区CmdBuf0 和CmdBuf1(地址:07H 和08H)

通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

2、ZLG7290控制命令介绍

寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同组成命令缓冲区。通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

?

下载数据并译码(Download)

在指令格式中,高4 位的0110 是命令字段;A3A2A1A0 是数码管显示数据的位地址(其中A3 留作以后扩展之用,实际使用时取0 即可),位地址编号依次为0,1,2,3,4,5,6,7,代表8个数码管,dp 控制小数点是否点亮,0-点亮,1-熄灭;flash 表示是否要闪烁,0-正常显示,1-闪烁;d4d3d2d1d0 是要显示的数据,包括10 种数字和21 种字母。

? 闪烁控制(Flash)

在命令格式中,高4 位的0111 是命令字段;xxxx 表示无关位,通常取值0000;第2 字

节的Fn(n=0~7)控制数码管相应位的闪烁属性,0-正常显示,1-闪烁。复位后,所有位都不闪烁。

3、Linux下i2c驱动接口函数介绍

Linux为我们提供了一系列的接口函数,通过调用这些函数可以很方便的访问到我们的I2C设备,达到对它的操作和控制。在本实验中,就是通过调用这些函数,完成对zlg7290 内部寄存器的配置,从而驱动键盘和数码管按照我们需要的方式工作

? 打开设备:

在linux下编程实现对具体设备的操作,首先要做的就是打开要操作的设备文件,zlg7290 设备的设备文件是“/dev/zlg7290/0”。

具体实现函数是:

fd=open(“/dev/zlg7290/0”,O_RDWR)

? 向设备写数据:

具体实现过程是先写入要配置的寄存器的地址,然后写入要配置的值,具体实现函数是:unsigned char temp[2]; //定义一个数组用于存放要发送的数据,包括寄存器地址和要写入该寄存器内的值

temp[0]=address; //将要配置的寄存器的地址address写入temp[0]中。

temp[1]=data; //将要写入该寄存器中的值data写入//temp[1]中。

write(fd,temp,2); //用write函数向设备写入数据temp,首先写入地址address,然后写入值data。

配置一般的寄存器都是这个步骤,但是唯一例外的是配置命令寄存器cmdbuf0和

cmdbuf1,因为写入命令寄存器中的命令码均为16bit,因此需要通过两步完成对命令码的发送,具体实现代码如下:

unsigned char temp[3];

temp[0]=address;

temp[1]=cmd1; //要写入的命令码的高八位

temp[2]=cmd2; //要写入的命令码的低八位

write(fd,temp,3);

? 关闭设备:

close(fd);

1. 在数码管上显示数据有两种方法,一种方法是直接向8个数据缓冲区DpRam0~DpRam7写入数据分别控制每个数码管的8个独立led的亮灭,使其显示不同的数据。

2. 在数码管上显示数据的另一种方法是直接向命令寄存器cmdbuf0或cmdbuf1写入“下

载数据并译码”命令,直接控制数码管的显示内容,具体译码规则如表一所示。

3. 当某个按键被按下时,可以通过读取“键值寄存器Key(地址:01H)”的值来得到

键值,将所按键的键值显示在数码管上。

4. zlg7290提供数码管的闪烁功能,通过向命令寄存器发送闪烁控制命令可以控制某个

数码管闪烁。通过按键控制数码管的闪烁,具体功能是当按下键盘1-4时,控制数

码管1-4闪烁。

5.打开一个终端1,将四个源文件交叉编译成arm下的可执行文件example1-example4 (具体参见实验五一些步骤)

6.重新打开一个终端2,输入命令minicom进入ARM开发板的命令行界面,检查硬

件是否连接好后,上电开发板,进入ARM-linux操作系统的命令行。

相关文档
最新文档