实验六LED 控制实验
led显示实验报告

led显示实验报告LED显示实验报告引言:LED(Light Emitting Diode)即发光二极管,是一种能够将电能转化为光能的半导体器件。
由于其低功耗、长寿命和高亮度等优点,LED在各个领域得到广泛应用。
本实验旨在探究LED显示的原理和应用,并通过实验验证LED的工作特性。
一、LED的工作原理LED的工作原理基于半导体材料的光电效应。
当电流通过半导体材料时,电子与空穴结合,释放出能量。
这些能量以光的形式辐射出来,形成可见光。
LED 的发光颜色取决于半导体材料的能带结构,不同的材料会发出不同波长的光。
二、LED的结构和组成LED由多个组件构成,包括P型半导体、N型半导体和发光材料。
P型半导体富含正电荷,N型半导体富含负电荷。
当P型和N型半导体通过电极连接时,形成PN结。
发光材料位于PN结的中心位置,当电流通过PN结时,发光材料受到激发,发出光线。
三、LED的实验装置本实验所用的实验装置包括电源、电阻、LED和万用表。
电源提供电流,电阻用于限制电流的大小,万用表用于测量电流和电压。
四、实验步骤1. 将电源的正极与LED的长脚连接,负极与电阻连接,再将电阻的另一端与LED的短脚连接。
2. 打开电源,调节电阻的阻值,观察LED的亮度变化。
3. 使用万用表测量电流和电压的数值,记录下来。
4. 更换LED的颜色,重复步骤2和3。
五、实验结果与分析通过实验,我们观察到LED的亮度随电流的增大而增大,但当电流过大时,LED会烧坏。
这是因为LED的亮度与电流成正比,但LED的工作电流有一个上限。
当电流超过这个上限时,LED无法散热,导致烧毁。
因此,在实际应用中,需要根据LED的参数选择合适的电流值。
此外,我们还发现LED的亮度与电压无直接关系,LED的工作电压是一个固定值。
当电压低于工作电压时,LED无法正常发光;当电压高于工作电压时,电流会剧增,导致LED烧毁。
因此,合理控制电压的大小也是保证LED正常工作的重要因素。
实验六 七段LED数码管显示实验

实验六七段LED数码管显示实验
一、实验目的
学习LED显示器的使用方法。
二、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。
三、实验内容
输出LED的位选码和段选码,在七段LED显示器上循环显示8字。
四、实验原理介绍
显示器的段选码由8255A的PA口提供,显示器的位扫描信号由8255A的PB 口提供给共阴极LED数码管的公共端。
五、实验步骤
1、实验连线
将LED数码管右侧的短路快取下。
8255A的PA0~PA7分别连LED-A~LED-DP,8255A的PB0~PB5分
别连接LED1~LED6,8255CS连CS0。
2、编写调试并运行程序,在LED显示器上显示8字并循环,调
整延时程序,观察运行结果。
六、实验提示
1、各端口地址:
PA口:04A0H
PB口:04A2H
PC口:04A4H
控制口:04A6H
2、LED显示的方法为动态显示。
七、实验报告要求
1、画出程序框图。
2、编写并整理经过运行,证明是正确的源程序,并加以注释。
实验六 综合实验(8253+(8259+LED))

综合实验六:8259中断控制器+LED实验一、实验目的掌握8259中断控制器的接口方法与程序设计。
二、实验内容编制程序,利用8259芯片的IR7作为中断源,产生单一中断,系统显示中断号“7”。
三、程序流程四、实验电路五、编程提示8259中断控制器是专为控制优先级中断设计的芯片。
它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。
因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式和中断请求方式,即中断结构可以由用户编程来设定。
同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。
中断序号0 1 2 3 4 5 6 7变量地址20~23h 24~27h 28~2Bh 2C~2Fh 30~33h 34~37h 38~3Bh 3C~3Fh 本实验中使用7号中断源IR7,中断方式为边沿触发方式,按动开关按钮产生一次中断,编写程序,使系统每次响应外部中断IR7时,显示1个字符“7”,显示满以后清空显示“P.”继续等待中断。
六、实验步骤(1)按实验电路图连接线路:①“SP”插孔和8259 7号中断IR7插孔相连,“SP”端初始为低电平。
②按照实验一中3.3的实验步骤②要求连接138译码电路,8259的CS端连138译码器的Y0孔。
③将8259的单元总线接口D0~D7,用8芯排线或8芯扁平线与数据总线单元D0~D7任一接口相连。
(2)运行实验程序在系统处于命令提示符“P.”状态下(数码显示管显示“P.”),输入3400,按EXEC键显示“P.”。
(3)按动开关按钮,LED数码管从最高位开始依次显示“7”,显示满六位后,最高位显示“P.”继续等待中断。
七、实验程序ZXK EQU 0FFDCHZWK EQU 0FFDDHPort0 EQU 0FFE0HPort1 EQU 0FFE1HCODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HH8: JMP P8259LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3HBUF DB ?,?,?,?,?,?P8259: CLICALL WP ;初始化显示“P.”MOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259mov si,0000hSTICON8: CALL DISJMP CON8;------------------------------------INT8259:cliMOV BX,OFFSET BUFMOV BYTE PTR [BX+SI],07HINC SICMP SI,0007HJZ X59XX59: MOV AL,20HMOV DX,Port0OUT DX,ALmov cx,0050hxxx59: push cxcall dispop cxloop xxx59mov cx,3438hpush cxSTIIRETX59: MOV SI,0000HCALL WPJMP XX59;============================== FOR8259:MOV AL,13HMOV DX,Port0OUT DX,ALMOV AL,08HMOV DX,Port1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;---------------------------WP: MOV BUF,11H ;初始化显示“P.” MOV BUF+1,10HMOV BUF+2,10HMOV BUF+3,10HMOV BUF+4,10HMOV BUF+5,10HRET;-------------------------------- DIS: MOV CL,20HMOV BX,OFFSET BUFDIS1: MOV AL,[BX]PUSH BXMOV BX,OFFSET LEDXLATPOP BXMOV DX,ZXKOUT DX,ALMOV AL,CLMOV DX,ZWKOUT DX,ALPUSH CXMOV CX,0100HDELAY: LOOP $POP CXCMP CL,01HINC BXSHR CL,1JMP DIS1EXIT: MOV AL,00HMOV DX,ZWKOUT DX,ALRET;--------------------------CODE ENDSEND H8八、扩展练习编制程序,利用8259芯片的IR i作为中断源,产生单一中断,系统显示中断号“i”。
led数码管实验报告

led数码管实验报告LED数码管实验报告一、引言在现代科技领域,LED数码管作为一种常见的数字显示器件,被广泛应用于各种电子设备中。
本次实验旨在通过对LED数码管的实际操控,深入了解其工作原理和使用方法。
二、实验目的1. 理解LED数码管的基本结构和工作原理;2. 学会使用Arduino等开发板进行LED数码管的控制;3. 掌握LED数码管的数字显示和动态显示方法。
三、实验器材和方法1. 实验器材:Arduino开发板、LED数码管、杜邦线等;2. 实验方法:通过连接开发板和数码管,编写相应的程序控制数码管的显示。
四、实验步骤1. 连接电路:使用杜邦线将Arduino开发板与LED数码管连接起来,确保连接正确稳定。
2. 编写程序:在Arduino开发环境中编写程序代码,实现对数码管的控制。
可以通过调节电平、脉冲宽度等方式实现不同的显示效果。
3. 上传程序:将编写好的程序上传至Arduino开发板,确保程序正常运行。
4. 观察实验结果:通过观察数码管的显示效果,验证程序的正确性和数码管的正常工作。
五、实验结果与分析经过实验,我们成功实现了对LED数码管的控制。
通过编写程序,我们可以实现不同数字的显示,甚至可以实现动态的数字滚动效果。
LED数码管的工作原理是基于发光二极管的特性,通过控制不同的电平和脉冲宽度,使得不同的LED发光,从而实现数字的显示。
在实验中,我们可以通过控制Arduino开发板的输出口,改变数码管的亮灭状态,从而显示不同的数字。
六、实验心得通过本次实验,我们对LED数码管的工作原理和使用方法有了更深入的了解。
掌握了Arduino开发板的使用技巧,学会了编写简单的程序控制数码管的显示。
LED数码管作为一种常见的数字显示器件,具有体积小、功耗低、寿命长等优点,在各种电子产品中得到广泛应用。
通过实验,我们发现LED数码管不仅可以用于数字的静态显示,还可以通过动态刷新实现数字的滚动、闪烁等效果,具有较高的实用价值。
光控开关_实验报告

一、实验目的1. 了解光控开关的工作原理和基本结构。
2. 掌握光控开关的制作方法及调试技巧。
3. 分析光控开关在实际应用中的优缺点。
二、实验原理光控开关是一种利用光电效应实现自动控制的开关装置。
其基本原理是:当环境光线强度低于设定阈值时,光敏元件(如光敏电阻)的电阻值降低,电路导通,使负载(如灯泡)点亮;当环境光线强度高于设定阈值时,光敏元件的电阻值升高,电路断开,使负载熄灭。
三、实验器材1. 光控开关模块2. LED灯3. 杜邦线4. 面包板5. 电源6. 光源(如手电筒)四、实验步骤1. 将光控开关模块、LED灯、杜邦线和面包板准备好。
2. 将光控开关模块的输出端(一般标记为“OUT”)与LED灯的正极连接。
3. 将LED灯的负极与面包板的地线连接。
4. 将光控开关模块的输入端(一般标记为“A”或“L”)与面包板的地线连接。
5. 将面包板接入电源。
6. 打开电源开关,观察LED灯的亮灭情况。
五、实验现象与分析1. 在光线充足的环境下,LED灯熄灭,说明光控开关处于关闭状态。
2. 在光线较暗的环境下,LED灯点亮,说明光控开关处于开启状态。
实验现象表明,光控开关能够根据环境光线强度自动控制LED灯的亮灭,实现了自动控制的目的。
六、实验结论1. 光控开关是一种利用光电效应实现自动控制的开关装置,具有节能、环保等优点。
2. 光控开关在实际应用中,如路灯、户外照明等,具有良好的效果。
3. 光控开关的灵敏度和阈值可通过调整光敏元件的参数进行调节。
七、实验拓展1. 设计一个光控开关电路,实现对多个LED灯的自动控制。
2. 研究光控开关在不同环境光线下的工作性能,如阴雨天、雾霾天等。
3. 探索光控开关在其他领域的应用,如智能家居、安防系统等。
八、注意事项1. 在实验过程中,注意安全,避免触电事故。
2. 实验器材的连接要牢固,防止接触不良导致电路故障。
3. 调整光敏元件的参数时,要细心操作,避免损坏元件。
通过本次实验,我们对光控开关的工作原理和基本结构有了深入了解,掌握了光控开关的制作方法及调试技巧。
实验六_小灯控制实验_2010303321_冯田田

数字电子技术实验实验报告实验六小灯控制实验一、实验目的1、了解74LS161、74LS138、74LS00、74LS86芯片的构造及其作用。
2、使用以上芯片设计一个逻辑电路,使四个小灯的亮灭有特定效果。
二、实验设备Multisim 软件。
三、实验内容使用74LS00 74LS86 74LS138 74LS161 芯片设计一个电路,是该电路实现以下功能:1.该电路有两个输入端S1S0,四个输出端,输出端分别接四个小灯;2.当S1S0输入不同组合时,小灯的亮灭有不同效果:状态1:S1S0=00 全灭状态2:S1S0=01 每次只亮一个,且右移状态3:S1S0=10 每次只亮一个,且左移状态4:S1S0=11 全亮四、实验原理1.S1S0=01及S1S0=10的过程中,每次只亮一个灯,参考74LS138的真值表,应选取138芯片连与非门作为最终输出级;2.小灯的状态会变化,故考虑使用161芯片产生相应的脉冲信号,做一定的变化,输入138作为138芯片的驱动; 1. 设计输出级:上表是138的部分真值表,若截取A 2=1时高四位重新排序,然后接与非门作为输出,则能实现状态2和状态3的效果。
那么需令它在状态2跟状态3是AST 端为1,那么可以用BA ⊕作为它的控制信号。
但是状态1跟状态4是分别要使等全灭和全亮,则输出级的与非门需要一个1110序列作为控制,这个序列正好是AB 的输出。
2. 设计138芯片的驱动电路:161芯片为计数状态时,它的的输出级低二位是一个序列:00 01 10 11,我们将这两个输出端分别与S 0求异或,得到的序列输入138译码器的低两位输入端,高输入端接高电平,那么138的输出重新排序为:STCB ST T S +2A 1AA4Y5Y6Y7Y0 × 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 11 0 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1 1 0 1 11 1 1 1 1 1 0综上所述,实现设计要求的逻辑电路如下图所示:A B Q 1 Q 2 7Y6Y5Y4Y0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 11 1 1 1 1 0 1 0 0 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 11 0 1 1 1 1 0 0 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 11 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 111111五、实验结果接好电路后结果与实验要求相同。
发光模拟电路实验报告
一、实验目的1. 了解发光二极管(LED)的工作原理及其在电路中的应用。
2. 掌握基本的电路连接方法,学会使用万用表测量电路中的电压和电流。
3. 通过实验验证电路理论,提高动手能力和分析问题的能力。
二、实验原理发光二极管(LED)是一种半导体发光器件,具有单向导电性。
当电流从正极流向负极时,LED会发光。
本实验中,我们将通过搭建简单的电路,使LED发光,并测量电路中的电压和电流。
三、实验器材1. 发光二极管(LED)1个2. 电阻(1kΩ)1个3. 电源(3V)1个4. 万用表1个5. 连接线若干6. 开关1个四、实验步骤1. 电路搭建:- 将电阻与LED的正极相连,LED的负极与电源负极相连。
- 在电路中串联一个开关,用于控制电路的通断。
2. 电路测试:- 闭合开关,使用万用表测量LED两端的电压和电路中的电流。
- 记录测量数据。
3. 数据分析:- 根据测量数据,分析电路中LED的发光情况,验证电路理论。
五、实验结果与分析1. 实验数据:| 测量项目 | 测量值 || :-------: | :----: || 电压(V) | 2.8 || 电流(mA)| 2.8 |2. 数据分析:- 根据实验数据,LED两端的电压为2.8V,电流为2.8mA。
- 由于LED的正向电压一般为2V左右,因此本实验中LED正常发光。
- 电阻的作用是限制电流,防止LED因电流过大而损坏。
六、实验总结1. 本实验成功实现了LED的发光,验证了电路理论。
2. 通过实验,掌握了基本的电路连接方法和万用表的使用方法。
3. 提高了动手能力和分析问题的能力。
七、实验注意事项1. 在搭建电路时,注意电路连接的正确性,避免短路或断路。
2. 测量电压和电流时,确保万用表的选择正确,避免损坏仪器。
3. 在实验过程中,注意安全,避免触电或受伤。
八、实验拓展1. 尝试改变电路中的电阻值,观察LED的发光情况。
2. 探究不同颜色LED的发光特性。
流水灯控制的实验报告
一、实验目的1. 熟悉流水灯控制电路的原理和设计方法;2. 掌握使用单片机控制LED灯流水灯的方法;3. 培养动手实践能力和创新意识。
二、实验原理流水灯是一种常见的LED灯控制方式,通过单片机对LED灯进行控制,使LED灯按照一定的规律依次点亮和熄灭,形成动态的流水效果。
本实验采用51单片机作为控制器,通过编程实现对LED灯流水灯的控制。
流水灯的控制原理如下:1. 将LED灯连接到单片机的P0口,每个LED灯对应一个P0口的引脚;2. 编写程序,使单片机依次对P0口的引脚进行赋值,从而控制LED灯的亮灭;3. 通过延时函数实现LED灯的流水效果。
三、实验器材1. 51单片机实验板;2. 8个LED灯;3. 电阻(阻值约为220Ω);4. 连接线;5. 编程器;6. 示波器(可选)。
四、实验步骤1. 将LED灯按照电路图连接到实验板上,确保每个LED灯的正极连接到单片机的P0口对应引脚,负极连接到GND;2. 编写程序,实现LED灯流水灯的控制。
程序如下:```c#include <reg51.h>void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++); }void main() {while (1) {P0 = 0x01; // 第一个LED灯亮 delay(500);P0 = 0x02; // 第二个LED灯亮 delay(500);P0 = 0x04; // 第三个LED灯亮 delay(500);P0 = 0x08; // 第四个LED灯亮 delay(500);P0 = 0x10; // 第五个LED灯亮 delay(500);P0 = 0x20; // 第六个LED灯亮 delay(500);P0 = 0x40; // 第七个LED灯亮 delay(500);P0 = 0x80; // 第八个LED灯亮delay(500);P0 = 0xFF; // 所有LED灯亮delay(500);P0 = 0x00; // 所有LED灯灭delay(500);}}```3. 将编写好的程序烧录到单片机中,并上电运行;4. 观察LED灯流水灯的效果,分析程序运行过程。
灯光控制实验报告模板
灯光控制实验报告模板实验名称:灯光控制实验报告引言:灯光控制是现代电气工程中一项重要的技术,它在日常生活中起到重要作用。
本实验旨在研究灯光控制的基本原理和方法,探索不同控制方式对灯光亮度和颜色的影响。
通过实验观察、测量和分析,我们将了解到灯光控制的工作原理和应用。
实验目的:1. 了解灯光控制的基本原理和方法;2. 探究不同控制方式对灯光亮度和颜色的影响;3. 学会使用光度计和色度计测量灯光亮度和颜色。
实验设备:1. LED灯光源;2. 调光开关;3. 光度计和色度计;4. 电源;5. 连接线。
实验步骤:1. 将LED灯光源连接到电源,打开电源开关。
2. 使用调光开关调节灯光亮度,观察灯光的变化。
分别记录亮度和调光开关旋钮位置之间的关系。
3. 使用光度计测量不同亮度下的光照强度,并记录测量值。
4. 切换不同颜色的LED灯光源,重复步骤2-3,记录不同颜色灯光的亮度和光照强度数据。
5. 使用色度计测量不同颜色灯光的色温和色差,并记录测量值。
实验数据分析:1. 根据实验数据,绘制亮度与调光开关旋钮位置的关系曲线。
分析曲线特点和趋势。
2. 比较不同颜色灯光的亮度和光照强度数据,分析其差异和规律。
3. 根据色度计测量值,计算不同颜色灯光的色温和色差,并进行对比分析。
讨论与结论:1. 实验结果表明,通过调光开关可以有效控制灯光亮度。
调光开关旋钮位置与亮度存在一定的线性关系。
2. 不同颜色的LED灯光源在同一亮度下光照强度存在差异,其中某些颜色灯光的光照强度较高。
3. 使用色度计测量发现,不同颜色的LED灯光源具有不同的色温和色差。
其中某些颜色灯光的色温和色差较理想。
4. 根据实验分析,我们可以根据需要选择合适的灯光控制方式和灯光颜色,以满足特定场景的要求。
实验总结:通过本次灯光控制实验,我们了解到了灯光控制的基本原理和方法,明确了不同控制方式对灯光亮度和颜色的影响。
实验中所使用的仪器设备和测量方法对于探究灯光控制具有重要意义。
流水灯控制实验报告
流水灯控制实验报告一、引言流水灯是一种常见的电子实验和电路设计项目,它通过控制一组LED灯的亮灭顺序和时间间隔来呈现出一种流动的效果。
本实验旨在通过搭建一个流水灯电路,学习并掌握流水灯的原理和控制方法。
二、实验原理1.流水灯电路的组成本实验采用的流水灯电路是由多个LED灯组成的,LED灯的正极与电源相连,负极通过电阻连接到单片机的输出端口。
通过控制单片机输出高低电平来控制LED灯的亮灭。
2.流水灯的工作原理流水灯电路通过单片机的输出端口控制LED灯的亮灭顺序和时间间隔,实现流动的效果。
在一个循环中,每个LED灯按顺序依次亮起,然后熄灭,接着下一个LED灯亮起,如此循环往复,形成了流水灯的效果。
三、实验器材和元件1.单片机:选用STC89C52RC型单片机;2. LED灯:选用红色5mm直径的共阳极LED灯4个;3.电阻:选用220Ω的电阻4个;4.面包板、导线等。
四、实验步骤1.连接电路将单片机、LED灯和电阻等元件按照电路图,通过面包板和导线连接起来。
2.编写程序使用C语言编写程序,在单片机上控制LED灯的亮灭顺序和时间间隔。
通过设置单片机输出端口的高低电平,控制LED灯的亮灭。
3.烧写程序将编好的程序通过编程器烧写到单片机中,使其能够执行程序。
4.测试实验将电路连接到电源,并接通电源。
观察LED灯的亮灭情况,检查流水灯效果是否符合预期。
五、实验结果分析经过反复测试,流水灯电路能够正常工作,LED灯按照预设的顺序亮灭,形成了流动的效果。
六、实验总结通过本次实验,我学习了流水灯电路的原理和控制方法,并成功搭建了一个流水灯电路。
通过编写程序,我掌握了如何通过单片机控制LED灯的亮灭。
在实验过程中,我深刻理解了流水灯电路的工作原理,培养了动手实践和问题解决的能力。
七、实验改进措施1.可以通过调整LED灯的亮灭顺序和时间间隔,改变流水灯的效果和速度;2.可以使用其他颜色的LED灯,增加流水灯的变化效果;3.可以将流水灯电路与其他电子元件结合,设计更复杂的电路和效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六LED 控制实验一、实验目的通过实验学习如何将一个驱动添加到Kconfig,编译到内核;通过实验掌握在Linux 下驱动程序的编写方法。
二、实验设备硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。
三、实验内容编写EduKit-IV 实验箱Linux 操作系统下LED 灯的应用程序。
编写 EduKit-IV 实验箱Linux 操作系统下LED 灯的驱动;实验步骤:下面介绍如何将一个驱动添加到内核中,并且在配置选项中能够通过menuconfig 配置内核时选择该驱动:1)单击菜单应用程序->附件->终端打开终端,在终端中输入以下命令设置开发所需的环境变量。
$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh2)将实验目录$SIMPLEDIR/8.1-led_test/driver 下的eduk4-led.c 复制到目录内核目录$KERNELDIR/drivers/char 下。
3)修改$KERNELDIR/drivers/char 目录下的Kconfig 文件,在文件的末尾按照如下内容修改并保存:….config MMTIMERtristate "MMTIMER Memory mapped RTC for SGI Altix"depends on IA64_GENERIC || IA64_SGI_SN2default yhelpThe mmtimer device allows direct userspace access to theAltix system timer.config EDUKIT4_LEDtristate "Edukit4 Led"source "drivers/char/tpm/Kconfig"endmenu这样当make menuconfig 时,将会出现Edukit4 Led 选项。
4)修改$KERNELDIR/drivers/char 目录下的Makefile 文档,在文件的适当位置按照如下内容修改并保存:….obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.oobj-$(CONFIG_TCG_TPM) += tpm/obj-$(CONFIG_EDUKIT4_LED) += eduk4-led.o11# Files generated that shall be removed upon make clean….5)单击菜单应用程序->附件->终端打开终端,在终端命令行输入以下命令配置裁剪内核。
$ cd $KERNELDIR$ make menuconfig稍后将弹出以下菜单:图8-1-6 make menuconfig 后弹出的菜单我们选择出厂提供的配置文件,选择Load an Alternate Configuration File,将弹出配置文件选择对话框,在文本框中输入配置文件config-eduk4,如下图,选择“OK”按回车键完成配置文件的选择:图8-1-7 出厂默认配置文件6)完成配置文件的选择后,菜单将进入到初始界面,接下来将根据下面的步骤来完成对LED 驱动的支持,通过计算机键盘上下键选择Device Drivers 并按回车,将出现以下菜单:图8-1-8 选择Device Drivers 后的菜单按上下键选择Character devices 并按回车,将出现以下菜单:图8-1-9 选择Character devices 后菜单按上下键选择Edukit4 Led 并按y 键,前面的<>内将有*号,表明选中Led 驱动,如下图:图8-1-10 选择Led 驱动按左右键选择Exit 回到上一级菜单,依次,当最后一次选择Exit 时,会弹出以下对话框提示是否保存配置:图8-1-11 保存配置直接选择“Yes”回车,配置完成。
7)执行以下命令编译内核:$ make编译完成之后将在路径$KERNELDIR/arch/arm/boot 下生成zImage 镜象,同时也会自动拷贝到$EXPDIR 目录下。
按照前面章节的介绍将该镜象下载到flash 中。
8)将路径切换到$SIMPLEDIR/8.1-led_test/app 下,执行以下命令编译应用程序:$ cd $SIMPLEDIR/8.1-led_test/app$ make$ make install$ make clean在该目录下将生成可执行文件led_test,并自动将该文件拷贝到/home/example/tftp/目录下。
9)准备好EduKit-IV + Mini2410-IV 平台,注意Mini2410-IV 板上的跳线为闭合状态,且确保Mini2410-IV 板载Linux 映像为实验映像(请参照下册开篇:实验环境构建),连接好交叉串口线于板载COM2 和PC 端串口,连接好交叉网线与板载主板网卡接口和PC 端网口。
10)在终端执行以下命令打开minicom 串口终端:$ sudo minicom11)给实验平台加电,进入Linux 系统,可以看到minicom 终端的启动打印信息。
12)启动完成后,在minicom 下执行以下命令将led_test 下载到tmp 目录下:# cd /tmp# tftp -g 192.192.192.190 -r./led_test -l./led_test附:请用交叉网线连接主机和实验平台,注意实验平台上的网卡是打开的,并核对主机网卡的ip 地址是否为192.192.192.190,设置方法可参照上册第六章节6.5。
13)给led_test 添加可执行权限。
# chmod 777 led_test14)运行led_test。
# ./led_testPlease look at the leds这时观看主板上的四个LED 灯在循环闪.,表明应用程序运行成功,进一步表明驱动添加成功!参考程序:1.驱动程序#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/devfs_fs_kernel.h>#include <linux/miscdevice.h>#include <linux/delay.h>#include <asm/irq.h>#include <asm/io.h>#include <asm/arch/regs-gpio.h>#include <asm/hardware.h>#define DEVICE_NAME "led"#define LED_MAJOR 231#define LED_BASE (0xE1180000)static int eduk4_led_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) {unsigned char status;switch(cmd) {case 0:case 1:if (arg > 4) {return -EINVAL;}status = inb(LED_BASE);if(0 == cmd){status &= ~(0x1 << arg);}else if(1 == cmd){status |= (0x1 << arg);}outb(status, LED_BASE);return 0;default:return -EINVAL;}}static struct file_operations eduk4_led_fops = {.owner.ioctl};==THIS_MODULE,eduk4_led_ioctl,static int __init eduk4_led_init(void){int ret;unsigned char status;ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &eduk4_led_fops);if (ret < 0) {printk(DEVICE_NAME " can't register major number\n");return ret;}devfs_mk_cdev(MKDEV(LED_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);status = inb(LED_BASE);outb(status & 0xf0,LED_BASE);printk(DEVICE_NAME " initialized\n");return 0;}static void __exit eduk4_led_exit(void){unsigned char status;status = inb(LED_BASE);outb(status | 0x0f,LED_BASE);printk(DEVICE_NAME " remove\n");devfs_remove(DEVICE_NAME);unregister_chrdev(LED_MAJOR, DEVICE_NAME);}module_init(eduk4_led_init);module_exit(eduk4_led_exit);MODULE_LICENSE("BSD/GPL");2.应用程序#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/select.h>#include <sys/time.h>static int led_fd;int main(void){// open deviceled_fd = open("/dev/led", 0);if (led_fd < 0) {perror("open device led");exit(1);}printf("Please look at the leds\n"); // led all offioctl(led_fd, 1, 0);ioctl(led_fd, 1, 1);ioctl(led_fd, 1, 2);ioctl(led_fd, 1, 3);for(;;){// led on one by oneioctl(led_fd, 0, 0);usleep(500000);ioctl(led_fd, 0, 1);usleep(500000);ioctl(led_fd, 0, 2);usleep(500000);ioctl(led_fd, 0, 3);usleep(500000);// led off one by oneioctl(led_fd, 1, 0);usleep(500000);ioctl(led_fd, 1, 1);usleep(500000);ioctl(led_fd, 1, 2);usleep(500000);ioctl(led_fd, 1, 3);usleep(500000);// all led onioctl(led_fd, 0, 0);ioctl(led_fd, 0, 1);ioctl(led_fd, 0, 2);ioctl(led_fd, 0, 3);usleep(500000);// all led offioctl(led_fd, 1, 0);ioctl(led_fd, 1, 1);ioctl(led_fd, 1, 2);ioctl(led_fd, 1, 3);usleep(500000);}close(led_fd);return 0;}练习题:更改驱动程序,将控制由ioctl 形式改为write 形式,并添加read 接口,通过read 可获取LED状态。