一、设计要求:
主芯片:STM32F103R6
IC测试座:DIP18 (18个引脚)
有四只开关:分别为“向上选择”、“向下选择”、“确定”、“退出”
用一个LCD12864显示操作和结果的界面
二、展示内容:
LCD12864显示内容:
第一屏:见图 显示可检测的器件的列表,被选中的型号反白显示
第二屏:见图 标题为被检测的器件的型号+testing…,下面有两行,第一行显示器件是否完好,如果有故障,在第二排显示是哪个部件出现故障。最后一排有状态显示,三种内容,没有测量时显示“开始测量”,正在测量时显示“测量中…”,测量完成后,显示“测量结束”
三、操作说明:
(1)开机,显示第一屏
(2)按“向上选择”和“向下选择”,可以依次选中列表中的器件,再按下“确认”键,可以选中该器件,进入第二屏,最下显示“开始测量”
(3)按“确认”键,开始测量,测量完成后,最下显示“测量结束”,并把结果在第二行和第三行的提示后显示。
(4)按“退出”键,回到第一屏。
四、测试芯片:
(1)74HC00 四与非门
(2)74HC02 四或非门
(3)74HC04 六非门
五、效果展示:
部分代码展示(检测函数)(因水平有限,且半夜赶出来的,未优化代码,欢迎大佬指正哈)
u16 pinout[3][4]={{0xE493,0xEDB7,0xF6DB,0xDB6F},{0xE493,0xD24B,0xC927,0xDB6F},{0xEAAB,0xD557,0xEAAB,0xD557}};
int test[16];
void testing(int dis) //该函数为设置引脚电位函数
{
int i,flage;
for(flage=0;flage<4;flage++)
{
GPIO_Write(GPIOB,pinout[dis][flage]);
for(i=0;i<16;i++)
{
if(i<8)
{
IC74HC251_OE1_0;
IC74HC251_OE2_1;
}
else
{
IC74HC251_OE1_1;
IC74HC251_OE2_0;
}
if(i==0 || i==2 || i==4 ||i==6 || i==8 || i==10 || i==12 || i==14)
{
IC74HC251_S0_0;
}
else
{
IC74HC251_S0_1;
}
if(i==0 || i==1 || i==4 ||i==5 || i==8 || i==9 || i==12 || i==13)
{
IC74HC251_S1_0;
}
else
{
IC74HC251_S1_1;
}
if(i==0 || i==1 || i==2 ||i==3 || i==8 || i==9 || i==10 || i==11)
{
IC74HC251_S2_0;
}
else
{
IC74HC251_S2_1;
}
test
=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
}
compare(dis,flage);
}
}
int error[4][16];
int errpart[6];
void compare(int dis,int flage) //该函数为比对函数
{
int i,j,winflage=0,position=80;
u16 n=pinout[dis][flage];
int a[16];
for (i = 0; i != 16; ++i)
{
a = n % 2;
n /= 2;
}
for(i=0;i<16;i++)
{
if(test==a)
{
error[flage]=0;
}
else
{
error[flage]=1;
}
}
if(flage==3)
{
for(i=0;i<4;i++)
{
for(j=0;j<16;j++)
{
if(error[j]==0)
{
winflage++;
if(winflage==64)
{
LCD_DIS_Char(3,50,"TRUE",MIDDLE,0);
}
}
else
{
if(dis==2)
{
if(j<5 && j>2){errpart[0]=1;}
if(j<7 && j>4){errpart[1]=1;}
if(j<9 && j>6){errpart[2]=1;}
if(j<11 && j>8){errpart[3]=1;}
if(j<13 && j>10){errpart[4]=1;}
if(j<15 && j>12){errpart[5]=1;}
}
else
{
if(j<6 && j>2){errpart[0]=1;}
if(j<9 && j>5){errpart[1]=1;}
if(j<12 && j>8){errpart[2]=1;}
if(j<15 && j>11){errpart[3]=1;}
}
}
}
}
if(winflage!=64){
LCD_DIS_Char(4,50,"FLASE",MIDDLE,0);
j=0;
for(i=0;i<6;i++)
{
if(errpart==1)
{
position=position+(i-j)*8;
LCD_DIS_Number(6,position,i+1,MIDDLE);
}else
j++;
}
}
}
}
一、设计要求:
主芯片:STM32F103R6
IC测试座:DIP18 (18个引脚)
有四只开关:分别为“向上选择”、“向下选择”、“确定”、“退出”
用一个LCD12864显示操作和结果的界面
二、展示内容:
LCD12864显示内容:
第一屏:见图 显示可检测的器件的列表,被选中的型号反白显示
第二屏:见图 标题为被检测的器件的型号+testing…,下面有两行,第一行显示器件是否完好,如果有故障,在第二排显示是哪个部件出现故障。最后一排有状态显示,三种内容,没有测量时显示“开始测量”,正在测量时显示“测量中…”,测量完成后,显示“测量结束”
三、操作说明:
(1)开机,显示第一屏
(2)按“向上选择”和“向下选择”,可以依次选中列表中的器件,再按下“确认”键,可以选中该器件,进入第二屏,最下显示“开始测量”
(3)按“确认”键,开始测量,测量完成后,最下显示“测量结束”,并把结果在第二行和第三行的提示后显示。
(4)按“退出”键,回到第一屏。
四、测试芯片:
(1)74HC00 四与非门
(2)74HC02 四或非门
(3)74HC04 六非门
五、效果展示:
部分代码展示(检测函数)(因水平有限,且半夜赶出来的,未优化代码,欢迎大佬指正哈)
u16 pinout[3][4]={{0xE493,0xEDB7,0xF6DB,0xDB6F},{0xE493,0xD24B,0xC927,0xDB6F},{0xEAAB,0xD557,0xEAAB,0xD557}};
int test[16];
void testing(int dis) //该函数为设置引脚电位函数
{
int i,flage;
for(flage=0;flage<4;flage++)
{
GPIO_Write(GPIOB,pinout[dis][flage]);
for(i=0;i<16;i++)
{
if(i<8)
{
IC74HC251_OE1_0;
IC74HC251_OE2_1;
}
else
{
IC74HC251_OE1_1;
IC74HC251_OE2_0;
}
if(i==0 || i==2 || i==4 ||i==6 || i==8 || i==10 || i==12 || i==14)
{
IC74HC251_S0_0;
}
else
{
IC74HC251_S0_1;
}
if(i==0 || i==1 || i==4 ||i==5 || i==8 || i==9 || i==12 || i==13)
{
IC74HC251_S1_0;
}
else
{
IC74HC251_S1_1;
}
if(i==0 || i==1 || i==2 ||i==3 || i==8 || i==9 || i==10 || i==11)
{
IC74HC251_S2_0;
}
else
{
IC74HC251_S2_1;
}
test
=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
}
compare(dis,flage);
}
}
int error[4][16];
int errpart[6];
void compare(int dis,int flage) //该函数为比对函数
{
int i,j,winflage=0,position=80;
u16 n=pinout[dis][flage];
int a[16];
for (i = 0; i != 16; ++i)
{
a = n % 2;
n /= 2;
}
for(i=0;i<16;i++)
{
if(test==a)
{
error[flage]=0;
}
else
{
error[flage]=1;
}
}
if(flage==3)
{
for(i=0;i<4;i++)
{
for(j=0;j<16;j++)
{
if(error[j]==0)
{
winflage++;
if(winflage==64)
{
LCD_DIS_Char(3,50,"TRUE",MIDDLE,0);
}
}
else
{
if(dis==2)
{
if(j<5 && j>2){errpart[0]=1;}
if(j<7 && j>4){errpart[1]=1;}
if(j<9 && j>6){errpart[2]=1;}
if(j<11 && j>8){errpart[3]=1;}
if(j<13 && j>10){errpart[4]=1;}
if(j<15 && j>12){errpart[5]=1;}
}
else
{
if(j<6 && j>2){errpart[0]=1;}
if(j<9 && j>5){errpart[1]=1;}
if(j<12 && j>8){errpart[2]=1;}
if(j<15 && j>11){errpart[3]=1;}
}
}
}
}
if(winflage!=64){
LCD_DIS_Char(4,50,"FLASE",MIDDLE,0);
j=0;
for(i=0;i<6;i++)
{
if(errpart==1)
{
position=position+(i-j)*8;
LCD_DIS_Number(6,position,i+1,MIDDLE);
}else
j++;
}
}
}
}
举报