家里領(lǐng)導(dǎo)有令,命我做個(gè)搶答器給她,領(lǐng)導(dǎo)有令,怎敢不從,與領(lǐng)導(dǎo)溝通,做個(gè)八路搶答器。
首先,做這東西,單片機(jī)永遠(yuǎn)比數(shù)字電路簡(jiǎn)單,而且成本更低。但是C語(yǔ)言都忘光了,又找出郭天祥的書啃了一天。
那就開始做吧
其實(shí)邏輯很簡(jiǎn)單,AT89C51單片機(jī)檢測(cè)io口,有信號(hào),顯示并鎖存。復(fù)位重新開始。
要顯示信號(hào),就驅(qū)動(dòng)數(shù)碼管最簡(jiǎn)單,八路搶答器,需要8個(gè)io口,數(shù)碼管需要7個(gè)io,那單片機(jī)選擇最簡(jiǎn)單的stc89c52
要想顯示數(shù)碼管數(shù)字,先定義數(shù)碼管字符
語(yǔ)句:unsigned char code disp[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xbf}
其中0xf9----0xbf為16進(jìn)制機(jī)器懂得語(yǔ)言
單片機(jī)檢測(cè)io語(yǔ)句:P0=0xff
有按鍵動(dòng)作,要識(shí)別是人為搶答按下還是干擾,所以要加一個(gè)消抖
語(yǔ)句:
button=P0
delay(1200)
判斷是搶答按鍵,那就開始io動(dòng)作
語(yǔ)句:
button=P0
switch(button)
再判斷io是p幾,也就是按鍵值跳轉(zhuǎn)
語(yǔ)句:
case 0xfe: P1=disp[0];delay(10000);while(1);break; //0按下,顯示1,待機(jī)
case 0xfd: P1=disp[1];delay(10000);while(1);break; //1按下,顯示2,待機(jī)
case 0xfb: P1=disp[2];delay(10000);while(1);break; //2按下,顯示3,待機(jī)
case 0xf7: P1=disp[3];delay(10000);while(1);break; //3按下,顯示4,待機(jī)
case 0xef: P1=disp[4];delay(10000);while(1);break; //4按下,顯示5,待機(jī)
case 0xdf: P1=disp[5];delay(10000);while(1);break; //5按下,顯示6,待機(jī)
case 0xbf: P1=disp[6];delay(10000);while(1);break; //6按下,顯示7,待機(jī)
case 0x7f: P1=disp[7];delay(10000);while(1);break; //7按下,顯示8,待機(jī)
default: break;
程序就這些,然后把頭文件等組裝起來(lái),搞定
下面開始仿真:
模型電路
上電復(fù)位
按鍵檢測(cè)
程序與仿真搞定,那就開始做實(shí)物吧
最小系統(tǒng)版搭個(gè)模型出來(lái)
完成
測(cè)試,1---8搶答正常
復(fù)位正常
工作電流16ma
里面電池是:1800mAh*4=7200mAh,夠用好長(zhǎng)時(shí)間哈
最后整體圖