问题:用74HC138做3-8译码器可以送出8位数管的位码,但如果要用16只数码管该怎样做呢?请懂单片机和用过74HC138或其它译码芯片的指教了·感谢了先!悬赏分:10-解决时间:2010-8-3003:02----------------------------------------最佳答案:可以用74HC154(4-16译码器)来解决。如果使用两片74HC138,也可以组成一个4-16译码器。电路十分简单,可见插图。设计PCB板的时候,用两片芯片,有时会比用一片芯片(74HC154),更容易布线。----------------------------------------回答者:做而论道-十四级2010-8-2623:19提问者对于答案的评价:感谢!也谢谢前两位同学!因为我手上138比较多,所以考虑用这个组合下。原题网址:后记:使用一块74HC154,就是把16条译码输出引线都集中在一块芯片,然后还需要把它们再分散到16个目标地点。这在PCB上布线的时候,十分的不便。用两个74HC138芯片,就方便多了。呵呵,必须是有实践经验的人,才能理解这个观点。另外,做而论道还用三块74HC138芯片设计过5-24的译码电路,电路也十分简单,可见下图。当时是用在24×192点阵的LED显示屏幕上,分成24行显示8个24×24点阵的汉字。/*点阵显示屏为16*64条屏,可级联,上下屏由两个74HC138分别控制1/8扫*//*屏接口为20针,1:A0,3:A1,5:A2,7:下半屏,9:RCK,11:SCK,13:SI,15:下一屏接口17:下半屏,19,2-20:地*//*李于浙江2011.5.3*/#includereg52.h#defineucharunsignedchar#defineuintunsignedint/*************************************************/sbithc595_SI=P0^0;//串行移位数据输入sbithc595_SCK=P0^1;//595移位时钟,上升沿触发sbithc595_RCK=P0^2;//595数据锁存信号,上升沿触发,输出锁存器控制sbitLS138_A0=P1^0;//行选择1-8行sbitLS138_A1=P1^1;//行选择sbitLS138_A2=P1^2;//行选择sbitLS138_G_S=P1^3;//上半屏显示允许控制信号端口,138行扫描使能端,高电平有效sbitLS138_G_X=P1^4;//下半屏显示允许控制信号端口,138行扫描使能端,高电平有效//11110000上屏第1行,且亮,下屏全不亮0xf0//11111000voiddelay(uintdt){ucharbt;for(;dt;dt--)for(bt=0;bt200;bt++);}/**********************74HC595驱动************************/voidhc595_write_data(uchardata_ds){ucharn_bit;//n位for(n_bit=0;n_bit8;n_bit++)//1个字节{hc595_SCK=0;if(data_ds&0x01)//低位在前{hc595_SI=1;}else{hc595_SI=0;}data_ds=data_ds1;//数据在上升沿移位hc595_SCK=1;delay(1);}}/*************74HC595数据锁存输出*********/voidhc595_display(){hc595_RCK=0;delay(1);hc595_RCK=1;}ucharsw[16]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,};//138的驱动代码,根据138的真值表计算而来。/*unsignedcharcodehanzi[][32]={/*--横向取模文字黑色文字:学--*///符号;一定不能少,否则很多地方出错*/unsignedcharcodehanzi[][32]={/*--横向取模文字黑色文字:学--*//*--黑体12;此字体下对应的点阵为:宽x高=16x16--*/0x00,0x00,0xCC,0x39,0xDC,0x1D,0xB8,0x1F,0xFF,0x7F,0xFE,0x7F,0x06,0x60,0xF8,0x1F,0x00,0x1E,0x80,0x07,0x80,0x03,0xFF,0xFF,0x80,0x03,0x80,0x03,0xE0,0x03,0xE0,0x01,/*--文字:无--*//*--黑体12;此字体下对应的点阵为:宽x高=16x16--*/0x00,0x00,0x00,0x00,0xFC,0x3F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFE,0x7F,0xC0,0x07,0xE0,0x07,0xE0,0x07,0x70,0x07,0x78,0xE7,0x3C,0xE7,0x1F,0x7F,0x06,0x00,/*--文字:止--*//*--黑体12;此字体下对应的点阵为:宽x高=16x16--*/0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x98,0x03,0x98,0x7F,0x98,0x03,0x98,0x03,0x98,0x03,0x98,0x03,0x98,0x03,0x98,0x03,0xFF,0xFF,0xFF,0xFF,0x00,0x00,/*--文字:境--*//*--黑体12;此字体下对应的点阵为:宽x高=16x16--*/0x00,0x00,0x0C,0x06,0xEC,0x7F,0x8C,0x1D,0x8C,0x1F,0xFF,0xFF,0x0C,0x00,0xEC,0x3F,0xEC,0x30,0xEC,0x3F,0xFC,0x30,0xFE,0x3F,0x87,0x0F,0xC0,0xEF,0xF8,0xFC,0x30,0x00};voidmain(void){uchari;LS138_G_S=1;//关显示LS138_G_X=1;//关显示while(1){for(i=0;i16;i++)//上半屏8*8=64个移位时钟SCK后,第1-8行待显示的数据全移入595中,使能G接地为常开,{hc595_write_data(hanzi[0][i*2]);hc595_write_data(hanzi[0][i*2+1]);hc595_write_data(hanzi[1][i*2]);hc595_write_data(hanzi[1][i*2+1]);hc595_write_data(hanzi[2][i*2]);hc595_write_data(hanzi[2][i*2+1]);hc595_write_data(hanzi[3][i*2]);hc595_write_data(hanzi[3][i*2+1]);hc595_display();//锁存后存入595中P1=sw;//选择屏第i+1行,点阵条屏共16行第i+1行点亮//delay(1);}}}