基于单片机门电路测试

一、简介

        使用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显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值