51不能直接给数码管供电的(电流太小)。分二种情况说:
1.当I/O接的是共阴极数码管时,直接并联一个1K的排阻到数码管的控制角,直接给数码管的七个段位供电就可以了。
2.当I/O接的是共阳极数码管时,要从位选上共电,如图中:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。
使用5V供电,89C51单片机最好是驱动共阳的数码管。每个I/O口需要串接一个200~510欧的电阻,上拉电阻不接。
要直接驱动的话,最好是共阳的。因为单片机I/O口负载电流有限。需要加下限流电阻的。
接一个数码管最好用共阳的,让单片机送出低电平点亮相应字段,因为51的输出高电平电流有限,驱不动,低电平的灌电流还好一些,具体用法是数码管共阳的管脚直接接电源VCC,剩下的八个管脚都通过1K的电阻接到一组IO口上,如果是P0口,每个管脚要接上10K的上拉电阻,P1,2,3,不用上拉。
可以采用动态扫描,不止驱动一个七段数码管,4个都没有问题
公共端需要IO口通过三极管驱动,不然负载太大IO口承受不住,其他端口可以直接IO口驱动不过要加适当的电阻用于限流