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