家里领导有令,命我做个抢答器给她,领导有令,怎敢不从,与领导沟通,做个八路抢答器。
首先,做这东西,单片机永远比数字电路简单,而且成本更低。但是C语言都忘光了,又找出郭天祥的书啃了一天。
那就开始做吧
其实逻辑很简单,AT89C51单片机检测io口,有信号,显示并锁存。复位重新开始。
要显示信号,就驱动数码管最简单,八路抢答器,需要8个io口,数码管需要7个io,那单片机选择最简单的stc89c52
要想显示数码管数字,先定义数码管字符
语句:unsigned char code disp[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xbf}
其中0xf9----0xbf为16进制机器懂得语言
单片机检测io语句:P0=0xff
有按键动作,要识别是人为抢答按下还是干扰,所以要加一个消抖
语句:
button=P0
delay(1200)
判断是抢答按键,那就开始io动作
语句:
button=P0
switch(button)
再判断io是p几,也就是按键值跳转
语句:
case 0xfe: P1=disp[0];delay(10000);while(1);break; //0按下,显示1,待机
case 0xfd: P1=disp[1];delay(10000);while(1);break; //1按下,显示2,待机
case 0xfb: P1=disp[2];delay(10000);while(1);break; //2按下,显示3,待机
case 0xf7: P1=disp[3];delay(10000);while(1);break; //3按下,显示4,待机
case 0xef: P1=disp[4];delay(10000);while(1);break; //4按下,显示5,待机
case 0xdf: P1=disp[5];delay(10000);while(1);break; //5按下,显示6,待机
case 0xbf: P1=disp[6];delay(10000);while(1);break; //6按下,显示7,待机
case 0x7f: P1=disp[7];delay(10000);while(1);break; //7按下,显示8,待机
default: break;
程序就这些,然后把头文件等组装起来,搞定
下面开始仿真:
模型电路
上电复位
按键检测
程序与仿真搞定,那就开始做实物吧
最小系统版搭个模型出来
完成
测试,1---8抢答正常