小学生
最后登录1970-1-1
在线时间 小时
注册时间2020-6-3
|
本帖最后由 ID-v9L2fa 于 2020-6-3 22:15 编辑
proteus8.9+stm32f103对74HC00(四与非门)、74HC02(四或非门)、74HC04(六非门)进行简单测试
一、设计要求:
主芯片: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[i]=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[i] = n % 2;
- n /= 2;
- }
- for(i=0;i<16;i++)
- {
- if(test[i]==a[i])
- {
- error[flage][i]=0;
- }
- else
- {
- error[flage][i]=1;
- }
- }
- if(flage==3)
- {
- for(i=0;i<4;i++)
- {
- for(j=0;j<16;j++)
- {
- if(error[i][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[i]==1)
- {
- position=position+(i-j)*8;
- LCD_DIS_Number(6,position,i+1,MIDDLE);
- }else
- j++;
- }
- }
- }
- }
复制代码 完整仿真及其代码:
proteus stm32 74HC00(02、04)简单数字电路测试.zip
(7.56 MB, 下载次数: 8)
ps:要是下载不了,可以去这两个地方看
51单片机论坛:http://www.51hei.com/bbs/dpj-189295-1.html
csdn:https://editor.csdn.net/md/?articleId=106525336
|
|