tag 标签: 数码管

相关帖子
相关博文
  • 热度 4
    2023-4-22 07:34
    1543 次阅读|
    0 个评论
    近期搞了个单板,客户定制的,核心 ST 的 MCU 。熟悉又陌生的东西啊,依稀记得那时候自己还是个年轻小伙。功能简单,花了一天的时间把原理图和 PCB 搞完就投产了。等待几天 PCB 回来了,在等待几天 PCBA 也回来了。准备调试。。。。。。。。。 嗯。。。。。。。。。。调那个呢?功能要求有数码管,要不先搞点东西显示下。。。。。。 找到以前的 DEMO ,改改引脚,应该很快。这样想着。结果上天不做美啊。 DEMO 上数码管段选脚是放在同一 GPIO 的,而我的,七零八落的,哎。。。。。。。。。。。。。。。。这可咋办? 思索良久之后,是不是可以通过将段码值通过移位赋值的方式直接将相应值直接给 GPIO 呢 共阳极段码表是这个 unsigned char LEDSEG 如果可以像这样给段码赋值就好了 0)&0x01); 1)&0x01); 2)&0x01); 3)&0x01); 4)&0x01); 5)&0x01); 6)&0x01); 思路有了,接下来就是看看 ST 库里面有木有像 51 单片机那样可以直接给个引脚赋值就能控制高低电平的源码了,搜索良久,发现并没有,要不只能通过 GPIO_SetBits 或者 GPIO_ResetBits 控制单个 GPIO ,要不 WRITE_DATA 控制一组引脚。 哎,我又沉思了,后来网上找一遍,结果还真找到了 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR( BITBAND(addr, bitnum) ) #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 //----------------------------------------------------- #define PA0 BIT_ADDR(GPIOA_ODR_Addr, 0) //输出 #define PA1 BIT_ADDR(GPIOA_ODR_Addr, 1) //输出 #define PA2 BIT_ADDR(GPIOA_ODR_Addr, 2) //输出 #define PA3 BIT_ADDR(GPIOA_ODR_Addr, 3) //输出 #define PA4 BIT_ADDR(GPIOA_ODR_Addr, 4) //输出 #define PA5 BIT_ADDR(GPIOA_ODR_Addr, 5) //输出 #define PA6 BIT_ADDR(GPIOA_ODR_Addr, 6) //输出 #define PA7 BIT_ADDR(GPIOA_ODR_Addr, 7) //输出 #define PA8 BIT_ADDR(GPIOA_ODR_Addr, 8) //输出 #define PA9 BIT_ADDR(GPIOA_ODR_Addr, 9) //输出 #define PA10 BIT_ADDR(GPIOA_ODR_Addr, 10) //输出 #define PA11 BIT_ADDR(GPIOA_ODR_Addr, 11) //输出 #define PA12 BIT_ADDR(GPIOA_ODR_Addr, 12) //输出 #define PA13 BIT_ADDR(GPIOA_ODR_Addr, 13) //输出 #define PA14 BIT_ADDR(GPIOA_ODR_Addr, 14) //输出 #define PA15 BIT_ADDR(GPIOA_ODR_Addr, 15) //输出 #define PA0in BIT_ADDR(GPIOA_IDR_Addr, 0) //?? #define PA1in BIT_ADDR(GPIOA_IDR_Addr, 1) //?? #define PA2in BIT_ADDR(GPIOA_IDR_Addr, 2) //?? #define PA3in BIT_ADDR(GPIOA_IDR_Addr, 3) //?? #define PA4in BIT_ADDR(GPIOA_IDR_Addr, 4) //?? #define PA5in BIT_ADDR(GPIOA_IDR_Addr, 5) //?? #define PA6in BIT_ADDR(GPIOA_IDR_Addr, 6) //?? #define PA7in BIT_ADDR(GPIOA_IDR_Addr, 7) //?? #define PA8in BIT_ADDR(GPIOA_IDR_Addr, 8) //?? #define PA9in BIT_ADDR(GPIOA_IDR_Addr, 9) //?? #define PA10in BIT_ADDR(GPIOA_IDR_Addr, 10) //?? #define PA11in BIT_ADDR(GPIOA_IDR_Addr, 11) //?? #define PA12in BIT_ADDR(GPIOA_IDR_Addr, 12) //?? #define PA13in BIT_ADDR(GPIOA_IDR_Addr, 13) //?? #define PA14in BIT_ADDR(GPIOA_IDR_Addr, 14) //?? #define PA15in BIT_ADDR(GPIOA_IDR_Addr, 15) //?? //----------------------------------------------------- #define PB0 BIT_ADDR(GPIOB_ODR_Addr, 0) //输出 #define PB1 BIT_ADDR(GPIOB_ODR_Addr, 1) //输出 #define PB2 BIT_ADDR(GPIOB_ODR_Addr, 2) //输出 #define PB3 BIT_ADDR(GPIOB_ODR_Addr, 3) //输出 #define PB4 BIT_ADDR(GPIOB_ODR_Addr, 4) //输出 #define PB5 BIT_ADDR(GPIOB_ODR_Addr, 5) //输出 #define PB6 BIT_ADDR(GPIOB_ODR_Addr, 6) //输出 #define PB7 BIT_ADDR(GPIOB_ODR_Addr, 7) //输出 #define PB8 BIT_ADDR(GPIOB_ODR_Addr, 8) //输出 #define PB9 BIT_ADDR(GPIOB_ODR_Addr, 9) //输出 #define PB10 BIT_ADDR(GPIOB_ODR_Addr, 10) //输出 #define PB11 BIT_ADDR(GPIOB_ODR_Addr, 11) //输出 #define PB12 BIT_ADDR(GPIOB_ODR_Addr, 12) //输出 #define PB13 BIT_ADDR(GPIOB_ODR_Addr, 13) //输出 #define PB14 BIT_ADDR(GPIOB_ODR_Addr, 14) //输出 #define PB15 BIT_ADDR(GPIOB_ODR_Addr, 15) //输出 #define PB0in BIT_ADDR(GPIOB_IDR_Addr, 0) //?? #define PB1in BIT_ADDR(GPIOB_IDR_Addr, 1) //?? #define PB2in BIT_ADDR(GPIOB_IDR_Addr, 2) //?? #define PB3in BIT_ADDR(GPIOB_IDR_Addr, 3) //?? #define PB4in BIT_ADDR(GPIOB_IDR_Addr, 4) //?? #define PB5in BIT_ADDR(GPIOB_IDR_Addr, 5) //?? #define PB6in BIT_ADDR(GPIOB_IDR_Addr, 6) //?? #define PB7in BIT_ADDR(GPIOB_IDR_Addr, 7) //?? #define PB8in BIT_ADDR(GPIOB_IDR_Addr, 8) //?? #define PB9in BIT_ADDR(GPIOB_IDR_Addr, 9) //?? #define PB10in BIT_ADDR(GPIOB_IDR_Addr, 10) //?? #define PB11in BIT_ADDR(GPIOB_IDR_Addr, 11) //?? #define PB12in BIT_ADDR(GPIOB_IDR_Addr, 12) //?? #define PB13in BIT_ADDR(GPIOB_IDR_Addr, 13) //?? #define PB14in BIT_ADDR(GPIOB_IDR_Addr, 14) //?? #define PB15in BIT_ADDR(GPIOB_IDR_Addr, 15) //?? //---------------------------------------------------- #define PC0 BIT_ADDR(GPIOC_ODR_Addr, 0) //输出 #define PC1 BIT_ADDR(GPIOC_ODR_Addr, 1) //输出 #define PC2 BIT_ADDR(GPIOC_ODR_Addr, 2) //输出 #define PC3 BIT_ADDR(GPIOC_ODR_Addr, 3) //输出 #define PC4 BIT_ADDR(GPIOC_ODR_Addr, 4) //输出 #define PC5 BIT_ADDR(GPIOC_ODR_Addr, 5) //输出 #define PC6 BIT_ADDR(GPIOC_ODR_Addr, 6) //输出 #define PC7 BIT_ADDR(GPIOC_ODR_Addr, 7) //输出 #define PC8 BIT_ADDR(GPIOC_ODR_Addr, 8) //输出 #define PC9 BIT_ADDR(GPIOC_ODR_Addr, 9) //输出 #define PC10 BIT_ADDR(GPIOC_ODR_Addr, 10) //输出 #define PC11 BIT_ADDR(GPIOC_ODR_Addr, 11) //输出 #define PC12 BIT_ADDR(GPIOC_ODR_Addr, 12) //输出 #define PC13 BIT_ADDR(GPIOC_ODR_Addr, 13) //输出 #define PC14 BIT_ADDR(GPIOC_ODR_Addr, 14) //输出 #define PC15 BIT_ADDR(GPIOC_ODR_Addr, 15) //输出 #define PC0in BIT_ADDR(GPIOC_IDR_Addr, 0) //?? #define PC1in BIT_ADDR(GPIOC_IDR_Addr, 1) //?? #define PC2in BIT_ADDR(GPIOC_IDR_Addr, 2) //?? #define PC3in BIT_ADDR(GPIOC_IDR_Addr, 3) //?? #define PC4in BIT_ADDR(GPIOC_IDR_Addr, 4) //?? #define PC5in BIT_ADDR(GPIOC_IDR_Addr, 5) //?? #define PC6in BIT_ADDR(GPIOC_IDR_Addr, 6) //?? #define PC7in BIT_ADDR(GPIOC_IDR_Addr, 7) //?? #define PC8in BIT_ADDR(GPIOC_IDR_Addr, 8) //?? #define PC9in BIT_ADDR(GPIOC_IDR_Addr, 9) //?? #define PC10in BIT_ADDR(GPIOC_IDR_Addr, 10) //?? #define PC11in BIT_ADDR(GPIOC_IDR_Addr, 11) //?? #define PC12in BIT_ADDR(GPIOC_IDR_Addr, 12) //?? #define PC13in BIT_ADDR(GPIOC_IDR_Addr, 13) //?? #define PC14in BIT_ADDR(GPIOC_IDR_Addr, 14) //?? #define PC15in BIT_ADDR(GPIOC_IDR_Addr, 15) //?? //---------------------------------------------------- #define PD0 BIT_ADDR(GPIOD_ODR_Addr, 0) //输出 #define PD1 BIT_ADDR(GPIOD_ODR_Addr, 1) //输出 #define PD2 BIT_ADDR(GPIOD_ODR_Addr, 2) //输出 #define PD3 BIT_ADDR(GPIOD_ODR_Addr, 3) //输出 #define PD4 BIT_ADDR(GPIOD_ODR_Addr, 4) //输出 #define PD5 BIT_ADDR(GPIOD_ODR_Addr, 5) //输出 #define PD6 BIT_ADDR(GPIOD_ODR_Addr, 6) //输出 #define PD7 BIT_ADDR(GPIOD_ODR_Addr, 7) //输出 #define PD8 BIT_ADDR(GPIOD_ODR_Addr, 8) //输出 #define PD9 BIT_ADDR(GPIOD_ODR_Addr, 9) //输出 #define PD10 BIT_ADDR(GPIOD_ODR_Addr, 10) //输出 #define PD11 BIT_ADDR(GPIOD_ODR_Addr, 11) //输出 #define PD12 BIT_ADDR(GPIOD_ODR_Addr, 12) //输出 #define PD13 BIT_ADDR(GPIOD_ODR_Addr, 13) //输出 #define PD14 BIT_ADDR(GPIOD_ODR_Addr, 14) //输出 #define PD15 BIT_ADDR(GPIOD_ODR_Addr, 15) //输出 #define PD0in BIT_ADDR(GPIOD_IDR_Addr, 0) //?? #define PD1in BIT_ADDR(GPIOD_IDR_Addr, 1) //?? #define PD2in BIT_ADDR(GPIOD_IDR_Addr, 2) //?? #define PD3in BIT_ADDR(GPIOD_IDR_Addr, 3) //?? #define PD4in BIT_ADDR(GPIOD_IDR_Addr, 4) //?? #define PD5in BIT_ADDR(GPIOD_IDR_Addr, 5) //?? #define PD6in BIT_ADDR(GPIOD_IDR_Addr, 6) //?? #define PD7in BIT_ADDR(GPIOD_IDR_Addr, 7) //?? #define PD8in BIT_ADDR(GPIOD_IDR_Addr, 8) //?? #define PD9in BIT_ADDR(GPIOD_IDR_Addr, 9) //?? #define PD10in BIT_ADDR(GPIOD_IDR_Addr, 10) //?? #define PD11in BIT_ADDR(GPIOD_IDR_Addr, 11) //?? #define PD12in BIT_ADDR(GPIOD_IDR_Addr, 12) //?? #define PD13in BIT_ADDR(GPIOD_IDR_Addr, 13) //?? #define PD14in BIT_ADDR(GPIOD_IDR_Addr, 14) //?? #define PD15in BIT_ADDR(GPIOD_IDR_Addr, 15) //?? //---------------------------------------------------- #define PE0 BIT_ADDR(GPIOE_ODR_Addr, 0) //?? #define PE1 BIT_ADDR(GPIOE_ODR_Addr, 1) //?? #define PE2 BIT_ADDR(GPIOE_ODR_Addr, 2) //?? #define PE3 BIT_ADDR(GPIOE_ODR_Addr, 3) //?? #define PE4 BIT_ADDR(GPIOE_ODR_Addr, 4) //?? #define PE5 BIT_ADDR(GPIOE_ODR_Addr, 5) //?? #define PE6 BIT_ADDR(GPIOE_ODR_Addr, 6) //?? #define PE7 BIT_ADDR(GPIOE_ODR_Addr, 7) //?? #define PE8 BIT_ADDR(GPIOE_ODR_Addr, 8) //?? #define PE9 BIT_ADDR(GPIOE_ODR_Addr, 9) //?? #define PE10 BIT_ADDR(GPIOE_ODR_Addr, 10) //?? #define PE11 BIT_ADDR(GPIOE_ODR_Addr, 11) //?? #define PE12 BIT_ADDR(GPIOE_ODR_Addr, 12) //?? #define PE13 BIT_ADDR(GPIOE_ODR_Addr, 13) //?? #define PE14 BIT_ADDR(GPIOE_ODR_Addr, 14) //?? #define PE15 BIT_ADDR(GPIOE_ODR_Addr, 15) //?? #define PE0in BIT_ADDR(GPIOE_IDR_Addr, 0) //?? #define PE1in BIT_ADDR(GPIOE_IDR_Addr, 1) //?? #define PE2in BIT_ADDR(GPIOE_IDR_Addr, 2) //?? #define PE3in BIT_ADDR(GPIOE_IDR_Addr, 3) //?? #define PE4in BIT_ADDR(GPIOE_IDR_Addr, 4) //?? #define PE5in BIT_ADDR(GPIOE_IDR_Addr, 5) //?? #define PE6in BIT_ADDR(GPIOE_IDR_Addr, 6) //?? #define PE7in BIT_ADDR(GPIOE_IDR_Addr, 7) //?? #define PE8in BIT_ADDR(GPIOE_IDR_Addr, 8) //?? #define PE9in BIT_ADDR(GPIOE_IDR_Addr, 9) //?? #define PE10in BIT_ADDR(GPIOE_IDR_Addr, 10) //?? #define PE11in BIT_ADDR(GPIOE_IDR_Addr, 11) //?? #define PE12in BIT_ADDR(GPIOE_IDR_Addr, 12) //?? #define PE13in BIT_ADDR(GPIOE_IDR_Addr, 13) //?? #define PE14in BIT_ADDR(GPIOE_IDR_Addr, 14) //?? #define PE15in BIT_ADDR(GPIOE_IDR_Addr, 15) //?? 有木有一种豁然开朗的感觉,这时候才意识到自己基础知识得有多差了。 接下来数码管就可以好好玩了,不管硬件电路控制数码管的引脚是一组的还是乱七八糟的,我们都有一战之力了。 看了上面的源码,有些人就会有个疑问,只定义了此 GPIO 的输入输出,并没有指出输出的类型,如果是输入,也有很多属性没有赋值。其实不用考虑那么多,直接使用库函数啊 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); 接下来就跟之前控制方式一样了,这里粘贴部分代码
  • 热度 4
    2022-6-12 16:47
    2332 次阅读|
    1 个评论
    简介 数码管,一种把多个发光二极管通过简单阵列的方式组合而成的显示器件。多个二极管阴极连在一起,通过控制阳极的高低电平来控制数码管相应LED亮灭的叫做共阴,反之共阳。每个发光二极管称之为数码管的段,连在一起的阴极或阳极称之为位。 实现框图 模块实现 1. 十进制转BCD模块 十进制(二进制)转BCD通常使用方式是移位加三的算法。具体方式如下表示(以123即8‘b01111011为例): 说明: 1. count为0,将需要转换的数值赋值给设置的移位寄存器shift_reg的后八位 2. count每计数一次,将移位寄存器向左移1位,再判断个位十位的值是否大于等于5,如果十位或个位大于等于5,则十位或个位都加3。 3. 移位的次数(即count的计数值),由需要转化的数的二进制位数相同。 4. 需要避免0,因为复位count值为0,会打乱后面的逻辑。 程序实现 //移位计数 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) count <= 4'd0; else if(count == 4'd9) count <= 4'd0; else count <= count + 4'd1; end //移位加三算法 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) shift_reg = {shift_reg ,data_in}; else if(count == 4'd0) shift_reg = {shift_reg ,data_in}; else if(count <= 4'd9) =5) =5) begin shift_reg = shift_reg + 4'd3; shift_reg = shift_reg + 4'd3; end else begin shift_reg = shift_reg + 4'd3; shift_reg = shift_reg ; end else =5) begin shift_reg = shift_reg ; shift_reg = shift_reg + 4'd3; end else begin shift_reg = shift_reg ; shift_reg = shift_reg ; end else shift_reg = shift_reg; end 2. 译码模块 以下代码以共阳极数码管为例 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) dp_val_r <= 8'b1100_0000; else case (dp_index) //dp,g,f,e,d,c,b,a 0:dp_val_r <= 8'b1100_0000; 1:dp_val_r <= 8'b1111_1001; 2:dp_val_r <= 8'b1010_0100; 3:dp_val_r <= 8'b1011_0000; 4:dp_val_r <= 8'b1001_1001; 5:dp_val_r <= 8'b1001_0010; 6:dp_val_r <= 8'b1000_0010; 7:dp_val_r <= 8'b1111_1000; 8:dp_val_r <= 8'b1000_0000; 9:dp_val_r <= 8'b1001_0000; 10:dp_val_r <= 8'b1000_1000; 11:dp_val_r <= 8'b1000_0011; 12:dp_val_r <= 8'b1100_0110; 13:dp_val_r <= 8'b1010_0001; 14:dp_val_r <= 8'b1000_0110; 15:dp_val_r <= 8'b1000_1110; default:dp_val_r <= 8'b1100_0000; endcase end 3. 数码管扫描模块 扫描计时 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) cnt <= 20'd0; else if(start_cnt == 1'b1) if(cnt == 20'd99999) cnt <= 20'd0; else cnt <= cnt + 20'd1; else cnt <= 20'd0; end 扫描实现 本实验为六位数码管 //SEL_W由数码管位数决定 always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) dp_sel_o_r <= {{(SEL_W-1){1'b0}},1'b1}; else if(cnt == 20'd99999) dp_sel_o_r <= dp_sel_o_r << 1; else if(dp_sel_o_r == {1'b0,{(SEL_W-1){1'b0}}}) dp_sel_o_r <= {{(SEL_W-1){1'b0}},1'b1}; else dp_sel_o_r <= dp_sel_o_r; end always @(posedge clk or negedge rst_n) if(rst_n == 1'b0) dp_index = 4'd0; else begin case (dp_sel_o_r) 6'b000000:dp_index = 4'd0; 6'b000001:dp_index = dp_data_r ; 6'b000010:dp_index = dp_data_r ; 6'b000100:dp_index = dp_data_r ; 6'b001000:dp_index = dp_data_r ; 6'b010000:dp_index = dp_data_r ; 6'b100000:dp_index = dp_data_r ; default: dp_index = 4'd0; endcase end
  • 热度 11
    2022-5-26 16:06
    3121 次阅读|
    0 个评论
    使用LabVIEW来玩耍Arduino-Day7-数码管显示
    实验4.11 液晶滚动显示就是昨天实验的一些修改,比较简单,这里就不单开一篇描述过程了,程序会上传在面包板。 手头上只有共阴极接法的数码管,实验4.12属实折腾了一番,还好最终还是完成了本次实验。下面直接进入正题。 (1)实验目的 利用LIAT中的数码管显示函数库,通过LabVIEW软件控制Arduino Uno控制板,将特定的数据显示在单个数码管上,实现数码管的滚动显示。 (2)硬件连接 《Arduino与LabVIEW开发实战》中使用的是共阳数码管,它的接法是将数码管的阳极接至Arduino Uno控制板上的+5V,将数码管的A、B、C、DP(H,小数点)、D、E、F和G分别接至Arduino Uno控制板上的数字接口D2、D3、D4、D5、D9、D10、D11、D12。 我用的是5011AS数码管,它是共阴极的接法,各引脚对应可以参考下图,中间没有标注的是COM脚,如果是 共阴极 ,那么COM脚都接GND;如果是 共阳极 ,则COM脚都接5V。其他的引脚接法可以参考《Arduino与LabVIEW开发实战》中所述,或者随你心意接,只要在LabVIEW中填入你的连接方式。 (3)程序设计 LabVIEW的前面板:这里的Seven Segment Pins应该填入你当前数码管各引脚连接Arduino Uno的引脚编号,顺序是abcdefgh,我当前的连接方式是ABCDEFGH分别连接D2、D3、D4、D5、D9、D10、D11、D12,所以Seven Segment Pins填入了2、3、4、5、9、10、11、12。 程序框图: LabVIEW程序首先通过设置的串口号与Arduino Uno控制板建立连接,然后调用Seven Segment函数库中的Seven Segment Configure函数节点以配置数码管的管脚连接,接着进入While循环中通过调用Seven Segment Write String函数节点设置写入的数据和滚动间隔的时间。最后,断开与Arduino Uno控制板的连接。 (4)实验与演示 点击运行按钮,LabVIEW程序开始执行,可以看到数码管上滚动显示所设置的数字。由于数码管显示字符的能力有限,一般用来显示数字。也可以显示一些字母,例如h、H、i的大写等等,但是往往会分不清它们和一些数字的区别。 注意 :LIAT中Seven Segment Write String函数节点调用的是Seven Segment Write Char函数节点,而该节点使用的是 共阳极 接法,也就是每次给下位机传输数据时,将对应引脚置低电平。而我使用的是 共阴极 的数码管,对应引脚需要置高电平才能点亮,所以我把Seven Segment Write Char函数节点的VI改了一下,高低电平全部反过来了,所以如果你的数码管也是共阳极的,需要修改Seven Segment Write Char函数节点的VI。 我会把我修改过的Seven Segment Write Char函数节点的VI也放入今天的程序中,有需要的可以直接替换原来的VI进行使用。
  • 热度 32
    2012-11-25 20:35
    2700 次阅读|
    8 个评论
    下面以常见的4位数码管为例来说明 实现步骤 一、打开万用表电源,转到二极管档。 二、万用表的 红笔 或 黑笔 固定在数码管的任一引脚上。 三、另一颜色的笔 遍历 其他所有引脚。 四、步骤三中如果数码管中有 任一段 亮起,则跳到(步骤五);如果都没有亮,则跳到(步骤六)。 五、如果有且仅有一段亮,同时 遍历笔是红 的话,则判定数码管是 共阳 (同时 遍历笔是黑 的话,则判定数码管是 共阴 );如果有多段亮,同时 遍历笔是红 的话,则判定数码管是 共阴 (同时 遍历笔是黑 的话,则判定数码管是 共阳 )。 六、 固定笔 和 遍历笔 对调,跳到(步骤三)。  
  • 热度 29
    2012-6-19 22:16
    3303 次阅读|
    1 个评论
    兴趣是学习一切东西的原动力!本人认为,在小时候要多参加一些培训,为什么呢,因为自己,你的父母亲,老师,很难发现你的真正兴趣所在,以至于到了高中毕业填志愿稀里糊涂的填了志愿,等到读完大二,才知道本专业自己原来不喜欢!下面这篇文档是我的学生写的,他是纺织专业,现在是大三,一个班8个学生,记得有一次有一个程序只有他能写出来,其他7个,有自动化的,有通信的!他是真正找到了他的兴趣所在,所以他乐此不疲!       下面的这篇是我要求他写的一个技术文档,虽然前人写过,但是我要求他比别人写的更仔细一点,更完整一点!我现在在带他做项目,希望后面能看到他更有价值的原创东西! ================================================================= 作者:Jakawn Rada(索漫科技arm就业班学员) ? 如何测定数码管是共阴? ? 如何测定数码管是共阳? 如何测定数码管是共阴? 我们先看数码管的结构图(以标准7 段LED 数码管为例)       以上是单个的数码管,A-G 的每一个字母表示的段称为Segment 下面是常见的数码管实物图(有四个DIGITALS) 它的引脚图如下:     测试步骤:(如果只要判定数码管是共阴的则只需要做到第二步就可以了) 1 先准备好测试工具:先找到5V 电源,引出正极,然后必须 接上200K 的电阻(防止电流过大,烧坏数码管)。示意图如下:   2 如果上一步中的测试电源B 端接在SEG1 引脚上(说明我们 当前选定了第一个数码管,从左数起),A 端接在a-f 中的任意一个引 脚,这时SEG1对应的段亮了则说明是共阴的。 3 重复第二步,可以测试SEG1 中的所有段是否可以正常显示, 例如A 端接在a 引脚则a 段会显示亮,接在b 引脚则b 段会亮等。 4 重复第二步,但是电源B 端接在SEG2 引脚上(说明我们当 前选定了第二个数码管,从左数起),A 端接在a-f 中的任意一个引脚, 这时SEG2 对应的段亮了则说明相应LED 段是可以正常显示的。 5 重复第四步可以接着测试SEG3 和SEG4 的每一个段是否可 以正常显示,以判定所使用的数码是否是好的。 如何测定数码管是共阳? 步骤和测定共阴的时候一样,只是这时换成电源A端接在SEG1-4 中的一个引脚,电源B端接在a-f中的一个引脚就可以了。 Jakawn Rada 2012-5-30 【上海索漫科技提供】  
相关资源