一、简介
使用stc89c52为核心。功能为检测门电路,仿真中没有集成门芯片,所以此程序只可以测试门电路而不是集成门。目前仅支持7400、7404、7432后续有时间我可以继续设计更多门电路的检测。如果需要源码后续我会分享出来。
二、电路代码驱动
1、数码管使用74hc573锁存器驱动
sbit C1=P3^2; //数码管驱动芯片控制端
sbit C2=P3^3;
sbit C3=P3^4;
sbit C4=P3^5;
2、两个LED指示灯
sbit LED_Good = P3^6; //正常指示灯
sbit LED_Bad = P3^7; //错误指示灯
3、两个按键
sbit KEY_Choose = P3^0; // 选择检测芯片
sbit KEY_Begin = P3^1; // 确定选择的芯片
4、单片机对门电路检测信号输入输出
sbit OutPutOne = P1^0; //单片机信号输出1
sbit OutPutTow = P1^1; //单片机信号输出2
sbit InPut = P1^2; //单片机信号输入
三、程序分析
1、数码管驱动程序
void SEG_Def ()
{
C1=C2=C3=C4=0;
P0 = 0x40;
C1 =C2 =C3 =C4 =1;
delay (10);
C1 =C2 =C3 =C4 =1;
}
void SEG_7400 ()
{
C1=C2=C3=C4=0;
P0 = 0x07;
C1 = 1; delay (10); C1 = 0;
P0 = 0x66;
C2 = 1; delay (10); C2 = 0;
P0 = 0x3f;
C3 =C4 =1; delay (10); C3 =C4 =0;
}
void SEG_7404 ()
{
C1=C2=C3=C4=0;
P0 = 0x07;
C1 = 1; delay (10); C1 = 0;
P0 = 0x66;
C2 = 1; delay (10); C2 = 0;
P0 = 0x3f;
C3 = 1; delay (10); C3 = 0;
P0 = 0x66;
C4 = 1; delay (10); C4 = 0;
}
void SEG_7432 ()
{
C1=C2=C3=C4=0;
P0 = 0x07;
C1 = 1; delay (10); C1 = 0;
P0 = 0x66;
C2 = 1; delay (10); C2 = 0;
P0 = 0x4f;
C3 = 1; delay (10); C3 = 0;
P0 = 0x5b;
C4 = 1; delay (10); C4 = 0;
}
2、LED指示程序
/********************************
函数名:LED指示
********************************/
//门电路正常提示//
void LED_normal ()
{
unsigned int i;
for (i=0;i<4;i++)
{
LED_Good = 1; delay_slow ();
LED_Good = 0; delay_slow ();
}
}
//门电路错误提示//
void LED_error ()
{
unsigned int i;
for (i=0;i<4;i++)
{
LED_Bad = 1; delay_slow ();
LED_Bad = 0; delay_slow ();
}
}
3、开始选择菜单程序
/****************************************
函数名:一级选择菜单函数
功能:循环检测按键并执行菜单选择的功能
*****************************************/
void MenuChoose ()
{
while (1)
{
if (KEY_Choose == 0)
{
delay (300);
if (KEY_Choose == 1)
{
//控制范围//
if (MenuData == 4)
{MenuData = 1;}
else {MenuData=MenuData+1;}
switch (MenuData)
{
case 1:SEG_7400 ();break;
case 2:SEG_7404 ();break;
case 3:SEG_7432 ();break;
}
}
}
if (MenuData==1&&KEY_Begin==0)
{
Begin_Carry_7400 ();
}
if (MenuData==2&&KEY_Begin==0)
{
Begin_Carry_7404 ();
}
if (MenuData==3&&KEY_Begin==0)
{
Begin_Carry_7432 ();
}
}
}
4、门电路检测程序
/********************************
函数名:开始执行门电路检测
********************************/
void Begin_Carry_7400 ()
{
delay_slow();
CheckStatus = 0;
OutPutOne = 0; OutPutTow = 0;
if (InPut == 0)
{CheckStatus = 0; LED_error (); }
else if (InPut == 1) {CheckStatus++;}
delay_slow();
OutPutOne = 0; OutPutTow = 1;
if (InPut == 0)
{CheckStatus = 0; LED_error (); }
else if (InPut == 1) {CheckStatus++;}
delay_slow();
OutPutOne = 1; OutPutTow = 0;
if (InPut == 0)
{CheckStatus = 0; LED_error (); }
else if (InPut == 1) {CheckStatus++;}
delay_slow();
OutPutOne = 1; OutPutTow = 1;
if (InPut == 1)
{CheckStatus = 1; LED_error (); }
else if (InPut == 0) {CheckStatus++;}
if (CheckStatus == 4) {LED_normal (); }
}
四、仿真说明
1、开始仿真
2、点击选择按钮选择想要检测的门电路
3、在选择开关选择接入待测门电路
4、点击开始执行按钮开始检测并输出状态由LED显示