?? 22.c
字號:
void ClockUp19(void)
{
P1_4=0;
_nop_();
P1_4=1;
_nop_();
}
void ClockDown19(void)
{
P1_3=0;
_nop_();
P1_3=1;
_nop_();
}
/*****************************************************/
/* IC74192檢測程序 */
/*****************************************************/
uchar IC74192(void)
{
P1=0x7f;
P0=0xff;
P0_2=1;
if(Output19()!=0)
return 0;
P0_2=0;
P0_5=0;
for(i=0;i<16;i++)
{
Input19(i);
if(Output19()!=i)
return 0;
}
P0_2=0;
P0_5=1;
P0_2=1;
_nop_();
P0_2=0;
for(i=0;i<9;i++)
{
if(Output19()!=i)
return 0;
ClockUp19();
}
P1_4=0;
if(P0_4!=0)
return 0;
P1_4=1;
_nop_();
P1_3=0;
_nop_();
if(P0_3!=0)
return 0;
P1_3=1;
for(i=10;i>0;i--)
{
if(Output19()!=(i-1))
return 0;
ClockDown19();
}
return 1;
}
/*****************************************************/
/* IC74193檢測程序 */
/*****************************************************/
uchar IC74193(void)
{
P1=0x7f;
P0=0xff;
P0_2=1;
if(Output19()!=0)
return 0;
P0_2=0;
P0_5=0;
for(i=0;i<16;i++)
{
Input19(i);
if(Output19()!=i)
return 0;
}
P0_2=0;
P0_5=1;
P0_2=1;
_nop_();
P0_2=0;
for(i=0;i<15;i++)
{
if(Output19()!=i)
return 0;
ClockUp19();
}
P1_4=0;
if(P0_4!=0)
return 0;
P1_4=1;
_nop_();
P1_3=0;
_nop_();
if(P0_3!=0)
return 0;
P1_3=1;
for(i=16;i>0;i--)
{
if(Output19()!=(i-1))
return 0;
ClockDown19();
}
return 1;
}
/****************************************************/
/* IC74161 檢測信號設(shè)置 */
/* 輸入輸出信號設(shè)置 */
/****************************************************/
void Input161(unsigned char input)
{
P1_5=input&0x08;
P1_4=input&0x04;
P1_3=input&0x02;
P1_2=input&0x01;
}
unsigned char Output161(void)
{
unsigned char output=0;
output=((P0&0x3c)>>2);
}
void ClockU161(void)
{
P1_1=0;
_nop_();
_nop_();
P1_1=1;
_nop_();
_nop_();
}
uchar IC74161(void)
{
uchar temp;
P1=0x7f;
P0=0xff;
P1_0=0;
if(Output161()!=0)
return 0;
P1_0=1;
P0_7=0;
for(i=0;i<16;i++)
{
Input161(i);
ClockU161();
if(Output161()!=i)
return 0;
}
temp=Output161();
P1_6=0;
ClockU161();
if(temp!=Output161())
return 0;
P0_6=0;
ClockU161();
if(temp!=Output161())
return 0;
P1=0x7f;
P0=0xff;
_nop_();
P1_0=0;
_nop_();//清0
P1_0=1;
for(i=0;i<15;i++)
{
if(Output161()!=i)
return 0;
ClockU161();
}
if(P0_1!=1)
return 0;
ClockU161();
if(Output161()!=0)
return 0;
else
return 1;
}
/***************************************************/
/* 設(shè)置數(shù)碼管 */
/***************************************************/
void SetLED(unsigned char led0,unsigned char led1,unsigned char led2,unsigned char led3,unsigned char led4,unsigned char led5)
{
LED[0]=led0;
LED[1]=led1;
LED[2]=led2;
LED[3]=led3;
LED[4]=led4;
LED[5]=led5;
}
/***************************************************/
/* 自動檢測 */
/***************************************************/
unsigned char ICANY(void)
{
// unsigned char flag=0;
if(IC4001())
{
SetLED(10,10,4,0,0,1);
// flag=1;
return 1;
}
if(IC4011())
{
SetLED(10,10,4,0,1,1);
// flag=1;
return 1;
}
if(IC4030())
{
SetLED(10,10,4,0,3,0);
// flag=1;
return 1;
}
if(IC4071())
{
SetLED(10,10,4,0,7,1);
// flag=1;
return 1;
}
if(IC4069())
{
SetLED(10,10,4,0,6,9);
// flag=1;
return 1;
}
if(IC7420())
{
SetLED(10,10,7,4,2,0);
// flag=1;
return 1;
}
if(IC74138())
{
SetLED(10,7,4,1,3,8);
// flag=1;
return 1;
}
if(IC7442())
{
SetLED(10,10,7,4,4,2);
// flag=1;
return 1;
}
if(IC7474())
{
SetLED(10,10,7,4,7,4);
// flag=1;
return 1;
}
if(IC74112())
{
SetLED(10,7,4,1,1,2);
// flag=1;
return 1;
}
if(IC74192())
{
SetLED(10,7,4,1,9,2);
// flag=1;
return 1;
}
if(IC74193())
{
SetLED(10,7,4,1,9,3);
// flag=1;
return 1;
}
if(IC74161())
{
SetLED(10,7,4,1,6,1);
// flag=1;
return 1;
}
return 0;
}
/******************************************************************/
/* 手動檢測 按鈕0 改變芯片型號 */
/******************************************************************/
static void select(void) interrupt 0
{
EA=0;
//P2_7=1;
chip++;
if(chip==14)
chip=0;
switch(chip)
{
case 0:
SetLED(10,11,17,18,1,13);
break;//最后芯片
case 1:
SetLED(10,10,4,0,3,0);
break;//顯示芯片型號,等待中斷1,確定
case 2:
SetLED(10,10,4,0,6,9);
break;
case 3:
SetLED(10,7,4,1,3,8);
break;
case 4:
SetLED(10,10,4,0,1,1);
break;
case 5:
SetLED(10,10,4,0,7,1);
break;
case 6:
SetLED(10,10,7,4,2,0);
break;
case 7:
SetLED(10,10,7,4,4,2);
break;
case 8:
SetLED(10,10,4,0,0,1);
break;
case 9:
SetLED(10,10,7,4,7,4);
break;
case 10:
SetLED(10,7,4,1,1,2);
break;
case 11:
SetLED(10,7,4,1,9,2);
break;
case 12:
SetLED(10,7,4,1,9,3);
break;
case 13:
SetLED(10,7,4,1,6,1);
break;
}
EA=1;
}
/********************************************************************/
/* 手動檢測 按鈕1 確定芯片型號 */
/********************************************************************/
static void test(void) interrupt 2
{
unsigned char bool;
EA=0;
switch(chip)
{
case 0:
bool=ICANY();
break;
case 1:
bool=IC4030();
break;//確定后,轉(zhuǎn)到子函數(shù),執(zhí)行后得出BOOL的值跳到下面輸出信息
case 2:
bool=IC4069();
break;
case 3:
bool=IC74138();
break;
case 4:
bool=IC4011();
break;
case 5:
bool=IC4071();
break;
case 6:
bool=IC7420();
break;
case 7:
bool=IC7442();
break;
case 8:
bool=IC4001();
break;
case 9:
bool=IC7474();
break;
case 10:
bool=IC74112();
break;
case 11:
bool=IC74192();
break;
case 12:
bool=IC74193();
break;
case 13:
bool=IC74161();
break;
}
if(bool)
LED[0]=20; //PASS
else
LED[0]=15; //ERROR
P2_7=1;
EA=1;
}
int main()
{
chip=0;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
while(1)
{
/***************************************************/
/* 數(shù)碼管顯示 */
/***************************************************/
for(i=0;i<6;i++)
{
P3=flush[i];//點(diǎn)亮6個數(shù)碼管的位選
P2=seg[LED[i]];//給數(shù)碼管付初值
delay(50);//時間很短,同時顯示,等待中斷0
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -