找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4374|回复: 23
收起左侧

请问单片机+数码管(共阴、共阳)及锁存器怎么选用?

  [复制链接]
ID:575020 发表于 2019-12-1 00:21 | 显示全部楼层 |阅读模式
学个51单片机三天打鱼两天晒网,led点灯闪烁马马虎虎了,流水跑马什么的程序还没深入研究,现在想学数码管了,最开始百度说共阳的数码管好操作,于是买了几个共阳的,后来看单片机教程及成品开发板上用的共阴的,又买了几个共阴的,同时买了几个138和595的锁存器,还没搞明白,又看到有些好多案例里用573,又买了几个573芯片,又看到一个仿真图里用245芯片,又买了几个245,尝试很多方案都没成功,请问到底哪种方案简单,最好能有详细点的教程。
请问单看仿真图能看出数码管是共阴还是共阳的么,如下2图。

未标题-1.gif

无标题.jpg

还有想问一下数码管还没学明白,直接学1602有难度么,个人感觉估计1602简单些,好像没那么多种锁存器。
最后还想问一下128x64买哪一种比较好,我先买了备着,学到那直接就拿来用了,省的临时买,看开发板上128x64的接口是20针的,也只能买20针的屏么,还有带中文字库的和不带的么?还有看到有oled的屏有4针的和7针的,买哪一种比较好啊!

回复

使用道具 举报

ID:213173 发表于 2019-12-1 09:06 | 显示全部楼层
用单片机驱动数码管动态显示的方案很多,没有哪种更好的说法。只要单片机的资源够用当然是外围器件越少就越合理。使用138、595、573、245等外围器件可以少占用或共用端口,精简代码、合理分配资源等等。一个完善的仿真图是可以辨识出数码管是共阴还是共阳。但仿真元件属理想元件,与实际电路还是有较大差距。只要没有逻辑错误,仿真基本都能成功。这也会因为只看图不看程序而误判数码管是共阴还是共阳。从这两个图看数码管是共阴的可能性大,因为51单片机不能提供足够的高电平驱动电流,位码低电平驱动才合理。
至于直接学1602有没有难度这不好说,由简到繁循序渐进的学习就不会觉得难。买12864带不带中文字库的和你要解决的问题关联。有中文字库适合做菜单,无中文字库适合做图形。oled的屏有4针的和7针的,买哪一种比较好的问题只能说适合自己就好。
回复

使用道具 举报

ID:235200 发表于 2019-12-1 10:10 | 显示全部楼层
数码管共阴还是共阳,在电路里是可以看出的,数码管由8个发光二极管构成,要使8个发光二极管点亮,一般要使发光二极管有足够的电流,第一图用共阴数码管,245能够提供电流,当一个数码管的8个发光二极管都点亮时,公共端汇集了较大的电流,所以实际应用中公共端也需要加三极管或驱动电路,以防损坏CPU
245 573均是并行输出,同时具备驱动作用,138是译码器,一般作为共阴数码管的位驱动,第2图也是共阴数码管,仿真可以,实际应用电路不建议这样连接
回复

使用道具 举报

ID:235200 发表于 2019-12-1 10:15 | 显示全部楼层
液晶1602和液晶12864的显示原理与数码管不同,不需要象多个数码管一样动态扫描显示,只需要把数据送入液晶模块中的显示缓冲区,传送数据到显示缓冲区的方法有并行方式和串行方式,只需要弄清显示缓冲区与显示的对应关系,掌握显示控制命令即可
回复

使用道具 举报

ID:245004 发表于 2019-12-1 12:38 | 显示全部楼层

数码管明显是共阴的,假如是共阳的,那么供电从何而来?单片机管脚内部是弱上拉。因此明显为共阴。
上面电路245加在段码前没有必要,图中实际电路应在245和段码之间加限流电阻。
上面电路245加在单片机和数码管公共端之间有必要,那么数码管用共阳共阴都可以驱动。当然程序代码要匹配。
1602是协议通讯,和数码管是两个概念,因此不能对比哪个简单,1602应用内容也很多,简单应用的话一般来说不复杂。
数码管动态显示也不需要锁存器(245不是),看具体应用环境了。
12864一般同时支持并口和串口通讯方式,一般并口应用简单些。带字库当然简单些,一步步来。
OLED常见的有I2C通讯和SPI通讯,学习单片机都会学到,所以简单用I2C的,SPI的也支持I2C。
综上所述,随便买一种就可以,都买上以后想用更方便。


回复

使用道具 举报

ID:275826 发表于 2019-12-1 13:02 | 显示全部楼层
单片机数码管的原理大概是这样的,分别对一个字节进行编码,暂且将其叫a,b,c,d,e,f,g,h,当取不同的值时,将会得到不同的显示,那为什么是八位呢,因为在计算机里8位刚好是一个字节,这样就使其变的合理起来,可以把一个字节的数据送到某个寄存器里面,然后再送给数码管,得到相应的显示。编码如下:
----------------------------------------------------
0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
0        1        2 3 4 5
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
6 7 8 9 A B
0x39 , 0x5e , 0x79 , 0x71 , 0x00
C D E F 无显示
------------------------------------------------------
为了节约资源,又引入了2个锁存器(74HC573),这样就可以使用少的单片机引脚达到完全控制数码管的目的。为什么会选择锁存器呢,,其实,我模电学的太菜了,里面的原理还不明白,以后有空的话,会去看看补充一下。
再说说锁存器的功能,就是锁存器有一个控制位,当她的高位电位不同,会有不同的效果,当是高电平的时候,导通,当是低电平的时候,就断开了,并且保持右边的电位状态。所以利用这一功能,就可以达到控制数码管的目的。
因此,可以如下示例程序:效果是点亮2个数码管,显示0
#include<reg52.h>
sbit wela=P2^7;
sbit dula=P2^6;
void main()
{
   wela=0;
   P0=0xc0;
   wela=1;

   dula=0;
   P0=0x06;
   dula=1;
}
回复

使用道具 举报

ID:575020 发表于 2019-12-2 00:07 | 显示全部楼层
还买了数码管模块,4位的和8位的都只有5根线,正负极和SCLK、RCLK、DIO,另一头也是5个孔,DIO变成了QH,模块反面有2个芯片,都是74hc595的,也不知道怎么用的。
IMG_20191201_211138.jpg
IMG_20191201_211232.jpg
IMG_20191201_211352.jpg
IMG_20191201_211529.jpg
回复

使用道具 举报

ID:96682 发表于 2019-12-2 04:02 来自手机 | 显示全部楼层
全面了解遇到的这些器件,怎么组合不就心中有数了么,编程以现在受过高等教育的学生来说不是很难
回复

使用道具 举报

ID:470332 发表于 2019-12-2 08:40 | 显示全部楼层
先学好C语言,先看手册,剩下的看例程,然后你大概就会了
回复

使用道具 举报

ID:213173 发表于 2019-12-2 09:06 | 显示全部楼层
singrain 发表于 2019-12-2 00:07
还买了数码管模块,4位的和8位的都只有5根线,正负极和SCLK、RCLK、DIO,另一头也是5个孔,DIO变成了QH,模 ...

这数码管模块使用很简单,给你一个测试程序,SCLK、RCLK、DIO分别接P1.1、P1.2、P1.0。
回复

使用道具 举报

ID:213173 发表于 2019-12-2 09:15 | 显示全部楼层
singrain 发表于 2019-12-2 00:07
还买了数码管模块,4位的和8位的都只有5根线,正负极和SCLK、RCLK、DIO,另一头也是5个孔,DIO变成了QH,模 ...

SCLK、RCLK、DIO分别接P1.1、P1.2、P1.0。程序是按共阴数码管写的,如果是共阳数码管只要把显示程序中预留的两条代码替换一下即可,如果模块的位码和段码与程序发送顺序不一致,只要把显示程序中两者顺序对调一下即可。
  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit HC595_DIO   = P1^0;
  5. sbit HC595_SCLK  = P1^1;
  6. sbit HC595_RCLK  = P1^2;

  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管段码0~f
  8.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9. uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管位码

  10. /******************1ms延时子程序(12MHz)*******************/
  11. void delayms(uint k)
  12. {
  13.         uint i,j;
  14.         for(i=k;i>0;i--)
  15.                 for(j=125;j>0;j--);
  16. }
  17. /**************** 向HC595发送一个字节函数 ******************/
  18. void Send_595(uchar dat)
  19. {               
  20.         uchar i;
  21.         for(i=0;i<8;i++)
  22.         {
  23.                 HC595_DIO=(dat&0x80)>>7;//由高位到低位赋值数据输出端
  24.                 HC595_SCLK = 1;        //移位时钟
  25.                 HC595_SCLK = 0;
  26.                 dat <<= 1;                        //dat左移一位
  27.         }
  28. }
  29. /**************** 数码管显示函数 ******************/
  30. void DisplayScan()
  31. {       
  32.         static uchar i=0;
  33.         Send_595(dis_buf[i]);//向HC595发送位码(共阴数码管)
  34.         Send_595(table[i]);        //向HC595发送段码(共阴数码管)
  35. //        Send_595(~dis_buf[i]);//向HC595发送位码(共阳数码管)
  36. //        Send_595(~table[i]);        //向HC595发送段码(共阳数码管)
  37.         HC595_RCLK = 1;                //锁存输出数据
  38.         HC595_RCLK = 0;
  39.         i++;
  40.         i%=8;
  41. }

  42. void main()
  43. {
  44.         HC595_SCLK  = 0;        //初始化移位时钟端
  45.         HC595_RCLK  = 0;        //初始化锁存输出端
  46.         while(1)
  47.         {
  48.                 DisplayScan();        //数码管显示函数
  49.                 delayms(1);                //延时1ms
  50.         }
  51. }
复制代码
回复

使用道具 举报

ID:575020 发表于 2019-12-3 21:30 | 显示全部楼层
wulin 发表于 2019-12-2 09:15
SCLK、RCLK、DIO分别接P1.1、P1.2、P1.0。程序是按共阴数码管写的,如果是共阳数码管只要把显示程序中预 ...

还是验证不通过,显示有乱码,改成共阳的数组也不行,1.1和1.2对换也不行。
回复

使用道具 举报

ID:575020 发表于 2019-12-3 21:59 | 显示全部楼层
百度说595是串转并信号用的,573是锁存器,
个人感觉估计573简单一些,就是开门关门,关门的时候也能维持供电断电,还有就是不需要io口输出电流,就是所谓的增加驱动电流把!那个595什么串行信号并行信号转换的完全不明白啊!新手也不需要节省io口,还是先把573搞明白再说了。
回复

使用道具 举报

ID:245004 发表于 2019-12-7 14:43 | 显示全部楼层
singrain 发表于 2019-12-3 21:30
还是验证不通过,显示有乱码,改成共阳的数组也不行,1.1和1.2对换也不行。

数码管的“段码”的“代码”表格是要根据实际端口重新定义赋值的。
公共端端口排列、驱动芯片端口,都是要和实际一致的。结合芯片手册,再看别人的代码,才容易理解。
回复

使用道具 举报

ID:575020 发表于 2019-12-7 23:07 | 显示全部楼层
还是搞不懂数码管用共阴的好还是共阳的好。
回复

使用道具 举报

ID:164602 发表于 2019-12-8 10:21 | 显示全部楼层
singrain 发表于 2019-12-7 23:07
还是搞不懂数码管用共阴的好还是共阳的好。

如果用单片机直接驱动数码管,则共阳的好。
单片机的输出电流不大,大型的数码管亮度不一定够,但单片机的灌入电流要稍大一些,数码管亮度就够了。
如果用其它电路驱动数码管(如用三极管、你买的套件是595等),那就无所谓了,只是改变数码管的显示编码而已(其实编码都可以不变,取反就行)。
回复

使用道具 举报

ID:245004 发表于 2019-12-8 11:46 | 显示全部楼层
singrain 发表于 2019-12-7 23:07
还是搞不懂数码管用共阴的好还是共阳的好。

不能说用哪种好,有些条件下用共阳,有些条件下用共阴。
例如:51单片机动态驱动数码管,一般选择共阳比较方便,因为公共端可以用驱动三极管或者IC控制,段码可以经过限流电阻用单片机管脚控制,而无需上拉(供电)电阻,符合低功耗要求;而通过锁存器等静态显示的条件下,用共阴也很方便,当然也可以用共阳。
所以用哪种好是根据实际电路和供电条件等因素选择的。
回复

使用道具 举报

ID:637591 发表于 2019-12-19 19:58 | 显示全部楼层
我这是573 驱动共阴数码管  想找个程序实验一次  在网上找的 总编译错误  
51hei图片20191219195555.jpg
回复

使用道具 举报

ID:637591 发表于 2019-12-19 20:00 | 显示全部楼层
wulin 发表于 2019-12-2 09:15
SCLK、RCLK、DIO分别接P1.1、P1.2、P1.0。程序是按共阴数码管写的,如果是共阳数码管只要把显示程序中预 ...

大佬  573驱动4位共阴数码管 的程序  有木有
回复

使用道具 举报

ID:575020 发表于 2019-12-31 23:40 | 显示全部楼层
2048858214 发表于 2019-12-19 19:58
我这是573 驱动共阴数码管  想找个程序实验一次  在网上找的 总编译错误

你有电路原理图么?
回复

使用道具 举报

ID:672205 发表于 2020-1-2 19:52 来自手机 | 显示全部楼层
去查芯片资料
回复

使用道具 举报

ID:575020 发表于 2021-6-8 00:37 | 显示全部楼层

573和595还没弄明白,又发现有TM1637和MAX7219似乎更好,(其中TM家族还有1638,1640,1650等)。也不知道该深入学习啥好了。

IMG_20210512_084129.jpg

IMG_20210512_084339.jpg

IMG_20210512_084439.jpg

IMG_20210512_085026.jpg

IMG_20210512_085145.jpg


IMG_20210512_085533.jpg

IMG_20210512_085655.jpg

IMG_20210512_085731.jpg

回复

使用道具 举报

ID:88256 发表于 2021-6-8 09:53 | 显示全部楼层
学习不能“请问到底哪种方案简单”就用哪种,而是学习的方式,单片机注重的是底层,不像Arduino,所以必须对外围器件进行了解才能够驱动得起来,建议楼主一步步慢慢来,对涉及的器件都去了解一下。对于数码管模块,关注点是采用什么芯片以及芯片与数码管之间是怎么连接的,
楼主的开发板都没有配外围的吗?我感觉楼主好像和我一样,对显示的特别感兴趣,逻辑芯片我也收集了不少
回复

使用道具 举报

ID:401564 发表于 2021-6-8 09:58 | 显示全部楼层
两年了!这帖子两年了
工作中如果用不到这些东西,直接丢了
它们不是宝贝,也没有收藏价值
除非是在高速电路或者低成本电路中,这些数字电路IC用处不大的,特别是用来扩展端口的,这年头单片机40个IO以上的大把的,你要是量多,300个IO也是常有的事
对于数字电路IC,你要做的不是专门去学哪个IC型号的使用方法,74系列和CD系列加一块估计有上千个型号,你能看得完?
你要做是学会看真值表和时序图,这些在数据手册中都有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表