2 回答

TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
用ad轉(zhuǎn),16個電阻串聯(lián)在一起,每個節(jié)點(diǎn)引出線與按鍵相連,按鍵另一端為公共端與p1^n相連。然后ad口采集到的電壓也不同,就能判別按的是哪個按鍵,因此只要寫ad采樣程序就可以了
這是stc12c2052ad的例子
/**********************************************************ad轉(zhuǎn)換**********************************************************/
voidinitadc()
{p1=0xff;
adc_contr|=0x80;
delaynop(200);
p1m0=0x01;//這兩個寄存器用來設(shè)置p1口四種狀態(tài),每一位對應(yīng)一個p1引腳,按狀態(tài)組合操作
p1m1=0x01;//設(shè)置p1.0為開漏狀態(tài)
delaynop(200);
}
uintadc()
{
adc_data=0;//清除結(jié)果adc_contr=0x60;//轉(zhuǎn)換速度設(shè)置0x60最快速度adc_contr=0xe0;//1110,0000清adc_flag,adc_start位和低3位
adc_contr=0xe0;
delaynop(200);//使輸入電壓達(dá)到穩(wěn)定
adc_contr=0xe8;//1110,1000令adcs=1,啟動a/d轉(zhuǎn)換,
while(1)//等待a/d轉(zhuǎn)換結(jié)束
{
if(adc_contr&0x10)//0001,0000測試a/d轉(zhuǎn)換結(jié)束否
{break;}
}
adc_contr=0xe0;//1110,0111清adc_flag位,關(guān)閉a/d轉(zhuǎn)換,
delaynop(400);returnadc_data;//返回a/d10位轉(zhuǎn)換結(jié)果
}
voidadc_to_key()//adc數(shù)據(jù)轉(zhuǎn)換按鍵信號
{
v=adc();
。。。
。。。
。。。你自己完成咯}

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
1、在main()函數(shù)中return 可以退出當(dāng)前進(jìn)程,如果當(dāng)前程序只有一個進(jìn)程則退出整個應(yīng)用程序,有多個進(jìn)程則其他進(jìn)程不受影響。其他函數(shù)中return可以退出當(dāng)前函數(shù)。
2、程序中任何地方執(zhí)行exit()可以退出當(dāng)前進(jìn)程,如果當(dāng)前程序只有一個進(jìn)程則退出整個應(yīng)用程序,若有多個進(jìn)程則其他進(jìn)程不受影響。
添加回答
舉報