找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3505|回复: 10
打印 上一主题 下一主题
收起左侧

麻烦有用单片机+74HC154和74HC595做过点阵驱动的朋友进来看看

[复制链接]
跳转到指定楼层
楼主
20黑币
我现在做16*32的点阵,电路找的资料自己搭建的,点阵行是阳极,用74hc154加PNP三极管做驱动,列是阴极,用74hc595加330Ω的限流电阻做驱动。现在在仿真的时候,比如我要点亮第4行第1列的led灯,但第16行第1列的led也会发光,修改程序选择其他行的led,16行总是会亮。我现在154的地址端接的是P0口,是16行常亮,我如果接到P1口就是第1行常亮。
仿真结果如图,最右下角驱动第16行的三极管的集电极为什么会一直是高电平呢,应该是没有导通的才对吧。

程序如下
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit DS=P1^0;
  5. sbit SH=P1^1;
  6. sbit ST=P1^2;
  7. sbit E1=P1^3;

  8. //列选码,595发送数据
  9. void Sendbyte(uchar dat1,uchar dat2,uchar dat3,uchar dat4)//高八,次高八,次低八,低八
  10. {
  11.         uchar i;
  12.         ST=0;
  13.                         for(i=0;i<8;i++)
  14.                   {
  15.                                         SH=0;
  16.                                                  if(dat4&0x01)
  17.                                                          DS=1;
  18.                                                  else
  19.                                                          DS=0;
  20.                                          SH=1;
  21.                                          dat4=dat4>>1;
  22.                   }
  23.                         for(i=0;i<8;i++)
  24.                         {
  25.                                                 SH=0;
  26.                                                         if(dat3&0x01)
  27.                                                          DS=1;
  28.                                                  else
  29.                                                          DS=0;
  30.                                          SH=1;
  31.                                          dat3=dat3>>1;
  32.                   }
  33.                         for(i=0;i<8;i++)
  34.                         {
  35.                                          SH=0;
  36.                                                  if(dat2&0x01)
  37.                                                          DS=1;
  38.                                                  else
  39.                                                          DS=0;
  40.                                          SH=1;
  41.                                          dat2=dat2>>1;
  42.                         }
  43.                         for(i=0;i<8;i++)
  44.                         {
  45.                                          SH=0;
  46.                                                  if(dat1&0x01)
  47.                                                          DS=1;
  48.                                                  else
  49.                                                          DS=0;
  50.                                          SH=1;
  51.                                          dat1=dat1>>1;
  52.                         }
  53.         ST=1;
  54. }

  55. void main()
  56. {
  57.                 E1=0;//打开154
  58.                 P0=3;//行选
  59.                 Sendbyte(0x7f,0xff,0xff,0xff);//列选
  60. }
复制代码



1.png (210.98 KB, 下载次数: 93)

1.png

proteus仿真.zip

86.52 KB, 下载次数: 23

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-7-25 11:30 | 只看该作者
笑而不答,看看热闹而已。不过还是说我喜欢的方案,若是我设计绝不会使用这种电路,还是我认为的使用锁存器方便许多,从电路与程序上都是。
回复

使用道具 举报

板凳
ID:332444 发表于 2020-7-25 11:36 | 只看该作者
16*32使用锁存器不但电路和程序简单还能节省芯片使用数量。
回复

使用道具 举报

地板
ID:710261 发表于 2020-7-25 12:33 | 只看该作者
xianfajushi 发表于 2020-7-25 11:36
16*32使用锁存器不但电路和程序简单还能节省芯片使用数量。

如果全用74hc595的话确实程序电路简单得多,但是我看网上资料有用我帖子里这种电路实现的,可是我仿真连一个led点亮都不行,如果您知道原因的话麻烦能告诉我一下为什么吗
回复

使用道具 举报

5#
ID:332444 发表于 2020-7-25 16:03 | 只看该作者
抱歉得很,目前为止还真没写过595,不过可随时学,也看过595的一些例子代码,不难,只是要实现你这个点阵还用不着595,至少我是这样认为的,因此,对这题实无兴致。
回复

使用道具 举报

6#
ID:332444 发表于 2020-7-26 05:50 | 只看该作者
或许使用2片锁存器就能实现。
回复

使用道具 举报

7#
ID:332444 发表于 2020-7-26 07:04 | 只看该作者
使用二极管三极管搭建门电路配合2片锁存器按道理是可以的,当然使用门集成比较方便。
回复

使用道具 举报

8#
ID:332444 发表于 2020-7-26 07:32 | 只看该作者
用我写过的16*16例子可以推导出来,这时就需要用到逻辑电路基础知识了,因此想起了论坛一帖是否需要学数字电路就有了例证,有无数字电路基础在这时会显示出区别了。
回复

使用道具 举报

9#
ID:710261 发表于 2020-7-27 11:53 | 只看该作者
xianfajushi 发表于 2020-7-26 07:32
用我写过的16*16例子可以推导出来,这时就需要用到逻辑电路基础知识了,因此想起了论坛一帖是否需要学数字 ...

谢谢朋友,问题我解决了原因应该是仿真的问题,仿真时使用一个非门只要逻辑正确就行,仿真不需要搭建三极管,但是实物是需要的。我还是一个没啥基础的小白,你说的门电路这些我不是很清楚,我去学习一下
回复

使用道具 举报

10#
ID:332444 发表于 2020-7-28 09:47 | 只看该作者
在蛋骗鸡电路中搭建门电路其实很简单电阻和二极管就能实现而且是可任意的是一种方案,其实要实现16*32有很多方案,直接使用3片锁存器是最简便可靠的方案,虽然扫描会加倍,估计时间还是能安排好的,若是16*64那时间安排就难说了,可能要采取并行显示的方式,而显示数据的方式也有不同方案,如显示数据加倍则扫描次数可少。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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