2011年绍兴文理学院校大学生电子设计竞赛
if(key1==0) {
if(flag==4) {
flag=0; }
flag++; switch(flag) {
case 1:charfill(' '); putstrxy(0,0,\
case 2:charfill(' '); putstrxy(0,0,\ case 3:charfill(' '); putstrxy(0,0,\ case 4:charfill(' '); putstrxy(0,0,\ }
} }
if(flag==1&&key2==0) {
for(i=0;i<4;i++) {
input1=LS00[i][0]; input2=LS00[i][1]; delay(5);
output1=input1&0x3f; output2=input2&0x3f;
if(output1!=LS00[i][2]||output2!=LS00[i][3]) {
putstrxy(0,1,\,BAD CHIP!\ flag2=0; break; }
if(output1==LS00[i][2]&&output2==LS00[i][3]) {
flag2++; } }
if(flag2==4) {
putstrxy(0,1,\ flag2=0; } }
10
2011年绍兴文理学院校大学生电子设计竞赛
if(flag==2&&key2==0) {
for(i=0;i<2;i++) {
input1=LS04[i][0]; input2=LS04[i][1]; delay(5);
output1=input1&0x3f; output2=input2&0x3f;
if(output1!=LS04[i][2]||output2!=LS04[i][3]) {
putstrxy(0,1,\,BAD CHIP!\ flag2=0; break; }
if(output1==LS04[i][2]&&output2==LS04[i][3]) {
flag2++; } }
if(flag2==2) {
putstrxy(0,1,\ flag2=0; } }
if(flag==3&&key2==0) {
for(i=0;i<16;i++) {
input1=LS20[i][0]; input2=LS20[i][1]; delay(5);
output1=input1&0x3f; output2=input2&0x3f;
if(output1!=LS20[i][2]||output2!=LS20[i][3]) {
putstrxy(0,1,\,BAD CHIP!\ flag2=0; break; }
if(output1==LS20[i][2]&&output2==LS20[i][3]) {
flag2++;
11
2011年绍兴文理学院校大学生电子设计竞赛
} }
if(flag2==16) {
putstrxy(0,1,\ flag2=0; } }
if(flag==4&&key2==0)
} }
{
for(i=0;i<4;i++) {
input1=LS86[i][0]; input2=LS86[i][1]; delay(5);
output1=input1&0x3f; output2=input2&0x3f;
if(output1!=LS86[i][2]||output2!=LS86[i][3]) {
putstrxy(0,1,\,BAD CHIP!\ flag2=0; break; }
if(output1==LS86[i][2]&&output2==LS86[i][3]) {
flag2++; } }
if(flag2==4) {
putstrxy(0,1,\ flag2=0; } } if(key3==0) {
k=detect(); charfill(' ');
putstrxy(0,0,\ putstrxy(2,5,name[k]); } 12
2011年绍兴文理学院校大学生电子设计竞赛
//延时函数
void delay(unsigned int z) {
unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
/*============================14脚芯片识别函数=======================*/ unsigned char detect() //14脚芯片识别函数 {
unsigned char i,output1,output2;
//7474的检测
P1=0xff; //初始化测试端口 P2=0xff;
input1=0x3b; input2=0x39; delay(5);
input1=0x3f; //上升沿 input2=0x3d; delay(5);
output1=input1&0x3f; output2=input2&0x3f;
if(output1==0x1f&&output2==0x2d) {
return (4); } //7400/04/20/86的自动检测 P1=0xff; //初始化测试端口 P2=0xff;
for(i=0;i input1=IC[i][0]; input2=IC[i][1]; delay(5); output1=input1&0x3f; //将芯片逻辑结果input1通过&0x3f取出 output2=input2&0x3f; if(output1==IC[i][2]&&output2==IC[i][3]) { input1=IC[i][4]; input2=IC[i][5]; delay(5); 13 2011年绍兴文理学院校大学生电子设计竞赛 output1=input1&0x3f; output2=input2&0x3f; if(output1==IC[i][6]&&output2==IC[i][7]) { return i; } } } key4=0; //检测7492时,先用继电器江电源供电引脚切换 P1=0xff; //初始化测试端口 P2=0xff; input1=0x3f; //7492的检测 input2=0x3f; delay(5); output1=input1&0x3f; output2=input2&0x3f; if(output1==0x3f&&output2==0x01) { delay(100);key4=1;return (5); } delay(100); key4=1; //测试结束,将电源供电引脚切换回原状态 return (6); } //------------------------------------------------------------------------------- void charfill(unsigned char c) //整屏显示A代表的ASCII字符子程序 { for(CXPOS=CYPOS=0;1;) { putchars(c); //定位写字符 charcursornext(); //置字符位置为下一个有效位置 if((CXPOS==0) && (CYPOS==0)) break; } } //子程序名称:void putstrxy(unsigned char cx,unsigned char cy,unsigned char *s). //功能:在(cx,cy)字符位置写字符串. //------------------------------------------------------------------------------- void putstrxy(unsigned char cx,unsigned char cy,unsigned char code *s) { //在(cx,cy)字符位置写字符串子程序 CXPOS=cx; //置当前X位置为cx CYPOS=cy; //置当前Y位置为cy for(;*s!=0;s++) //为零表示字符串结束,退出 { putchars(*s); //写1个字符 charcursornext(); //字符位置移到下一个 } 14