ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:18.91KB ,
资源ID:6238663      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6238663.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子科技大学微机实验报告含思考题河畔下的哈实验6教材.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

电子科技大学微机实验报告含思考题河畔下的哈实验6教材.docx

1、电子科技大学微机实验报告含思考题河畔下的哈实验6教材 实验六 基于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 总线接口来实现.访问内部寄存器要通过

2、“I2C总线地址+子地址”的方式来实现。ZLG7290B 的I2C 总线器件地址是70H(写操作)和71H(读操作)。 ? 键值寄存器Key(地址:01H) 如果某个普通键(K1K56)被按下,则微控制器可以从键值寄存器Key中读取相应的键值156。如果微控制器发现ZLG7290 的INT 引脚产生了中断请求,而从Key 中读到的键值是0,则表示按下的可能是功能键。键值寄存器Key 的值在被读走后自动变成0。 ? 显示缓冲区DpRam0DpRam7(地址:10H17H) DpRam0DpRam7 这8 个寄存器的取值直接对应8个数码管的显示内容。每个寄存器的8 个位分别对应数码管的a,b,c,

3、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 是数码管显

4、示数据的位地址(其中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(n07)控制数码管相应位的闪烁属性,0正常显示,1闪烁。复位后,所有位都不闪烁。 3、 Linux下i2c驱动接口函数介绍 Linux为我们提供了一系列的接口函数,通过调用这

5、些函数可以很方便的访问到我们的I2C设备,达到对它的操作和控制。在本实验中,就是通过调用这些函数,完成对zlg7290内部寄存器的配置,从而驱动键盘和数码管按照我们需要的方式工作 ? 打开设备: 在linux下编程实现对具体设备的操作,首先要做的就是打开要操作的设备文件,zlg7290设备的设备文件是“/dev/zlg7290/0”。 具体实现函数是: fd=open(“/dev/zlg7290/0”,O_RDWR) ? 向设备写数据: 具体实现过程是先写入要配置的寄存器的地址,然后写入要配置的值,具体实现函数是: unsigned char temp2; /定义一个数组用于存放要发送的数据,

6、包括寄存器地址和要写入该寄存器内的值 temp0=address; /将要配置的寄存器的地址address写入temp0中。 temp1=data; /将要写入该寄存器中 的值data写入/temp1中。 write(fd,temp,2); /用write函数向设备写入数据temp,首先写入地址address,然后写入值data。 配置一般的寄存器都是这个步骤,但是唯一例外的是配置命令寄存器cmdbuf0和cmdbuf1,因为写入命令寄存器中的命令码均为16bit,因此需要通过两步完成对命令码的发送,具体实现代码如下: unsigned char temp3; temp0=address; t

7、emp1=cmd1; /要写入的命令码的高八位 temp2=cmd2; /要写入的命令码的低八位 write(fd,temp,3); ? 关闭设备: close(fd); 1. 在数码管上显示数据有两种方法,一种方法是直接向8个数据缓冲区DpRam0DpRam7写入数据分别控制每个数码管的8个独立led的亮灭,使其显示不同的数据。 2. 在数码管上显示数据的另一种方法是直接向命令寄存器cmdbuf0或cmdbuf1写入“下载数据并译码”命令,直接控制数码管的显示内容,具体译码规则如表一所示。 3. 当某个按键被按下时,可以通过读取“键值寄存器Key(地址:01H)”的值来得到键值,将所按键的键

8、值显示在数码管上。 4. zlg7290提供数码管的闪烁功能,通过向命令寄存器发送闪烁控制命令可以控制某个数码管闪烁。通过按键控制数码管的闪烁,具体功能是当按下键盘1-4时,控制数码管1-4闪烁。 5 打开一个终端1,将四个源文件交叉编译成arm下的可执行文件example1-example4(具体参见实验五一些步骤) 6 重新打开一个终端2,输入命令minicom进入ARM开发板的命令行界面,检查硬件是否连接好后,上电开发板,进入ARM-linux操作系统的命令行。 7 在终端2的ARM-linux操作系统的命令行下依次运行example1-example4可执行程序,观察结果。 步骤1程序

9、: #include #include #include #include /#include i2c.h #define ZLG7290_ADDR_DpRam0 0x10 int fd; void zlg7290_disp(unsigned char *buf, unsigned char num); int main() int ret,i; unsigned char buf8; fd = open(/dev/zlg7290/0, O_RDWR); if(fd = -1) printf(Cant open I2C device!n); exit(-1); buf7 = 0xe0; buf

10、6 = 0xbe; buf5 = 0xb6; buf4 = 0x66; buf3 = 0xf2; buf2 = 0xda; buf1 = 0x60; buf0 = 0xfc; zlg7290_disp(buf, 8); close(fd); return 0; /* * Function name: zlg7290_disp * Descriptions: control zlg7290 to driver led * * Input: unsigned char *buf: display buffer unsigned char num: display number * Output:

11、NULL */ void zlg7290_disp(unsigned char *buf, unsigned char num) unsigned char i; unsigned char temp2; for(i=0;inum;i+) temp0 = ZLG7290_ADDR_DpRam0+i; temp1 = *buf; write(fd, temp, 2); buf+; usleep(5000); /* * End Of File */ 步骤2程序: #include #include #include #include /#include i2c.h #define ZLG7290_

12、ADDR_cmdbuf0 0x07 int fd; void zlg7290_disp(unsigned char *buf, unsigned char num); int main() int ret,i; unsigned char buf8; fd = open(/dev/zlg7290/0, O_RDWR); if(fd = -1) printf(Cant open I2C device!n); exit(-1); buf7 = 0x07; buf6 = 0x06; buf5 = 0x05; buf4 = 0x04; buf3 = 0x03; buf2 = 0x02; buf1 =

13、0x01; buf0 = 0x00; zlg7290_disp(buf, 8); close(fd); return 0; /* * Function name: zlg7290_disp * Descriptions: control zlg7290 to driver led * * Input: unsigned char *buf: display buffer unsigned char num: display number * Output: NULL */ void zlg7290_disp(unsigned char *buf, unsigned char num) unsi

14、gned char i; unsigned char temp2; for(i=0;inum;i+) temp0 = ZLG7290_ADDR_cmdbuf0; temp1 = 0x60+i; temp2 = *buf; buf+; write(fd, temp, 3); usleep(5000); /* * End Of File */ 步骤3程序: #include #include #include #include /#include i2c.h int fd; int zlg7290_getkey(char *key); void zlg7290_disp(unsigned char

15、 *buf, unsigned char num); int main() int ret,i; unsigned char buf9; char key; fd = open(/dev/zlg7290/0, O_RDWR); if(fd = -1) printf(Cant open I2C device!n); exit(-1); zlg7290_disp(buf, 8); for (;) if (zlg7290_getkey(&key) != 0) printf(Read key value failn); exit(-1); buf0=key%10; buf1=key/10; zlg72

16、90_disp(buf, 2); usleep(1000000); close(fd); return 0; /* * Function name: zlg7290_getkey * Descriptions: get the key value from zlg7290 * * Input: unsigned short *key: the gotten key value * Output: 0 : OK -1: fail */ int zlg7290_getkey(char *key) unsigned char temp2; temp0 = 1; temp1 = 0; if (writ

17、e(fd, temp, 1) != 1) return -1; if (read(fd, temp, 2) != 2) return -1; *key = temp0 + (temp1 * 256); return 0; /* * Function name: zlg7290_disp * Descriptions: control zlg7290 to driver led * 鎺埗zlg7290椹卞姩led * Input: unsigned char *buf: display buffer unsigned char num: display number * Output: NULL

18、 */ void zlg7290_disp(unsigned char *buf, unsigned char num) unsigned char i; unsigned char temp3; for(i=0; inum; i+) temp0 = 0x07; temp1 = 0x60+i; temp2 = *buf; buf+; write(fd, temp, 3); usleep(5000); /* * End Of File */ 1. I2C总线数据传输的基本格式? 答:从左到右依次为: S:起始位(START); SA:从机地址(Slave Address),7 位从机地址; W:

19、写标志位(Write),1 位写标志; R:读标志位(Read),1 位读标志; A:应答位(Acknowledge),1 位应答; ?:非应答位(Not Acknowledge),1 位非应答; D:数据(Data),每个数据都必须是8 位; P:停止位(STOP); 2. 要实现控制数码管闪烁的功能,除了向命令寄存器中写入“闪烁控制命令”以外,还有什么办法可以完成? 答:向命令寄存器中写入Download指令,其具体值为0110xxxx x10xxxxx. 3. 怎么修改数码管闪烁的快慢和时间? 答:修改闪烁控制寄存器FlashOnOff(地址:0CH)的值,复位值为0111,0111B。高4 位表示闪烁时亮的持续时间,低4位表示闪烁时灭的持续时间 。值为00H时频率最高。 本实验实现了基于ARM的键盘及数码管驱动。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2