精华内容
下载资源
问答
  • LED 灯 简介 1. LED 原理图 (1) LED 底板 原理图 (2) LED 核心板 原理图 开发板 的 LED 灯 作用 : 嵌入式软件的开发初期, 如 开发 BootLoader 代码 或者 Kernel 内核代码 过程中, 有效...

    文章目录





    开发板 的 LED 灯 作用 : 嵌入式软件的开发初期, 如 开发 BootLoader 代码 或者 Kernel 内核代码 过程中, 有效的调试方法有限, 此时通常使用 开发板上的 LED 灯 作为 程序调试的手段 ; 另外除 LED 灯 之外 并不是没有调试手段, JLink 调试器可以进行本阶段的调试 ;

    之后的博客中开始接触 外围 硬件的操作, 外围硬件包括 串口, Flash, SD卡, 网卡 等; LED 是最简单的一种 外围硬件;
    外围硬件驱动程序设计流程 : ① 分析原理图 ② 阅读分析 芯片手册, ③ 驱动设计, ④ 代码编写 ;



    本博客的参考文章及相关资料下载 :


    #一. LED 简介



    ##1. LED 原理图
    ###(1) LED 底板 原理图

    LED 底板原理图分析 :

    • 1.LED 发光原理 : LED 是发光二极管, 二极管两端的电压差到达一个阈值, 就会处于导通状态, 此时就是发光状态;
    • 2.OK6410 LED 底板图分析 : 以 第一个 LED1 为例, 右侧时高电平, 左侧是低电平, 当电压差到达一定程度 LED 就会处于导通状态, 低电平端引脚是 NLED1 ;
      这里写图片描述


    ###(2) LED 核心板 原理图

    LED 核心板原理图 :

    • 1.OK6410 核心板原理图分析 : 下图是 核心板 原理图的部分截图, 可以看到 NLED1 接在 CPU GPIO 的 GPM0 引脚上, 因此可以通过操作 GPIO 的 GPM0 引脚 来进行设置 NLED1 引脚的低电平操作;
      这里写图片描述



    ##2. GPIO

    ###( 1 ) GPIO 简介


    GPIO 简介 : 英文全称 General-Purpose Input / Output Ports, 中文翻译为 : 通用输入输出端口;

    • 1.GPIO 作用 : 很多结构简单的外部设备 或者 电路 只要求两种状态 : 开 或 关, GPIO 端口 只用于传输 开关 信号, CPU 通过 GPIO 端口来操作这些简单的设备;
    • 2.串口 和 USB 作用 : 用于传输复杂数据, 因此简单的 开关 使用 GPIO 比较 合适;
    • 3.LED 灯场景 : 此处通过操作 GPIO 的 GPM0 引脚, 来给 LED 灯一段加低电平, 只需要 加 或者 不加 两种操作;
    • 4.GPIO 使用 : 每个 GPIO 端口都至少需要两个寄存器来使用, ① 控制寄存器 选择端口的 输入/输出 操作, ② 数据寄存器 用于存放数据;

    ###( 2 ) GPIO 文档


    参考手册 : ARM芯片 手册 S3C6410X.pdf ( 基于 6410 开发板 ARM 11 )



    GPIO 文档 :

    • 1.GPIO 引脚说明 : S3C6410 有 187 个输入输出引脚, 分属于 17 个端口; 其中的 LED1 就是属于 GPM0;
    • 2.GPM 控制寄存器 : GPM 控制寄存器分为 4 位, 其中 LED1 连接的引脚为 GPM0, GPM0 引脚 对应的控制寄存器的 [3 : 0] 位, 设置 0b0000 即 设置为输入数据, 设置 0b0001 即设置为输出数据;
      这里写图片描述
    • 3.GPM 数据寄存器 : GPM 数据寄存器 有 6 位 [5 : 0], 设置 第 0 位 数据, 当端口被设置为 输入/输出 功能, 其设置的 0 或 1 数据就是引脚的状态 ;
      这里写图片描述

    ###( 3 ) 点亮 LED 灯



    点亮 LED 灯 :

    • 1.地板原理图分析 : 四个 LED 灯的低电平, 分别由 NLED1, NLED2, NLED3, NLED4 四个引脚控制;
      这里写图片描述

    • 2.核心板原理图 : NLED1, NLED2, NLED3, NLED4 四个引脚分别接在了 GPIO 端口的 GPM0, GPM1, GPM2, GPM3 四个引脚上;
      这里写图片描述

    • 3.设置 GPIO 控制寄存器 : 设置 GPM0, GPM1, GPM2, GPM3 对应的 控制寄存器 ;
      这里写图片描述

    • 4.设置 GPIO 数据寄存器 : 设置 GPM0, GPM1, GPM2, GPM3 对应的 数据寄存器 ; 其中 设置 0 为 低电平, 设置 1 为 高电平, 使 LED 灯亮起来, 该引脚需要设置 低电平 达到 发光二极管的电压差阈值, LED 才能亮起来;
      这里写图片描述




    ##3. 外设基地址初始化

    ###( 1 ) C15 寄存器 简介


    C15 寄存器 : 英文全称 Peripheral Port Memory Remap Register, 外设端口内存映射寄存器 ;

    • 1.外设端口内存映射寄存器 作用 : 为 非共享 的设备 重新进行内存映射, 覆盖页表中的内存映射关系, 可以通过一个地址强制访问外设端口;
    • 2.无使用前提 : 不管 MMU 是否启用, 都不影响 外设端口地址内存 的重新映射;
    • 3.权限说明 : 外设端口内存映射寄存器 拥有最高级别的权限, 高于 Primery 和 Normal 级别的内存映射寄存器;


    ###( 2 )外设端口内存映射寄存器 属性


    外设端口内存映射寄存器 属性 :

    • 1.寄存器编号 : 该寄存器是 CP15 协处理器中的 C15 寄存器;
    • 2.寄存器属性 : 该寄存器是一个 32 位 的可读写寄存器;
    • 3.访问权限 : 只有在特权模式下才可以访问 ;




    #二. LED 控制代码编写



    ##1. 汇编代码编写
    ###(1) 控制 LED 开关

    LED 控制 汇编代码编写 : 基于 OK6410 开发板; 1 ~ 3 步骤为 数据准备, 4 ~ 6 步骤为 设置 GPIO 的 GPM 控制寄存器值, 将引脚设置为输出功能, 7 ~ 9 步骤 为 设置 GPIO 的 GPM 数据寄存器值 ;

    • 1.定义 GPM 控制寄存器地址常量 : GPM 控制寄存器的地址是 0x7F008820, #define GPBCON 0x7F008820, 下图是 S3C6410X.pdf 文档中 10-GPIO Page 338 介绍;
      这里写图片描述
    • 2.定义 GPM 数据寄存器地址常量 : GPM 控制寄存器的地址是 0x7F008824, #define GPBDAT 0x7F008824, 上图是 S3C6410X.pdf 文档中 10-GPIO Page 338 介绍;
    • 3.定义 LED 操作标号 : light_led :, 可以在其它位置通过 跳转到 该标号处执行 LED 灯打开的操作;
    • 4.装载控制寄存器地址 : 首先将 GPM 控制寄存器地址装载到 r0 中, 以方便之后访问这个地址, ldr r0, =GPBCON , 其中 将 0x7F008820 地址装载到了 r0 寄存器中, GPBCON 是之前定义的 GPM 控制器地址 的常量 ;
    • 5.计算 GPM 控制寄存器值 : 下图是 GPM 控制寄存器的值, 4个 LED 灯分别由 GPM0, GPM1, GPM2, GPM3 控制, 因此需要**将 GPM0, GPM1, GPM2, GPM3 对应的控制器设置成输出模式**, 每一位设置占 4 位, 即设置成 0x1 即可, 前 0 ~ 15 位 设置成 0x1111, GPM4 和 GPM5 的内容不需要, 因此设置成0 即可, 最后该寄存器的值设置成 0x1111 即可; 代码为 ldr r1, =0x1111 ;
      这里写图片描述
    • 6.将 值 正式存储到 GPM 控制寄存器中 : 使用 str 指令, 将 r1 中的值 存储到 GPM 控制寄存器中, 代码为 str r1, [r0], 解读 : 将 r1 中的值 存储到 r0 指向的地址的内存中 ;

    此时还未完成, 如果烧写该程序, 会出现无法点亮 LED 灯的情况, OK6410 开发板还需要进行外设基地址初始化步骤;



    ###(2) 外设端口基地址初始化

    参考手册 : ARM核 手册 Arm1176jzfs.pdf ( 基于 OK6410 开发板 ARM 11 )

    • 1.手册对应章节 : ***3 章节 ***;
    • 2.S3C6410X.pdf手册下载地址 :


    外设端口基地址初始化 步骤 :

    • 1.C15 寄存器 ( 外设端口内存映射寄存器 ) 简介 : 控制外设基地址的寄存器的是 C15 寄存器;
      这里写图片描述
    • 2.设置汇编模块标号 : 设置一个标号, 方便汇编语句跳转, 代码 set_serial_port : ;
    • 3.将基地址装载到 r0 寄存器中 : 查找 OK6410 开发板的 外设基地址, 在 S3C6410X.pdf 文档中查询到, 基地址值为 0x70000000 ; 使用 ldr r0, =0x70000000 语句将基地址值 0x70000000 立即数值 装载到 r0 寄存器中;
      • ① 语法解析 : 区分 ldr r0, =0x70000000ldr r0, 0x70000000 语句, 前者是将 立即数 0x7000000 装载到 r0 寄存器中, 后者是将 数字 0x70000000 的地址 装载到 r0 寄存器中;
        这里写图片描述
    • 4.设置外设端口内存映射寄存器 值 : 下图的表就是该寄存器设置位说明, 我们要初始化 256M 内存, [4:0] 位 设置成 0b10011, 即 0x13, 整个寄存器的值应该是 0x70000000 与 0x13 进行与操作, 代码为 orr r0, r0, #0x13;
      这里写图片描述
    • 5.将 r0 寄存器中的值传递给 C15 协处理器 : 根据下图 c15 协处理器 的 CRn Op1 CRm Op2 , 使用 mcr 指令, 将 r0 值 传给 c15 寄存器; 语句为 mcr p15, 0, r0, c15, c2, 4 ;
      • ① 语法说明 : MCR p,o,Rd,CRN,CRM,q 将 rd 寄存器值 传递给 CRN 协处理器,

    这里写图片描述

    • 6.跳转回原来的位置 : mov pc, lr , 该标号处代码执行完毕, 跳转回调用处继续执行下面的内容;
    • 7.整体代码 :
    set_serial_port : 
    	ldr r0, =0x70000000								@ 将基地址装载到 r0 寄存器中, 该基地址 在 arm 核 手册中定义
    	orr r0, r0, #0x13								@ 设置初始化基地址的范围, 将 r0 中的值 与 0x13 立即数 进行或操作, 将结果存放到 r0 中
    	mcr p15, 0, r0, c15, c2, 4						@ 将 r0 中的值设置给 c15 协处理器 
    	mov pc, lr
    


    ###(3) 完整汇编代码

    完整汇编代码 : 详细注释版本 ;

    @****************************  
    @File:start.S  
    @  
    @BootLoader 初始化代码 
    @****************************  
    
    .text                                   @ 宏 指明代码段  
    .global _start                          @ 伪指令声明全局开始符号  
    _start:                                 @ 程序入口标志  
            b   reset                       @ reset 复位异常  
            ldr pc, _undefined_instruction  @ 未定义异常, 将 _undefined_instruction 值装载到 pc 指针中  
            ldr pc, _software_interrupt     @ 软中断异常  
            ldr pc, _prefetch_abort         @ 预取指令异常  
            ldr pc, _data_abort             @ 数据读取异常  
            ldr pc, _not_used               @ 占用 0x00000014 地址                            
            ldr pc, _irq                    @ 普通中断异常  
            ldr pc, _fiq                    @ 软中断异常  
    
    _undefined_instruction: .word undefined_instruction @ _undefined_instruction 标号存放了一个值, 该值是 32 位地址 undefined_instruction, undefined_instruction 是一个地址  
    _software_interrupt:    .word software_interrupt    @ 软中断异常  
    _prefetch_abort:    .word prefetch_abort            @ 预取指令异常 处理  
    _data_abort:        .word data_abort                @ 数据读取异常  
    _not_used:      .word not_used                      @ 空位处理  
    _irq:           .word irq                           @ 普通中断处理  
    _fiq:           .word fiq                           @ 快速中断处理  
    
    undefined_instruction:                              @ undefined_instruction 地址存放要执行的内容  
            nop  
    
    software_interrupt:                                 @ software_interrupt 地址存放要执行的内容  
            nop  
    
    prefetch_abort:                                     @ prefetch_abort 地址存放要执行的内容  
            nop  
    
    data_abort:                                         @ data_abort 地址存放要执行的内容  
            nop  
    
    not_used:                                           @ not_used 地址存放要执行的内容  
            nop  
    
    irq:                                                @ irq 地址存放要执行的内容  
            nop  
    
    fiq:                                                @ fiq 地址存放要执行的内容  
            nop  
    
    reset:                                              @ reset 地址存放要执行的内容  
    		bl set_svc                                  @ 跳转到 set_svc 标号处执行
    		bl set_serial_port							@ 设置外设基地址端口初始化
    		bl disable_watchdog                         @ 跳转到 disable_watchdog 标号执行, 关闭看门狗
    		bl disable_interrupt						@ 跳转到 disable_interrupt 标号执行, 关闭中断
    		bl disable_mmu								@ 跳转到 disable_mmu 标号执行, 关闭 MMU 
    		bl light_led								@ 打开开发板上的 LED 发光二极管
    
    set_svc:
    		mrs r0, cpsr                                @ 将 CPSR 寄存器中的值 导出到 R0 寄存器中
    		bic r0, r0, #0x1f                           @ 将 R0 寄存器中的值 与 #0x1f 立即数 进行与操作, 并将结果保存到 R0 寄存器中, 实际是将寄存器的 0 ~ 4 位 置 0
    		orr r0, r0, #0xd3                           @ 将 R0 寄存器中的值 与 #0xd3 立即数 进行或操作, 并将结果保存到 R0 寄存器中, 实际是设置 0 ~ 4 位 寄存器值 的处理器工作模式代码
    		msr cpsr, r0                                @ 将 R0 寄存器中的值 保存到 CPSR 寄存器中
    		mov pc, lr									@ 返回到 返回点处 继续执行后面的代码
    		
    #define pWTCON 0x7e004000                           @ 定义看门狗控制寄存器 地址 ( 6410开发板 )
    disable_watchdog:                                 
    		ldr r0, =pWTCON                             @ 先将控制寄存器地址保存到通用寄存器中
    		mov r1, #0x0                                @ 准备一个 0 值, 看门狗控制寄存器都设置为0 , 即看门狗也关闭了
    		str r1, [r0]                                @ 将 0 值 设置到 看门狗控制寄存器中 
    		mov pc, lr									@ 返回到 返回点处 继续执行后面的代码
    		
    disable_interrupt:
    	mvn r1,#0x0										@ 将 0x0 按位取反, 获取 全 1 的数据, 设置到 R1 寄存器中
    	ldr r0,=0x71200014								@ 设置第一个中断屏蔽寄存器, 先将 寄存器 地址装载到 通用寄存器 R0 中 
    	str r1,[r0]										@ 再将 全 1 的值设置到 寄存器中, 该寄存器的内存地址已经装载到了 R0 通用寄存器中
    
    	ldr r0,=0x71300014								@ 设置第二个中断屏蔽寄存器, 先将 寄存器 地址装载到 通用寄存器 R0 中 
    	str r1,[r0]										@ 再将 全 1 的值设置到 寄存器中, 该寄存器的内存地址已经装载到了 R0 通用寄存器中
    	mov pc, lr										@ 返回到 返回点处 继续执行后面的代码
    	
    disable_mmu : 
    	mcr p15,0,r0,c7,c7,0							@ 设置 I-Cache 和 D-Cache 失效
    	mrc p15,0,r0,c1,c0,0							@ 将 c1 寄存器中的值 读取到 R0 通用寄存器中
    	bic r0, r0, #0x00000007							@ 使用 bic 位清除指令, 将 R0 寄存器中的 第 0, 1, 2 三位 设置成0, 代表 关闭 MMU 和 D-Cache
    	mcr p15,0,r0,c1,c0,0							@ 将 R0 寄存器中的值写回到 C1 寄存器中
    	mov pc, lr										@ 返回到 返回点处 继续执行后面的代码
    	
    set_serial_port : 
    	ldr r0, =0x70000000								@ 将基地址装载到 r0 寄存器中, 该基地址 在 arm 核 手册中定义
    	orr r0, r0, #0x13								@ 设置初始化基地址的范围, 将 r0 中的值 与 0x13 立即数 进行或操作, 将结果存放到 r0 中
    	mcr p15, 0, r0, c15, c2, 4						@ 将 r0 中的值设置给 c15 协处理器 
    	mov pc, lr
    	
    #define GPBCON 0x7F008820
    #define GPBDAT 0x7F008824
    light_led : 
    	ldr r0, =GPBCON								    @ 将 0x7F008820 GPM 控制寄存器的地址 0x7F008820 装载到 r0 寄存器中
    	ldr r1, =0x1111								 	@ 设置 GPM 控制寄存器的行为 为 Output 输出, 即每个对应引脚的设置为 0b0001 值
    	str r1, [r0]									@ 将 r1 中的值 存储到 r0 指向的 GPBCON 0x7F008820 地址的内存中
    	
    	ldr r0, =GPBDAT									@ 将 GPBDAT 0x7F008824 地址值 装载到 r0 寄存器中
    	ldr r1, =0b110000								@ 计算 GPM 数据寄存器中的值, 设置 0 为 低电平, 设置 1 为高电平, 这里设置 0 ~ 3 位为低电平, 其它为高电平
    	str r1, [r0]									@ 将 r1 中的值 存储到 r0 指向的 GPBDAT 0x7F008824 地址的内存中
    	mov pc, lr
    
    	
    



    ##2. 链接器脚本

    gboot.lds 链接器脚本 代码解析 :

    • 1.指明输出格式 ( 处理器架构 ) : 使用 OUTPUT_ARCH(架构名称) 指明***输出格式, 即处理器的架构***, 这里是 arm 架构的, OUTPUT_ARCH(arm) ;
    • 2.指明输出程序的入口 : 设置编译输出的程序入口位置, 语法为 ENTRY(入口位置), 在上面的 Start.S 中设置的程序入口是 _start, 代码为 ENTRY(_start) ;
    • 3.设置代码段 : 使用 .text : 设置代码段;
    • 4.设置数据段 : 使用 .data : 设置数据段;
    • 5.设置 BSS 段 : 使用 .bss : 设置 BSS 段;
      • ( 1 ) 记录 BSS 段的起始地址 : bss_start = .; ;
      • ( 2 ) 记录 BSS 段的结束地址 : bss_end = .; ;
    • 6.对齐 : 每个段都需要设置内存的对齐格式, 使用 . = ALIGN(4); 设置四字节对齐即可;
    • 7.代码示例 :
    OUTPUT_ARCH(arm)        /*指明处理器结构*/  
    ENTRY(_start)           /*指明程序入口 在 _start 标号处*/  
    SECTIONS {                
        . = 0x50008000;     /*整个程序链接的起始位置, 根据开发板确定, 不同开发板地址不一致*/  
           
        . = ALIGN(4);       /*对齐处理, 每段开始之前进行 4 字节对齐*/  
        .text :             /*代码段*/  
        {  
        start.o (.text)     /*start.S 转化来的代码段*/  
        *(.text)            /*其它代码段*/  
        }  
      
        . = ALIGN(4);       /*对齐处理, 每段开始之前进行 4 字节对齐*/  
        .data :             /*数据段*/  
        {  
        *(.data)  
        }  
          
        . = ALIGN(4);       /*对齐处理, 每段开始之前进行 4 字节对齐*/  
        bss_start = .;      /*记录 bss 段起始位置*/  
        .bss :              /*bss 段*/  
        {  
        *(.bss)   
        }  
        bss_end = .;        /*记录 bss 段结束位置*/  
    } 
    



    ##3. Makefile 编译脚本

    makefile 文件编写 :

    • 1.通用规则 ( 汇编文件编译规则 ) : 汇编文件 编译 成同名的 .o 文件, 文件名称相同, 后缀不同, %.o : %.S, 产生过程是 arm-linux-gcc -g -c $^ , 其中 ^ 标识是所有的依赖文件, 在该规则下 start.S 会被变异成 start.o ;
    • 2.通用规则 ( C 文件编译规则 ) : C 代码编译成同名的 .o 文件, %.o : %.c , 产生过程是 arm-linux-gcc -g -c $^ ;
    • 3.设置最终目标 : 使用 all: 设置最终编译目标;
      • ( 1 ) 依赖文件 : 产生最终目标需要依赖 start.o 文件, 使用 all: start.o 表示最终目标需要依赖该文件;
      • ( 2 ) 链接过程 : arm-linux-ld -Tgboot.lds -o gboot.elf $^, 需要使用链接器脚本进行连接, ①链接工具是 arm-linux-ld 工具, ②使用 -Tgboot.lds 设置链接器脚本 是刚写的 gboot.lds 链接器脚本, ③输出文件是 gboot.elf 这是个中间文件, ④ 依赖文件是 $^ 代表所有的依赖;
      • ( 3 ) 转换成可执行二进制文件 : arm-linux-objcopy -O binary gboot.elf gboot.bin, 使用 -O binary 设置输出二进制文件, 依赖文件是 gboot.elf, 输出的可执行二进制文件 即 结果是 gboot.bin ;
    • 4.makefile 文件内容 :
    all: start.o #依赖于 start.o  
        arm-linux-ld -Tgboot.lds -o gboot.elf $^    #使用链接器脚本, 将 start.o 转为 gboot.elf  
        arm-linux-objcopy -O binary gboot.elf gboot.bin #将 gboot.elf 转化为可以直接在板子上执行的 gboot.bin 文件  
          
    %.o : %.S   #通用规则, 如 start.o 是由 start.S 编译来的, -c 是只编译不链接  
        arm-linux-gcc -g -c $^  
          
    %.o : %.c   #通用规则, 如 start.o 是由 start.c 编译来的, -c 是只编译不链接  
        arm-linux-gcc -g -c $^  
          
    .PHONY: clean     
    clean:              #清除编译信息  
        rm *.o *.elf *.bin  
    



    ##4. 编译输出可执行文件

    编译过程 :

    • 1.文件准备 : 将 汇编代码 ( start.S ) 链接器脚本 ( gboot.lds ) makefile 文件 拷贝到编译目录 ;
    • 2.执行编译命令 : make ;
    • 3.编译结果 : 可以看到 生成了 编译目标文件 start.o, 链接文件 gboot.elf, 可执行的二进制文件 gboot.bin ;
      这里写图片描述



    ##5. 烧写代码到开发板并执行
    ###( 1 ) OK6410 开发板启动切换方式

    OK6410 开发板启动切换方式 : 通过控制 开发板右侧的 8个开关来设置启动来源;

    • 1.sd 卡启动 : (1~8) 位置 : 0, 0, 0, 1, 1, 1, 1, 1;
    • 2.nand flash 启动 : (1~8) 位置 : x, x, x, 1, 1, 0, 0, 1;
    • 3.nor flash 启动 : (1~8) 位置 : x, x, x, 1, 0, 1, 0, x;


    ###( 2 ) 制作 SD 卡启盘 并 准备程序

    制作 SD 卡启动盘 :

    • 1.找到开发板的烧写工具 : OK6410-A 开发板的烧写工具 在开发光盘 A 的 OK6410-A-1G用户光盘(A)-20160812\Linux-3.0.1\Linux烧写工具 目录下, 开发板光盘资料下载地址 ;
      这里写图片描述
    • 2.设置 SD_Writer.exe 属性 ( win10系统需要进行的设置 ) : 右键点击属性, 在兼容性一栏, 设置 以 Windows 7 兼容模式运行, 并设置 以管理员身份运行此程序 ;
      这里写图片描述
    • 3.先格式化 SD 卡 : 注意这里要使用 SD_Writer 中的 format 功能进行格式化 , 按照下面的步骤, 一步一步点击确定执行 ;
      这里写图片描述
      这里写图片描述
      这里写图片描述
    • 4.选择要烧写的文件 : 这里选择 OK6410-A-1G用户光盘(A)-20160812\Linux-3.0.1\Linux烧写工具\mmc_ram256.bin 文件;
    • 5.烧写文件到 SD 卡中 : 直接点击 Program 按钮, 就将启动程序烧写到了 SD 卡中;
      这里写图片描述
    • 6.准备 LED 灯程序 : 将编译出的 gboot.bin 文件名修改成 u-boot.bin, 必须修改成该文件名, 否则无法烧写上去;
    • 7.将程序拷贝到 SD 卡中 : 将程序直接拷贝到 SD 卡中即可;

    参考资料 : OK6410烧写裸板程序方法
    这是之前写过的博客, 仅作为参考;



    ###( 3 ) SecureCRT 连接开发板并烧写程序

    SecureCRT 连接开发板并烧写程序 步骤 :

    • 1.硬件连接操作 : 使用 USB 转 串口工具 将电脑 与 开发板链接, USB 插在电脑端, 串口端插在 开发板上, 插上电源适配器, 但是不要打开电源开关;
    • 2.开发板设置 : 将开发板右侧的开关设置成 SD 卡启动, 即 (1~8) 位置 : 0, 0, 0, 1, 1, 1, 1, 1; 该步骤很重要;
    • 2.查询串口端口号 : 在设备管理器中查看串口端口号, 这里可以看到是 COM9;
      这里写图片描述
    • 3.SecureCRT 连接串口 : 打开 SecureCRT 软件, 点击快速连接, 然后在弹出的对话框中按照下面进行配置, ① 首先要选择 Serial 协议, ② 然后选择端口, 这个端口从设备管理器中查看, ③ 波特率选择 115200, ④ 取消 RTS/CTS 选项;
      这里写图片描述
    • 4.打开开发板 ( 很重要 ) : 选中 SecureCRT 软件, 然后按住空格键不放, 这个操作很重要, 打开开发板开关, ① 先按住空格键, ②再打开开关;
      这里写图片描述
    • 5.首先格式化 Nand Flash : 选择 [1] 选项, 格式化 Nand Flash;
      这里写图片描述
    • 6.选择从 SD 卡中烧写 : 选择 [2] Burn image from SD card 选项, 从 SD 卡中向开发板烧写程序;
      这里写图片描述
    • 7.选择烧写 u-boot : 选择 [2] Flash u-boot, 烧写 u-boot, 会从 SD 卡中查找 u-boot.bin 文件, 然后烧写到 nand flash 中, 如果 SD 卡中 没有 u-boot.bin 会报错;
      这里写图片描述
    • 8.设置从 Nand Flash 启动 : 设置开发板上的启动开关, (1~8) 位置 : x, x, x, 1, 1, 0, 0, 1; 此时 四个 LED 全亮;
    • 9.效果展示 : 设置的 GPBDAT 寄存器值为 0b110000, 四个 LED 灯都亮起来;
      这里写图片描述
    • 10.修改 LED 灯显示参数后显示结果 : 设置 GPBDAT 寄存器中值为 0b110101 是 第一个 和 第三个 LED 亮起来;
      这里写图片描述

    本博客的参考文章及相关资料下载 :

    展开全文
  • 今天我们就来了解一下光敏二极管工作原理,看看它是怎么为人们提供便利的。 光敏二极管简介 相信有很多的读者并不知道光敏二极管是什么物件。通常人们又将光敏二极管叫做光电二极管。它与半导体二极管在结构上是...
  • 发光二极管是一种新型固态冷光源,LED的最显著特点是使用寿命长,光电转换效能高、抗震性能好、使用方便等优点,在照明系统中的应用越来越广泛。在同样照度下,LED灯的电能消耗和寿命比白炽灯和日光灯都有明显的优势...
  • LED = Light Emitting Diode,发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光;LED = Large Electronic Display,大型电子展示;LED = Lupus erythematosus disseminatus,播...
  • 声光报警模块由蜂鸣器、(红,绿)发光二极管和NPN型三极管驱动电路组成,具体电路图如图5所示。 红外二极管发射电路图(二) 如图所示,图是红外线遥控接收装置实例。红外线传感器有多种,这里选用光电二极管...
  • 用半导体材料制作的光发射器件一般分为两类:半导体...有关发光二极管的机构和原理将在第2章中详细描述。一般来说,发光二极管经常被用在光通信中作为光源。由于发光二极管的功耗小,照明用的发光二极管是科学家们目
  • 【STM32】OLED简介

    2020-09-04 15:14:09
    OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可...

    00. 目录

    01. OLED概述

    OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(OrganicElectroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

    LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示,OLED 效果要来得好一些。以目前的技术,OLED 的尺寸还难以大型化,但是分辨率确可以做到很高。

    02. OLED特性参数

    ATK-0.96’ OLED 模块是 ALIENTEK 推出的一款小尺寸(0.96 寸)、高亮、自带升压电路的高性能 OLED 显示模块,分辨率为 128*64,该模块采用原装维信诺高亮 OLED 屏,采用SSD1306 驱动 IC,该芯片内部集成 DCDC 升压,仅需 3.3V 供电,即可正常工作,无需用户再添加升压 DCDC 电路。

    模块支持:8 位 6800 并口、8 位 8080 并口、IIC 以及 4 线 SPI 等 4 种通信接口,通过模块背面的 BS1,BS2 焊盘,可以自行设置模块的接口方式。默认为:8 位 8080 并口。该模块各参数如表 1.1 和表 1.2 所示:
    在这里插入图片描述
    在这里插入图片描述

    ATK0.96’ OLED 模块支持多种通信接口,通过模块背面的 BS1,BS2,可以自行设置模块的通信接口方式,见表 1.3:

    在这里插入图片描述

    03. OLED模块描述

    ATK-0.96’ OLED 模块是 ALIENTEK 推出的一款高性能 OLED 显示模块,尺寸小巧(27mm*26mm),结构紧凑,模块通过 1 个 2*8P 的 2.54mm 间距排针与外部连接,模块外观如图 2.1.1 所示:

    在这里插入图片描述

    该模块具有如下特点:
     双色可选,提供纯蓝色或黄蓝双色两种模块
     高分辨率,分辨率为:128*64
     超小尺寸,OLED 显示屏为 0.96 寸,模块尺寸仅为 27mm*26mm
     多种接口方式,提供 8086 并口、6800 并口、4 线 SPI 和 IIC 等五种接口方式
     集成 DCDC,无需外部高压,仅需提供 3.3V 电源,即可正常工作
    图 2.1.1 中,左侧的图片是模块的背面图,右侧的是正面图。

    04. OLED模块原理图

    在这里插入图片描述

    05. OLED模块引脚说明

    ATK-0.96’ OLED 模块通过 2*8 的 2.54 排针同外部单片机通信,各引脚的详细描述如下表所示
    在这里插入图片描述
    在这里插入图片描述

    温馨提示

    模块在使用 IIC 模式或者 4 线 SPI 模式的时候,是不支持读操作的,所以如果你需要读操作,只能选择 6800 或者 8080 并口模式。模块默认是:8080 并口模式,大家根据自己选择的接口模式,来接线。

    06. OLED模块使用

    ATK-0.96’ OLED 模块的控制器是 SSD1306,支持多种接口方式,我们模块支持 4 种连接方式,这里我们介绍其中 8080 并口模式。

    8080并口模式

    ATK-0.96’ OLED 模块支持 8 位 8080 并口模式,总共需要 13 根信号线通信,这些信号线如下:

    • CS:OLED 片选信号。
    • WR(RW):向 OLED 写入数据。
    • RD:从 OLED 读取数据。
    • D[7:0]:8 位双向数据线。
    • RST(RES):硬复位 OLED。
    • DC:命令/数据标志(0,读写命令;1,读写数据)。

    模块的 8080 并口读/写的过程为:先根据要写入/读取的数据的类型,设置 DC 为高(数据)/低(命令),然后拉低片选,选中 SSD1306,接着我们根据是读数据,还是要写数据置RD/WR 为低,然后:

    在 RD 的上升沿, 使数据锁存到数据线(D[7:0])上;

    在 WR 的上升沿,使数据写入到 SSD1306 里面;

    SSD1306 的 8080 并口写时序如图所示:
    在这里插入图片描述

    SSD1306 的 8080 并口读时序如图 2.3.1.2 所示:
    在这里插入图片描述

    SSD1306 的 8080 接口方式下,控制脚的信号状态所对应的功能如表所示:
    在这里插入图片描述

    注 1:H 代表高电平(VCC),L 代表低电平(GND),↑代表上升沿。

    在 8080 方式下读数据操作的时候,我们有时候(例如读显存的时候)需要一个假读命(Dummy Read),以使得微控制器的操作频率和显存的操作频率相匹配。在读取真正的数据之前,由一个的假读的过程。这里的假读,其实就是第一个读到的字节丢弃不要,从第二个开始,才是我们真正要读的数据。

    一个典型的读显存的时序图,如图所示:

    在这里插入图片描述

    可以看到,在发送了列地址之后,开始读数据,第一个是 Dummy Read,也就是假读,我们从第二个开始,才算是真正有效的数据。

    显存

    SSD1306 的显存总共为 128*64bit 大小,SSD1306 将这些显存分为了 8 页,其对应关系如表所示:
    在这里插入图片描述

    SSD1306 的每页包含了 128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。因为每次写入都是按字节写入的,这就存在一个问

    题,如果我们使用只写方式操作模块,那么,每次要写 8 个点,这样,我们在画点的时候,就必须把要设置的点所在的字节的每个位都搞

    清楚当前的状态(0/1?),否则写入的数据就会覆盖掉之前的状态,结果就是有些不需要显示的点,显示出来了,或者该显示的没有显

    示了。这个问题在能读的模式下,我们可以先读出来要写入的那个字节,得到当前状况,在修改了要改写的位之后再写进 GRAM,这样就

    不会影响到之前的状况了。但是这样需要能读 GRAM,对于 4 线 SPI 模式或者 IIC 模式来说,模块是不支持读的,而且读->改->写的方式

    速度也比较慢。

    我们推荐采用的办法是在单片机的内部建立一个 OLED 的 GRAM(需要 128*8 个字节),在每次修改的时候,只是修改单片机上的 GRAM(实际上就是 SRAM),在修改完了之后,一次性把单片机内部的 GRAM 写入到 OLED 的 GRAM。当然这个方法也有坏处,就是对于那些 SRAM 很小的单片机(比如 51 系列)就比较麻烦了,如果内存不够,那就推荐还是采用并口模式,这样可以节约内存。

    指令

    SSD1306 的指令比较多,这里我们仅介绍几个比较常用的命令
    在这里插入图片描述

    第一个命令为 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。

    第二个命令为 0XAE/0XAF。0XAE 为关闭显示命令;0XAF 为开启显示命令。

    第三个命令为 0X8D,该指令也包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。

    第四个命令为 0XB0~B7,该命令用于设置页地址,其低三位的值对应着 GRAM 的页地址。

    第五个指令为 0X00~0X0F,该指令用于设置显示时的起始列地址低四位。

    第六个指令为 0X10~0X1F,该指令用于设置显示时的起始列地址高四位。

    其他命令,我们就不在这里一一介绍了,大家可以参考 SSD1306 datasheet 的第 28 页。从这页开始,对 SSD1306 的指令有详细的介绍。

    07. 附录

    7.1 【STM32】STM32系列教程汇总

    网址:【STM32】STM32系列教程汇总

    08. 声明

    该教程参考了正点原子的《STM32 F4 开发指南》

    展开全文
  •  图三 光电耦合器之内部结构图 双发光二极管输入 三极管接收型 4脚封装  图四 光电耦合器之内部结构图 可控硅接收型 6脚封装  图五 光电耦合器之内部结构图 双二极管接收型 6脚封装  
  • 数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4...

    数码管简介

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。

    数码管分类

    数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。

    按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

    共阴数码管与共阳数码管工作原理有什么不同

    数码管应用范围

    数码管是显示屏其中一类, 通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数。

    由于它的价格便宜 使用简单 在电器特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。

    数码管的工作原理

    共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

    共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

    共阴数码管与共阳数码管工作原理有什么不同

    什么是共阴/阳数码管

    一只数码管的每一个段划都由一个发光二极管点亮,所以,一位数码管有7个发光二极管构成(如果加上小数点,就有8个)。如果这8个发光二极管的阴极(负极)都连在一起,就叫“共阴数码管”;如果这8个发光二极管的阳极(正极)都连在一起,就叫“共阳数码管”。

    共阴数码管与共阳数码管工作原理有什么不同

    共阴数码管与共阳数码管工作原理不同之处

    1、共阴数码管与共阳数码管工作原理的不同表现在:数码管由七个条状和一个点状发光二极管管芯制成,称为七段数码管。根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。 共阳共阴,是针对数码管的公共脚而说的。典型的一位数码管,一般有10个脚,8个段码(7段加1个小数点),剩下两个脚接在一起。各个段码实际上是一个发光二极管,既然是发光二极管,就有正负极。共阳,也就是说公共脚是正极(阳极),所有的段码实际上是负极,当某一个或某几个段码位接低电平,公共脚接高电平时,对应的段码位就能点亮,进而组合成数字或字母。共阴是公共脚是负极(阴极),段码位是阳极,当公共脚接地,段码位接高电平时,对应段码位点亮。

    2、共阳极数码管是指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制。共阴极数码管是指八段数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制。

    展开全文
  • 个人简介系统

    2014-04-06 23:24:52
    利用微机原理试验箱的8255单元和16X16发光二极管矩阵,动态显示汉字及字符。
  • 亿光发射管简介

    2021-01-20 06:02:17
    亿光发射管的结构、原理与普通发光二极管相近,只是使用的半导体材料不同。亿光红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装  亿光发射管参数介绍  ...
  • 数码管简介数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示...

    数码管简介

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。

    数码管分类

    数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。

    按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

    数码管应用范围

    数码管是显示屏其中一类, 通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数。

    由于它的价格便宜 使用简单 在电器特别是家电领域应用极为广泛,空调、热水器、冰箱等等。绝大多数热水器用的都是数码管,其他家电也用液晶屏与荧光屏。

    数码管的工作原理

    共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

    共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

    什么是共阴/阳数码管

    一只数码管的每一个段划都由一个发光二极管点亮,所以,一位数码管有7个发光二极管构成(如果加上小数点,就有8个)。如果这8个发光二极管的阴极(负极)都连在一起,就叫“共阴数码管”;如果这8个发光二极管的阳极(正极)都连在一起,就叫“共阳数码管”。

    共阴数码管与共阳数码管工作原理不同之处

    1、共阴数码管与共阳数码管工作原理的不同表现在:数码管由七个条状和一个点状发光二极管管芯制成,称为七段数码管。根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。 共阳共阴,是针对数码管的公共脚而说的。典型的一位数码管,一般有10个脚,8个段码(7段加1个小数点),剩下两个脚接在一起。各个段码实际上是一个发光二极管,既然是发光二极管,就有正负极。共阳,也就是说公共脚是正极(阳极),所有的段码实际上是负极,当某一个或某几个段码位接低电平,公共脚接高电平时,对应的段码位就能点亮,进而组合成数字或字母。共阴是公共脚是负极(阴极),段码位是阳极,当公共脚接地,段码位接高电平时,对应段码位点亮。

    2、共阳极数码管是指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制。共阴极数码管是指八段数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制。

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 51摇摇棒的简介与改字详解

    千次阅读 多人点赞 2018-10-16 22:07:36
    51摇摇棒:“摇摇棒”是基于人的视觉暂留原理的,通过分时刷新16个发光二极管来显示输出文字或图案等信息的显示装置。输出信号频率的控制通过单片机来实现,用摇动传感器检测当前摇动状态。当进行摇动时,由于人的...
  • 亿光发射管的结构、原理与普通发光二极管相近,只是使用的半导体材料不同。亿光红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装  亿光发射管参数介绍  ...
  • ROHM四方向传感器RPI-1031简介

    千次阅读 2013-01-10 09:29:39
    1.通过光学原理实现:内部有发光二极管一个,光敏接收三极管两个;另外有一颗圆柱型的遮光物;如图所示: 对应的电路图如下: 2.通过圆柱型遮光物实现遮挡发光二极管和光敏接收管来检测RPI-1031
  • OLED原理,时序和操作

    万次阅读 多人点赞 2016-11-03 16:11:59
    一,OLED简介OLED,即有机发光二极管,采用非常薄的有机材料图层和玻璃基板制成 当有电流通过时,有机材料会发光,OLED屏幕可视角度大,节省电能优点:分辨率高,自发光,不需背光源,对比度高,厚度薄,视角广,反应速度快,温度...
  • 3.2.2 发光二极管的主要特性 80 3.3 半导体激光器的工作原理与结构 83 3.3.1 半导体激光器的工作原理 83 3.3.2 半导体激光器的结构 87 3.4 半导体激光器的工作特性 93 3.4.1 P-1 特性 93 3.4.2 模式特性与线宽 96 ...
  • OLED原理、时序和操作+自己源码程序

    万次阅读 多人点赞 2018-03-11 18:15:27
    转载博客:http://blog.csdn.net/abap_brave/article/details/53022540一,OLED简介OLED,即有机发光二极管,采用非常薄的有机材料图层和玻璃基板制成 当有电流通过时,有机材料会发光,OLED屏幕可视角度大,节省电能优点...
  • 3、首先点亮一个发光二极管,然后让一个二极管亮灭变化。 4、编写函数证明573的工作原理:锁住后不导通就不能再更新数据。 5、编写延时函数,软件仿真查看延时的精确时间 6、子函数的编写(分带形参和不带形参)。 7...
  • 2) 发光二极管闪烁程序..................... 14 3) 源程序................................ 15 (四) 测试.................................... 21 1. 在测试中遇到的问题记录..................... 21 2. ...
  • 在与人们工作生活密切相关的照明光源产业,业界也一直在积极探索研发,技术不断改进革新,特别是近年来出现的高亮发光二极管(LED),由于具有体积小、寿命长、耗电量少、发热量低、无交流闪烁、启动速度快、电磁干扰...
  • 对液晶显示器的介绍,简介,特点,工作原理等。LCD就是常见的液晶显示器。LED是指二极管,特指会发光发光二级管。液晶显示由于液晶本身不会发光,所以必须使用背光源照亮画面。目前使用的最新光源就是LCD光源,...
  • 在与人们工作生活密切相关的照明光源产业,业界也一直在积极探索研发,技术不断改进革新,特别是近年来出现的高亮发光二极管(LED),由于具有体积小、寿命长、耗电量少、发热量低、无交流闪烁、启动速度快、电磁干扰...
  • 反应能力测试器可用来...反应能力测试器原理简介从原理图中可以看出,这个电路利用十进制计数器4017的输出端驱动一组发光二极管,采用时钟脉冲发生器驱动计数器,使它的输出端不断循环地变换输出,发光二极管轮流...
  •  二、原理简介  常用的段式数码管有七段式和八段式,八段比七段多了一个小数点,其他的基本相同。所谓的几段就是指数码管里有相应的几个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形(见图1(a...
  •  二、原理简介  常用的段式数码管有七段式和八段式,八段比七段多了一个小数点,其他的基本相同。所谓的几段就是指数码管里有相应的几个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形(见图1(a...
  • 方向传感器

    千次阅读 2009-12-19 17:27:00
    通过光学原理实现:内部有发光二极管一个,光敏接收三极管两个;另外有一颗圆柱型的遮光物;如图所示:对应的电路图如下:2.通过圆柱型遮光物实现遮挡发光二极管和光敏接收管来检测RPI-1031当前所处的状态;3.当RPI-...
  • lled灯怎么接线

    2021-01-19 19:21:23
     二、LED灯具的特性 LED灯珠是属于发光二极管的一种,能够将电能转化为光能的半导体,它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。LED灯具可采用直流DC220V电压,不需要启辉器和镇流器。...
  • LED(Light Emitting Diode)即为发光二极管的缩写。LED是一种在生活中非常常见的照明发光器件。LED的在我们生活中形态种类非常的多,如下图所示。 尽管LED在我们生活...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

发光二极管原理简介