本帖详细记录了程序小白一步一步制作八路抢答器的过程,一楼为c语言讲解与仿真,二楼为实物制作。楼主为单片机小白,大神轻喷前几日,领导下命令,给她做个抢答器,为了不跪搓衣板,硬着头皮答应了。
具体沟通细节,领导要求,最少4路,能显示并锁住抢答信息,并有叮咚提示音。
我靠,我的能力能给你做个导弹模型,但单片机早都还给大学老师了啊。
那就先上万能的淘宝吧,一查更是吓一跳,满足领导要求的最低都要1000多。。。
于是再与领导沟通,我给你做个八路的,但是没有叮咚声音可好?领导说保证能用就行吧。。。。
哈哈,其实做四路与八路是一样的,但是叮咚声音的确搞不定。用蜂鸣器声音太差,买门铃芯片做那个要叫好几声。
先做个能显示的,再慢慢研究语音芯片吧,也许下一个会做个无线的出来呢
首先,做这东西,单片机永远比数字电路简单,而且成本更低。但是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;
程序就这些,然后把头文件等组装起来,搞定
下面开始仿真
模型电路
上电复位
按键检测
本文需要的程序16进制下载;:
next