用maxplus做,一片74192可以完成10计数,两片级联即可完成100计数,所以50计数用两片74192就可以了。具体:
(1) 计数时钟接第一片的减计数时钟输入端DN,同时加计数时钟输入UP和清零端CLR输入高电平,使第一片处于10进制减法计数状态

(2) 第一片的借位输出BON 连接到第二片的减计数时钟输入端DN,同时加计数时钟输入UP接高电平
(3) 74192有四个输出QD,QC,QB,QA,其中QD为最高位。把第二片的输出最高位QD,次低QB位接反相器后分别接到四输入与门的输入,剩下的次高位QC和最低位QA直接输入到 四输入与门中。接好四个输入后,把四输入与门的输出接到第二片的清零端CLR,形成反馈,使模值变为所需的50.
(4) 最后第二片的借位输出BON作为整个计数器的借位输出。
(5) 其他输入悬空,相当接高电位。
具体原理是第一片计数到10,并以其借位输出作为第二片的计数时钟。而第二片经反馈后只计数到5,两片级联相乘即得模值50的计数器。
先看仿真效果图,源代码如下,我仿真可以的,电路图要的话发给你
#include<reg51.h>?
#define?uchar?unsigned?char?
#define?uint?unsigned?int?
sbit?RED_A=P0^0;?//?﹁?ボ?
sbit?YELLOW_A=P0^1;?
sbit?GREEN_A=P0^2;?
sbit?RED_B=P0^3;?//玭ボ?
sbit?YELLOW_B=P0^4;?
sbit?GREEN_B=P0^5;?
uchar?Time_Count=0,Flash_Count=0,Operation_Type=1;?
//﹚?竟?0?い?ㄧ?
void?T0_INT()?interrupt?1?
{?
TL0=-50000/256;?
TH0=-50000%256;?
switch(Operation_Type)?
{?
case?1:?//?﹁蒓玭獹?5s?
RED_A=0;
YELLOW_A=0;
GREEN_A=1;
RED_B=1;
YELLOW_B=0;
GREEN_B=0;?
if(++Time_Count!=100)?return;?//5s?100*50ms?ち?
Time_Count=0;?

Operation_Type=2;?break;?
case?2:?//?﹁﹍
if(++Time_Count!=8)?return;?
Time_Count=0;?
YELLOW_A=~YELLOW_A;
GREEN_A=0;?
if(++Flash_Count!=10)?return;?//
Flash_Count=0;?
Operation_Type=3;?break;?
case?3:?//?﹁蒓玭獹?5s?
RED_A=1;
YELLOW_A=0;
GREEN_A=0;?
RED_B=0;
YELLOW_B=0;
GREEN_B=1;?
if(++Time_Count!=100)?return;?//5s?100*50ms?ち?
Time_Count=0;?
Operation_Type=4;?
case?4:?break;?//玭?﹍
if(++Time_Count!=8)?return;?
Time_Count=0;?
YELLOW_B=~YELLOW_B;GREEN_A=0;?
if(++Flash_Count!=10)?return;?//
Flash_Count=0;?
Operation_Type=1;?break;?
}?
}
//?祘? void?main()? {? TMOD=0x01;?


