2011年绍兴文理学院校大学生电子设计竞赛
对于这个设计来说,我们总结了以下几点经验和教训。第一,电路板的总体布局十分重要。一个好的线路布局不仅会使电路板外观整齐,而且在之后的电路调试和线路错误检查中亦能有一个清晰的思路,可以提高工作效率;第二,C程序的调试工作在本次设计作品中非常重要。因为本次C代码较长,所以整个程序的前后统筹调试中要很细心,乃至一个很小的标量也要重视。
在完成了该电子设计后,我们觉得这个设计还有可以改进和完善之处。比如,可以通过修改代码,使得在按下某按键后可以自动检测所有芯片的型号以及其好坏情况。而且,可以加入LED指示灯或者蜂鸣器,来更加直观地显示或提醒电路工作状况和芯片检测结果。
参考文献
[1] 康华光.电子技术基础模拟部分(第五版).北京:高等教育出版社,2006 [2] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989 [3] 宁武,唐晓宇,闫晓金.全国大学生电子设计竞赛基本技能指导,2009
附件一 系统电路图:
5
2011年绍兴文理学院校大学生电子设计竞赛
实物照片:
6
附件二
2011年绍兴文理学院校大学生电子设计竞赛
附件三:
/*-----------------------------数字集成电路芯片测试仪C程序-清单------------------------------*/ //程序组:陈辰灿 王海 贺星辰 //修改时间:2011.06.05
-------------------------------------------------------------------------------------------------------------------- #include
//这是头文件必须包含
/*==============================宏定义==============================*/ #define LCD_data P0 //数据口 #define M 4 //要测试的芯片好坏的个数 #define N 8
#define input1 P1 //用于检测的引脚 #define input2 P2
/*======================液晶宏定义、初始化引脚=========================*/ void delay(unsigned int z);*延时函数*/
void charfill(unsigned char c); //整屏显示A代表的ASCII字符子程序
7
2011年绍兴文理学院校大学生电子设计竞赛
void putstrxy(unsigned char cx,unsigned char cy,unsigned char code *s);//在(cx,cy)字符位置写字符串子程序
void putstr(unsigned char code *s); //定位写字符串子程序
void putchars(unsigned char c); //在(CXPOS,CYPOS)字符位置写字符子程序 unsigned char getchars(void); //CXPOS,CYPOS)字符位置读字符子程序
void charlcdpos(void); //设置(CXPOS,CYPOS)字符位置的DDRAM地址 void charcursornext(void); //置字符位置为下一个有效位置子程序
void lcdreset(void); //SMC1602系列液晶显示控制器初始化子程序 void delay3ms(void); //延时3MS子程序
void lcdwc(unsigned char c); //送控制字到液晶显示控制器子程序 void lcdwd(unsigned char d); //送控制字到液晶显示控制器子程序 unsigned char lcdrd(void); //读数据子程序 void lcdwaitidle(void); //忙检测子程序
unsigned char data CXPOS; /列方向地址指针(用于CHARLCDPOS子程序) unsigned char data CYPOS; //行方向地址指针(用于CHARLCDPOS子程序) sbit RSPIN = P3^5; //RS对应单片机引脚 sbit RWPIN = P3^4; //RW对应单片机引脚 sbit EPIN = P3^3; //E对应单片机引脚
/*==============================宏定义==============================*/ unsigned char detect(); //自动检测引脚
/*=============================定义按键=============================*/ sbit key1=P3^0; // 选择检测芯片 sbit key2=P3^1; // 确定选择的芯片 sbit key3=P3^2; // 自动检测 sbit key4=P3^6; // 继电器的切换
unsigned char *name[]={\
/*==============================按键的标志位=========================*/ unsigned char flag=0; //要选择的芯片型号在已定义字符数组中的序号 unsigned char flag1=0; unsigned char flag2=0; //用来标示某芯片各通道检测均完好的标志位 unsigned char k=0; //返回自动检测后芯片序号在已定义的数组中的序号 unsigned char code LS00[4][4]={
0x3f,0x3f,0x1b,0x1b, //74ls00 0x24,0x24,0x24,0x24, 0x36,0x36,0x36,0x36, 0x2d,0x2d,0x2d,0x2d, };
unsigned char code LS04[2][4]={ 0x2a,0x2a,0x2a,0x2a, //74ls04 0x3f,0x3f,0x15,0x15, };
8
2011年绍兴文理学院校大学生电子设计竞赛
unsigned char code LS20[16][4]={
0x24,0x24,0x24,0x24, //74ls20 0x25,0x25,0x25,0x25, 0x26,0x26,0x26,0x26, 0x27,0x27,0x27,0x27, 0x2c,0x2c,0x2c,0x2c, 0x2d,0x2d,0x2d,0x2d, 0x2e,0x2e,0x2e,0x2e, 0x2f,0x2f,0x2f,0x2f, 0x34,0x34,0x34,0x34, 0x35,0x35,0x35,0x35, 0x36,0x36,0x36,0x36, 0x37,0x37,0x37,0x37, 0x3c,0x3c,0x3c,0x3c, 0x3d,0x3d,0x3d,0x3d, 0x3e,0x3e,0x3e,0x3e, 0x3f,0x3f,0x1f,0x1f, };
unsigned char code LS86[4][4]={
0x24,0x24,0x00,0x00, //74ls86 0x36,0x36,0x36,0x36, 0x2d,0x2d,0x2d,0x2d, 0x3f,0x3f,0x1b,0x1b, };
unsigned char code IC[M][N]={
0x24,0x24,0x24,0x24,0x3f,0x3f,0x1b,0x1b, //7400 0x3f,0x3f,0x15,0x15,0x3f,0x3f,0x15,0x15, //7404 0x3f,0x3f,0x1f,0x1f,0x3f,0x3f,0x1f,0x1f, //7420 0x3f,0x3f,0x1b,0x1b,0x3f,0x3f,0x1b,0x1b, //7486 };
void main() {
unsigned char i,output1,output2;
lcdreset(); //液晶显示控制器初始化 putstrxy(0,0,\ //显示欢迎界面 while(1) {
if(key1==0) {
delay(100);
9