找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: asdadqw2
打印 上一主题 下一主题
收起左侧

用5个74hc595芯片级联,控制27位数码管,数码管显示闪烁问题

  [复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次(中奖概率 50%)
41#
ID:384109 发表于 2024-4-15 15:34 | 只看该作者
看代码,你是对595的使用有误解吧
回复

使用道具 举报

42#
ID:33145 发表于 2024-4-15 15:49 | 只看该作者
yqs138168 发表于 2024-4-15 15:26
看看我的程序,新思路,与你的写法不一样,效率高很多

还有一种方案,使用专用显示驱动芯片,例如MAX7219
回复

使用道具 举报

43#
ID:33145 发表于 2024-4-15 15:58 | 只看该作者
数码管仿真模型参数修改

数码管仿真模型参数修改.jpg (142.7 KB, 下载次数: 235)

数码管仿真模型参数修改.jpg
回复

使用道具 举报

44#
ID:213173 发表于 2024-4-15 17:04 | 只看该作者
给你一个仿真示例,如果实物效果不好就按10楼建议处理,以留给主函数足够时间运行其它代码。




  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define ulong unsigned long
  5. sbit P_HC595_SER   = P2^0;
  6. sbit P_HC595_SRCLK = P2^1;
  7. sbit P_HC595_RCLK  = P2^2;
  8. sbit A0=P2^3;
  9. sbit B0=P2^4;
  10. sbit C0=P2^5;
  11. uchar code table[]={
  12. // 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
  13.   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  14. //  G   H    J    K    L    M    N    o    P     Q    r   t   
  15.   0x3d,0x76,0x1E,0x70,0x38,0x37,0x54,0x5C,0x73,0x67,0x50,0x78};
  16. ulong num=0xfffffffe;
  17. bit flag;//标志

  18. /**************** 向HC595发送一个字节函数 ******************/
  19. void Send_595(uchar dat)
  20. {               
  21.         uchar i;
  22.         for(i=0;i<8;i++)
  23.         {
  24.                 dat <<= 1;
  25.                 P_HC595_SER  = CY; //溢出位赋值数据输出端
  26.                 P_HC595_SRCLK = 1; //移位时钟
  27.                 P_HC595_SRCLK = 0;
  28.         }
  29. }
  30. /**************** 向HC595发送5个字节驱动码 ******************/
  31. void DisplayScan()
  32. {       
  33.         static uchar i;

  34.         Send_595(num>>24);//向HC595发送位码
  35.         Send_595(num>>16);//向HC595发送位码
  36.         Send_595(num>>8);//向HC595发送位码
  37.         Send_595(num);   //向HC595发送位码
  38.         Send_595(table[i]);//向HC595发送段码
  39.         P_HC595_RCLK = 1;//锁存输出数据
  40.         P_HC595_RCLK = 0;
  41.         num=num<<1|0x01;
  42.         if(++i>=27)
  43.         {
  44.                 num=0xFFFFFFFE;
  45.                 i=0;
  46.         }
  47. }

  48. void InitTimer0(void)//740us
  49. {
  50.     TMOD = 0x01;
  51.     TH0 = 0x0FD;
  52.     TL0 = 0x1C;
  53.     EA = 1;
  54.     ET0 = 1;
  55.     TR0 = 1;
  56. }

  57. void main()
  58. {
  59.         P_HC595_SRCLK = 0;//初始化移位时钟端
  60.         P_HC595_RCLK  = 0;//初始化锁存输出端
  61.         InitTimer0();
  62.         while(1)
  63.         {
  64.                 if(flag)
  65.                 {
  66.                         flag=0;
  67.                         DisplayScan();
  68.                         //其它程序
  69.                 }
  70.         }
  71. }
  72. void Timer0Interrupt(void) interrupt 1
  73. {
  74.         TH0 = 0xFD;
  75.         TL0 = 0x1C;
  76.         flag=1;
  77. }
复制代码




回复

使用道具 举报

45#
ID:57657 发表于 2024-4-16 08:48 | 只看该作者
27个数码管每个8段共有216段,使用16行16列扫描只需要4个74HC595 最多驱动256个点阵(16*16或32*8)或32位8段数码管。
如果单片机有16个IO口空闲,那么只需要2片74HC595就能驱动,32个IO口空闲一片都不需要(需要IO口支持强推挽模式)。
仿真的动态扫描闪烁可以调整 Minimum Trigger Time 的毫秒参数,具体是否闪烁需要实物验证。
回复

使用道具 举报

46#
ID:332444 发表于 2024-4-16 09:17 | 只看该作者
很简单的,取消延时语句,测量时间是多少,若时间刚好则可取消延时,若还是时间过多则要考虑修改电路。
回复

使用道具 举报

47#
ID:298743 发表于 2024-4-16 16:29 | 只看该作者
yqs138168 发表于 2024-4-15 15:21
24个共阴数码管+5个74HC595,仿真软件为Proteus8.11版本,,,可以正常显示。

真是奇怪了,我将你的8位一组数码管换成两个四位一组的数码管就显示不出来了
回复

使用道具 举报

48#
ID:298743 发表于 2024-4-16 19:06 | 只看该作者
神奇,把long拆分成4个unchar ,12MHZ现在又可以了,之前要用到33MHZ才可以的
回复

使用道具 举报

49#
ID:292903 发表于 2024-7-27 01:11 | 只看该作者
zhuls 发表于 2024-4-13 09:23
switch(i) //逐位输入数据
        {
        case 0:

哈哈,我也是这样觉得的,第一眼都看麻了
回复

使用道具 举报

50#
ID:619259 发表于 2024-7-27 12:55 | 只看该作者
xiaobendan001 发表于 2024-4-13 07:12
595不是有控制端吗?怎么还消隐?164才需要消隐吧。我用2片595级联输出,发现市场上大部分595都不能用,只 ...

一、消隐与否,是数码管决定,而不是芯片决定。凡是使用动态扫描的多位数码管显示,都必须消隐。HC164因芯片内部无锁存功能,在联级驱动数码管时只能通过复位端清零来实现消隐,属于硬件消隐。HC595内部有锁存功能,可以采用软件消隐,即通过程序关段电平或位电平的方法,也可以采用硬件消隐,即通过复位端清零来实现消隐,但得多用一个IO口。
二、“市场上大部分595都不能用”,这样的结论过于草率,在做案例时遇到问题,应该先考虑程序的问题。我个人做了很多学生竞赛的题目,多次购买并使用了很多的595芯片,驱动流水灯、数码管、LED点阵等,未遇到595损坏不能用的情况。
回复

使用道具 举报

51#
ID:1109793 发表于 2024-7-27 15:08 | 只看该作者
cy009 发表于 2024-7-27 12:55
一、消隐与否,是数码管决定,而不是芯片决定。凡是使用动态扫描的多位数码管显示,都必须消隐。HC164因 ...

可能还是我水平太菜,尝试各种方法,不好使的就是不好使。只用一片都没有问题。级联就各种奇怪现象。用价格较高的就没问题。实际上在嘉立创买过一种,那个LOGO我以前没用过,也就那样吧。级联偶尔也会出现不该有的输出跳动一下。
回复

使用道具 举报

52#
ID:491577 发表于 2024-7-29 12:06 | 只看该作者
595的额定电流为35ma,大部分应用都是不加限流电阻的,所以595位电流是大于35ma的,短时间不断刷595是没有问题的,如果因为程序卡住595刷新不及时造成某一位长时间超电流导通就会烧595,楼主发现数码管闪烁就是刷新不及时的表现,楼主的程序效率太低,无法及时刷新595造成的,要改程序提高效率。如果楼主在8个595段码脚加上300欧姆以上的限流电阻保证大部分595都好用了。595数据可以同步刷新所以不需要消隐。
回复

使用道具 举报

53#
ID:1110448 发表于 2024-7-29 14:46 | 只看该作者
27位8段是216段,开方是14.9,不用开方也知道接近256,就是16*16,所以用4片就可以了;
如果不想用4片,也要用少的行列值分频吧,,用8C * 32S 可以降低要求了,其实总数据量是差不多的,只是降低了中断次数
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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