搜索

tag 标签: 数码管

相关帖子

版块 作者 回复/查看 最后发表
【工程源码】数码管之侣——二进制转BCD attachment 【Altera SoC】 小梅哥 2020-2-20 1 115 led2015 6 天前
小项目发包,有尝 【51单片机】 d026530 2017-6-15 11 1445 chenzhufly 2017-6-16 09:25
为啥无论怎么调延时参数,数码管一直都是一个频率在动态扫描?? attach_img 【51单片机】 ruanpang 2017-5-24 4 1803 ruanpang 2017-5-25 08:18
FPGA学习之DS1302时钟+数码管显示 attach_img FPGA/CPLD gurou1 2017-5-14 3 2513 智ing 2018-6-5 02:02
MSP430控制数码管程序 attachment 【微控制器 MCU】 聪明的诸葛亮 2017-5-10 3 1772 聪明的诸葛亮 2017-5-16 23:52
51单片机用按钮同时点亮led和数码管显示数字 单片机 22222211 2017-5-4 5 3764 739669351 2017-5-5 16:27
FRDM-KW41Z驱动74HC595控制8段数码管实现计数器 attach_img 【NXP Kinetis MCU】 littleshrimp 2017-4-30 6 2041 big_brother 2017-5-1 07:47
学艺不精,说说MSP430使用硬件SPI遇到的坑 attach_img 【微控制器 MCU】 littleshrimp 2017-4-16 4 5549 littleshrimp 2017-4-17 10:08
单片机数码管显示原理(转) attach_img 信息发布 菲利盟电子 2017-4-12 0 1212 菲利盟电子 2017-4-12 16:04
如何通过串口通信来改变数码管的所显示的东西 attach_img 【51单片机】 胡豆豆的春天 2017-4-1 6 3580 胡豆豆的春天 2017-4-1 20:06
让数码管显示温度的代码,我是新手,希望大家可以帮我一下 attach_img 【51单片机】 胡豆豆的春天 2017-3-31 7 2990 一念思量 2017-4-1 09:23
51单片机求功率因数疑问 attach_img 【51单片机】 想变胖 2017-3-28 7 1608 Drake_Zero 2017-6-12 21:15
数码管不正常显示 【51单片机】 小瓜子 2017-3-18 9 2217 小瓜子 2017-3-26 11:11
萌新求助各位大佬,自己写了一个程序0-99的数码管显示,大哥们帮忙看看 【51单片机】 张肖飞 2017-3-1 7 2058 徐建庆 2017-3-22 20:15
用串口助手向单片机发送十进制数字并在数码管上显示 单片机 ELEGIE 2017-2-18 5 2711 长得帅怪我落 2017-2-18 09:38
基于至简设计法的数字时钟设计 attach_img 信息发布 njiggih 2017-2-15 0 707 njiggih 2017-2-15 17:24
数码管不显示,不知道什么原因 attachment 【stm32/stm8】 JERRR 2017-2-5 12 3452 JERRR 2017-2-6 19:18
小弟求助 电子竞赛 HI唐辉 2017-1-16 2 1756 HI唐辉 2017-1-16 21:35
实现过程中每按一次按键,数码管所有位数上的数字全部闪烁一次,请问问题出在哪里? 【51单片机】 电子爱好者111 2017-4-13 1 1 电子爱好者111 2017-4-13 19:39
【工程源码】基于FPGA的数码管字体,用来在液晶屏上显示数字 attach_img 【Altera SoC】 小梅哥 2020-2-14 1 103 threetigher 2020-2-15 10:30

相关日志

分享 单片机_汇编编程_8_并行口驱动数码管显示
chenht7 2017-9-28 16:03
单片机_汇编编程_并行口驱动数码管显示 时间:2017/9/28 # 一、任务描述 通过汇编编程,通过单片机的IO口,直接输出驱动数码管,从而实现在数码管上,依次从0到9进行循环显示。 # 二、任务实现 ## 2.1 硬件连接 目前的硬件线路如下: 主控芯片: STC 89C52 输入引脚: 无 输出引脚: P0.0 - P0.6 驱动共阳数码管 工作频率: 12MHz ## 2.2 分析命题 这次主要的功能如下: 1. 数据有次序的进行显示 -- 涉及到了调用延时的功能 2. 发送的字符串信号是不同的 -- 需要进行数据的查表 ## 2.3 确定算法 该算法的主要实现方式是,先通过将数据写入数据表,然后依次地读取数据表中的数据,将其通过端口,将其发送到共阳数码管中,从而驱动数码管进行对应的显示。 ## 2.4 流程图 ## 2.5 程序 ``` ORG 00H START: MOV R1, #00H; 设置寄存器指向起始处 NEXT: MOV A, R1; 给寄存器赋初值 MOV DPTR, #TABLE; 指向数据表 MOVC A, @A+DPTR; 进行提取数据 MOV P0, A; 数据输出 LCALL DELAY; 进行延时 INC R1; 计数减一 CJNE R1, #10, NEXT; 当计数器的计数满10个,则跳转 LJMP START DELAY: MOV R5, #100; 原先是20,现为了使得显示的更好些,将数值改为100,延时1ms左右 D2: MOV R6, #20 D1: MOV R7, #248 DJNZ R7, $ DJNZ R6, D1 DJNZ R5, D2 RET TABLE:; 针对于共阳发光二极管,单片机的上拉能力弱,但是下拉能力比上拉要强一些 DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 END ``` # 三、总结 这个实现的效果,在仿真软件上,貌似效果不怎么样,而在这个实际的开发板上,显示出来的效果还是挺不错的。 # 参考资料 《单片机的编程与汇编程序案例》, https://wenku.baidu.com/view/9018d6795acfa1c7aa00cc58.html
个人分类: 汇编|411 次阅读|0 个评论
分享 8路电压采集系统
mhb520 2015-9-9 20:04
8 路电压采集系统设计总结 1 ,设计背景 实现八路的电压采集,并且通过按键来选择要采集的通道,数据处理之后在数码管上显示。 2 ,设计思路 由于本系统知识一个简单的电压采集系统,所以采用 8 位 51 内核 STC89C52RC 处理器。本系统采用 SPI 接口的 8 位 TLC549A/D 采集芯片,因为它只能采集一路,要想满足本设计要求,于是在模拟采集前端加一个模拟多路复用器,通过复用器的选择端来选择导通的通道,进而可以采集八路的电压。 8 个按键采用独立按键的模式,但是这样直接连接至微处理器,会大大占用微处理器的 I/O 口,所以在按键电路中,采用 8-3 优先编码器 74HC148 ,因为此编码器具有优先级功能,并且当按键有效时, GS 端会输出低电平,因此可以将 GS 端接在微处理器的中断口,这样按键可以在中断中处理,满足实时要求。显示电路采用数码管显示, 3 位数码管显示,数码管驱动电路采用 PNP 三极管驱动。 3 ,设计调试 确定好方案之后,开始了原理图和 PCB 板的设计,原理图的设计采用 AltiumDesigner15.0 软件。按照之前的思路设计好 PCB 、投板。最后板子回来,焊接时,问题出来了,在焊接复位电路时,发现之前设计错了,错误电路如图 1 所示,从图中可以清楚的看到,复位按键设计错误,不应该连接至 GND ,而是连接到 VCC 。 图 1 于是无奈之下,我就没有焊接这个复位按键,这样虽然可以用,但是不能手动复位了,这个问题算是过了。 之后便焊接了数码管,但是在调试数码管时又出现了问题,写好程序,下载入微处理器中,结果不到 5s 的时间,三极管又炸了,三个三极管几乎是在同一时刻出现了“啪”的声音。没想到意料之中的事还是发生了,之前在设计数码管驱动电路时,没有加限流电阻,电路如图 2 所示,之所以会出现三极管炸的现象,主要原因肯定是限流电阻的问题。不过庆幸的是微处理器的引脚没有烧坏,还能正常工作。 图 2 由于出现上述问题,所以接下来对电路板没有任何调试。决定改板。 在第二次板子的设计中,复位按键改了,数码管驱动电路改了,加了限流电阻。并且在每个芯片的电源处都加了退藕电容。并且将之前的 9012PNP 三极管换成了 8550PNP 三极管。 整体电路设计如下图 3 所示 图 3 第二版电路板调试时,复位电路 ok ,数码管显示 ok 。但是又出现一个新的问题,在调试按键时,我将按下的按键值在数码管上显示出来,可是最后只能显示 1357 ,而 2468 无法显示,对于这个问题,我起初以为按键是坏的,可是我对所有按键都检查了一遍,之后没有发现问题,而且每个按键按下之后,相应的芯片管脚和微处理器的中断口都有电平变化,也符合逻辑要求,可是为什么只能显示 1357,2468 显示不了了呢?于是我对按键处理代码进行了审查,代码如图 4 所示。 图 4 仔细检查之后,发现原理是代码的风格导致的错误。将代码改了之后,结果正常显示按键的值。改正后的代码如图 5 所示。 图 5 对,没错,就是因为没有将 P20X07 用括号括起来,所以程序运行时出现了错误。 至此,按键,显示各个模块已经调试通过。 接下来就是对数据的出来,在数据的出来过程中,为了滤除杂波,使显示更加稳定,测量的数据更加的准确,于是在程序设计中采用了滤波算法,具体思路为:先采集 20 个数据,然后将二十个数据依次从大到小排序,拍完序之后将最大的数据和最小的数据舍弃,即第一个数据和最后一个数据舍弃,然后对剩下的数据再进行算平均数,这样计算的数据可以避免尖脉冲的干扰,又可是使整个数据变得平滑,消除杂波干扰。算法程序如下图 6 所示。 图 6 4 ,总结 对于本系统电路,从最开始的方案确定,原理图的设计,焊接调试,到最后的整个程序的设计,每一个过程都是充实但有充满困难的,其中调试时出现的电路设计不正确,就是最好的例子。但是最终整个系统工作正常之后,这无非对自己又是一个大的收获,每一个过程都是一个收获。最后在测试中,因为此电路只能显示两位小数,所以用一个四位半的万用表去测一个电压时,为 2.5080V ,而用我这个系统测量时,电压为 2.51V 。所以在测量精度上可以满足要求,而且八路电压可以通过按键来选择通道。
个人分类: 电子设计|859 次阅读|0 个评论
分享 AVR单片机开发-单片机与PLC通信
wyh0012 2014-8-7 23:40
在我们的开发中,要给PLC配显示设备我们首先想到的是触摸屏。但是我们仅仅要显示某个寄存器的数值时,用触摸屏是不是有点浪费?!这时我们采用一片单片机+一只数码管是不是性价比更高些。 单片机和PLC通信我们要遵循一定的协议,如:松下(Panasonic)PLC的MEWTOCO协议、欧姆龙(OMRON)PLC的HOSTLINK协议、三菱(MITSUBISHI)PLC的CCLINK协议、西门子(SIEMENS)PLC的UUS协议以及通用的Modbus协议。这些协议可以方便的和PLC之间通信,而且不用编写PLC程序,由PLC自行完成。 以下是基于于行科技开发的DMS64单片机控制板编写的单片机与松下PLC的通信程序,仅供设计参考。 /*------------MEWTOCOL.h---------------*/ #ifndef MEWTOCOL_H #define MEWTOCOL_H #include"UART_Init.h" #define StartChar '%' #define EndChar '\r' void inttoasc(unsigned long _data,unsigned char *p); unsigned char asciitohex(unsigned char _ascii); unsigned char dectohex(unsigned char _dec); void MTXORCheck(unsigned char *checkresult,unsigned char *checkdata,unsigned char _length); //异或求和 unsigned char MTCheck(); //接收数据有效性检查 unsigned char MTRCS(unsigned char _code ,unsigned int _address);//读取单触点状态 unsigned char MTWCS(unsigned char _code ,unsigned int _address,unsigned char _staus);//写入单触点状态 unsigned char MTRD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length); //读取寄存器 unsigned char MTWD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length); //写寄存器 #endif /*---------------MEWTOCOL.h-----------------*/ #include"MEWTOCOL.h" #include"AllHardFile.h" #include"yhdelay.h" unsigned char Maddress = 0x01; void inttoasc(unsigned long _data,unsigned char *p) { unsigned char data ; unsigned char i; for(i=0;i5;i++) { data = (unsigned char)(_data % 10) + '0'; _data = _data /10; } for(i=0;i5;i++) { *p = data ; p++; } } unsigned char asciitohex(unsigned char _ascii) { unsigned char _hex = 0; switch(_ascii) { case 0x30: _hex = 0x0; break; case 0x31: _hex = 0x1; break; case 0x32: _hex = 0x2; break; case 0x33: _hex = 0x3; break; case 0x34: _hex = 0x4; break; case 0x35: _hex = 0x5; break; case 0x36: _hex = 0x6; break; case 0x37: _hex = 0x7; break; case 0x38: _hex = 0x8; break; case 0x39: _hex = 0x9; break; case 0x41: _hex = 0xA; break; case 0x42: _hex = 0xB; break; case 0x43: _hex = 0xC; break; case 0x44: _hex = 0xD; break; case 0x45: _hex = 0xE; break; case 0x46: _hex = 0xF; break; } return _hex; } unsigned char dectohex(unsigned char _dec) { unsigned char hex; hex = _dec + '0'; if(hex0x39) hex = hex + 0x7; return hex; } void MTXORCheck(unsigned char *checkresult,unsigned char *checkdata,unsigned char _length) //接收数据有效性检查 { unsigned char i; unsigned char xorsum = 0; for(i=0;i_length;i++) { xorsum = xorsum ^(*checkdata); checkdata++; } *checkresult = dectohex(xorsum/16); checkresult++; *checkresult = dectohex(xorsum%16); } unsigned char MTCheck() //接收数据有效性检查 { unsigned char xorsum ; unsigned char errcode = 0x00; unsigned char address = 0; MTXORCheck(xorsum,rxbuf,rxcount-3); if((xorsum ==rxbuf )(xorsum ==rxbuf )) // 异或求和 校验 { address = asciitohex(rxbuf ); address = address4; address |= asciitohex(rxbuf ); if(address==Maddress) // 地址校验 { if(rxbuf =='$') // 返回数据正确/错误代码校验 errcode = 0xFF; if(rxbuf =='!') { errcode = asciitohex(rxbuf ); errcode = errcode4; errcode |= asciitohex(rxbuf ); } } } return errcode; } unsigned char MTRCS(unsigned char _code ,unsigned int _address) { unsigned int address; unsigned char xorsum ; unsigned char rxendi; unsigned char isnormal; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'R'; txbuf = 'C'; txbuf = 'S'; txbuf = _code; address = _address4; txbuf = (address/100) + '0'; address = address % 100; txbuf = address/10 + '0'; txbuf = address%10 + '0'; txbuf = dectohex((unsigned char)(_address0x000F)); //txbuf = _staus + '0'; MTXORCheck(xorsum,txbuf,12); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,15); delay_ms(50); rxendi = 0; while((rxendi100))// 接收超时处理 { if(rxstaus==rxend) { rxendi = 101; } else { delay_ms(50); rxendi++; } } rxstaus = rxwait; isnormal = MTCheck(); if(isnormal==0xFF) return rxbuf ; else return isnormal; } unsigned char MTWCS(unsigned char _code ,unsigned int _address,unsigned char _staus) { unsigned int address; unsigned char xorsum ; unsigned char rxendi; unsigned char isnormal; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'W'; txbuf = 'C'; txbuf = 'S'; txbuf = _code; address = _address4; txbuf = (address/100) + '0'; address = address % 100; txbuf = address/10 + '0'; txbuf = address%10 + '0'; txbuf = dectohex((unsigned char)(_address0x000F)); txbuf = _staus + '0'; MTXORCheck(xorsum,txbuf,13); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,16); delay_ms(50); rxendi = 0; while((rxendi100))// 接收超时处理 { if(rxstaus==rxend) { rxendi = 101; } else { delay_ms(50); rxendi++; } } rxstaus = rxwait; isnormal = MTCheck(); return isnormal; } unsigned char MTRD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length) { unsigned char add ; unsigned char xorsum ; unsigned int rxdata; unsigned char i; unsigned char isnormal; unsigned char base=0; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'R'; txbuf = 'D'; txbuf = _code; inttoasc(_address,add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; inttoasc((_address+_length-1),add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; MTXORCheck(xorsum,txbuf,17); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,20); delay_ms(50); i = 0; while((i100))// 接收超时处理 { if(rxstaus==rxend) { i = 101; } else { delay_ms(50); i++; } } rxstaus = rxwait; isnormal = MTCheck(); if(isnormal==0xFF)//(isnormal) { for(i=0;i_length;i++) { base = i*4 + 6; rxdata = asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); //p = p + i; *(p+i) = rxdata; } } else { for(i=0;i_length;i++) { *(p+i) = 0; } } return isnormal; } unsigned char MTWD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length) { unsigned char add ; unsigned char data ; unsigned char xorsum ; unsigned int txdata; unsigned char i; unsigned char isnormal; unsigned char base=0; unsigned char arraylength; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'W'; txbuf = 'D'; txbuf = _code; inttoasc(_address,add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; inttoasc((_address+_length-1),add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; arraylength = 17; for(i=0;i_length;i++) { txdata = *(p+i); // 取值 data = dectohex(txdata0x000F); // 转换为HEX ASCII txdata = txdata 4; data = dectohex(txdata0x000F); txdata = txdata 4; data = dectohex(txdata0x000F); txdata = txdata 4; data = dectohex(txdata0x000F); txbuf = data ; // 存放到发送数组 arraylength++; txbuf = data ; arraylength++; txbuf = data ; arraylength++; txbuf = data ; arraylength++; } MTXORCheck(xorsum,txbuf,arraylength); // 异或和校验 txbuf = xorsum ; arraylength++; txbuf = xorsum ; arraylength++; txbuf = EndChar; // 结束符 arraylength++; Uart0_Send(txbuf,arraylength); delay_ms(50); i = 0; while((i100))// 接收超时处理 { if(rxstaus==rxend) { i = 101; } else { delay_ms(50); i++; } } rxstaus = rxwait; isnormal = MTCheck(); return isnormal; } 以上代码来源:http://www.yh-gk.com/article.php?id=14
个人分类: AVR|1483 次阅读|0 个评论
分享 8位一体数码管动态显示时钟
谭钢 2014-7-15 15:12
主要函数: #includemsp430f249.h #define CPU_F ((double)8000000) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //延时1毫秒 const char tab ; char dis_buff ; char time_counter;//1s计数器 void display(void)//显示扫描函数,执行时间16ms { static char i; P3OUT=0xFF; P1OUT=tab ];//字段码送数码管 P3OUT=~(1i);//位置选低 if(++i==8) i=0; delay_ms(0.1); } void time_to_disbuffer(void)//时间值送显示缓冲函数 { dis_buff =time /10;//小时 dis_buff =time %10; dis_buff =time /10; dis_buff =time %10;//分钟 dis_buff =time /10; dis_buff =time %10;//秒 } void main(void) { P1DIR=0xFF;//P1初始化为输出端口 P3DIR=0xFF;//P2初始化为输出端口 time =23; time =58; time =55;//时间初值23:58:55 time_to_disbuffer(); dis_buff =dis_buff =10; while(1) { display();//显示扫描 if(++time_counter=250)//更新时间 { time_counter=0; if(++time =60) { time =0; if(++time =60) { time =0; if(++time =24) time =0; } } time_to_disbuffer();//修改显示缓冲区 } } } 用Proteus8仿真后,数码管第一位显示不出来,求指导。。。。
个人分类: msp430系列|416 次阅读|0 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-2-28 22:38 , Processed in 0.054303 second(s), 10 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2020 http://test.bbs.eeworld.com.cn/

返回顶部