找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 533|回复: 15
收起左侧

单片机动态显示数码管可以用三极管8550来控制公共端吗

[复制链接]
ID:1091094 发表于 2024-1-13 16:23 | 显示全部楼层 |阅读模式
屏幕截图 2024-01-13 161502.png
我根据这图在Proteus上面画了仿真,由于没有8550这个型号的三极管就随便用了个管子,发现根本不行。
屏幕截图 2024-01-13 161231.png

我想显示34,给我显示了99.
我觉得可能是三极管的频率不够,所以将低了频率,还是不行。
  1. #include<reg52.h>

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. sbit smg1=P2^5;
  5. sbit smg2=P2^4;

  6. u8 gsmg_code[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};


  7. void delay_10us(u16 ten_us)
  8. {
  9.         while(ten_us--);        
  10. }


  11. void main()
  12. {
  13.         u8 i=0;
  14.         while(1)
  15.         {
  16.                   P1=gsmg_code[3];
  17.                   smg1=0;
  18.                         smg2=1;
  19.                         delay_10us(5000);
  20.                         P1=0XFF;
  21.                         P1=gsmg_code[4];
  22.                   smg1=1;
  23.                         smg2=0;
  24.                         delay_10us(5000);
  25.                   P1=0XFF;
  26.         }
  27. }
复制代码

感觉还是频率的问题,如果用真的8550,可以吗?
因为没有实物,也是不了。
我用单片机直接连公共端控制的时候,是可以的。
回复

使用道具 举报

ID:883242 发表于 2024-1-13 17:17 | 显示全部楼层
盲猜你的Proteus模型用错了。

电路上RN3两端电压,从P1.7~P1.0就是十六进制0x9,二进制1001 1001,你注意到没有?二进制8位里面有4位高,4位低。

而显示的7段码“9”有6个高2个低,或者逻辑相反有有2个高6个低,绝对不可能是4高4低!

那么问题的原因就显而易见了。

你用的不是一般的7段数码管,而是内置译码的数码管,把你给的0x9电平翻译成“9”显示出来了。
回复

使用道具 举报

ID:213173 发表于 2024-1-13 21:43 | 显示全部楼层
无标题.jpg


电路和代码都没有问题,是仿真用的三极管不能截止,导致两个数码管同时交替显示3和4,笔画叠加在一起就成99。可以用反相器代替三极管就可以正常显示。
回复

使用道具 举报

ID:634587 发表于 2024-1-14 11:17 | 显示全部楼层
三极管的开关频率应该可以到Mhz以上吧,再不行也可以试试用MOS管。
回复

使用道具 举报

ID:883242 发表于 2024-1-14 12:41 | 显示全部楼层
wulin 发表于 2024-1-13 21:43
电路和代码都没有问题,是仿真用的三极管不能截止,导致两个数码管同时交替显示3和4,笔画叠加在一起 ...

你的解释与他的硬件图纸中七段数码管的引脚电平状态不符。
回复

使用道具 举报

ID:517951 发表于 2024-1-14 13:15 | 显示全部楼层
可以用8550控制COM端, 只不过是高电平截止, 低电平导通.
回复

使用道具 举报

ID:213173 发表于 2024-1-14 14:28 | 显示全部楼层
Hephaestus 发表于 2024-1-14 12:41
你的解释与他的硬件图纸中七段数码管的引脚电平状态不符。

你哪来的自信?如果会玩Proteus,按楼主的电路和代码验证一下就懂了。图中数码管明显有DP端。共阳段码“4”=0x99=10011001。怎么绝对不可能是4高4低!内置译码的数码管??想多了吧。
回复

使用道具 举报

ID:1091094 发表于 2024-1-15 10:02 | 显示全部楼层
wulin 发表于 2024-1-13 21:43
电路和代码都没有问题,是仿真用的三极管不能截止,导致两个数码管同时交替显示3和4,笔画叠加在一起 ...

不会把,为什么不能截止?
因为我让基极悬空,这肯定是截止了吧。
截止时很重要的功能呀,Proteus这个功能都不给吗?那么说现实中应该可以吧。频率应该够。我查了有十几Mhz。
回复

使用道具 举报

ID:1091094 发表于 2024-1-15 10:05 | 显示全部楼层
rayin 发表于 2024-1-14 13:15
可以用8550控制COM端, 只不过是高电平截止, 低电平导通.

这就是啊,三极管控制公共端啊,很明显,你看一下就知道。
回复

使用道具 举报

ID:275826 发表于 2024-1-15 11:02 | 显示全部楼层
PNP三极管C极接个下拉电阻就好了
回复

使用道具 举报

ID:213173 发表于 2024-1-15 15:13 | 显示全部楼层
3038838599 发表于 2024-1-15 10:02
不会把,为什么不能截止?
因为我让基极悬空,这肯定是截止了吧。
截止时很重要的功能呀,Proteus这个 ...

你把延时加一个0,delay_10us(50000);就能看明白了。10楼的建议很好。
回复

使用道具 举报

ID:1091094 发表于 2024-1-15 15:19 | 显示全部楼层
tyrl800 发表于 2024-1-15 11:02
PNP三极管C极接个下拉电阻就好了

真的 马上就OK了,不明觉厉。
大佬大佬
大佬 我想问问实物不加下拉电阻可以吗?
回复

使用道具 举报

ID:161164 发表于 2024-1-15 15:21 | 显示全部楼层
第27,32行的消影消了个寂 2024-01-15_151929.png
回复

使用道具 举报

ID:1091094 发表于 2024-1-15 16:25 | 显示全部楼层
lkc8210 发表于 2024-1-15 15:21
第27,32行的消影消了个

哈哈哈  我看了一下,确实是这样
普中的教程视频里面也是这样子消影的。
然后你标的语句的顺序其实是可以的,在物理成面来说,因为时间很快两条指令的时间,观感上面是不影响的

但是你的想法确实是对的。严谨。
回复

使用道具 举报

ID:427868 发表于 2024-1-15 17:07 | 显示全部楼层
       在切换两位数码管轮流显示时,并没有先关闭上一位,延时时间又太短,频繁切换显示就会每位3与4有重复显示,造成都是显示99,如果是实际电路会看到笔画明暗程度差别较大。
      修改一下,试试。
  1. while(1)
  2.         {
  3.                   P1=gsmg_code[3];
  4.                   smg1=0;
  5.                   delay_10us(5000);
  6.                   P1=0XFF;
  7.                   smg1=1;
  8.                   P1=gsmg_code[4];
  9.                   smg2=0;
  10.                   delay_10us(5000);
  11.                   P1=0XFF;
  12.                   smg2=1;
  13.         }
复制代码
回复

使用道具 举报

ID:1034262 发表于 2024-1-15 19:04 | 显示全部楼层
当然可以,经常用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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