找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3969|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機用8個按鍵ADC模擬輸入控制8個led燈的亮滅,求程序思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104183 發(fā)表于 2021-8-7 07:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
用8個按鍵ADC模擬輸入控制8個led燈的亮滅,為了節(jié)省io口,需要保證1個按鈕控制1個led燈的開與關(guān)。請大家?guī)兔o發(fā)個程序?qū)W習(xí)一下 謝謝。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:950946 發(fā)表于 2021-8-7 15:33 | 只看該作者
你可以試試在按鍵后面接電壓的地方放上電位計,然后使其每個按下的電壓都不一樣。記錄下每個按鍵按下的adc數(shù)據(jù),最后聯(lián)系上led燈
回復(fù)

使用道具 舉報

板凳
ID:609192 發(fā)表于 2021-8-9 11:09 | 只看該作者
思路很簡單,你采用電阻串聯(lián)或并聯(lián)的方式,使得每個按鍵按下時ADC讀取的電壓都不一樣,再進(jìn)行比較就行了
回復(fù)

使用道具 舉報

地板
ID:955673 發(fā)表于 2021-8-9 15:02 | 只看該作者
計算好ADC按鍵電壓范圍,定時去查(類似按鍵掃描),STC下載軟件里有例程
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2021-8-9 16:20 | 只看該作者

按以上電路電阻取值
10 bit ADC = 0 ~ 1024
if(ADC < 1004)//SW1按下520/(520+10k) X 1024
{
  Led1 = !Led1;
}
if(1004 < ADC && ADC < 1018)//SW2按下1.2k/(520+1.2k+10k) X 1024
{
  Led2 = !Led2;
}
if(1018 < ADC && ADC < 1020)//SW2按下1.6k/(520+1.2k+1.6k+10k) X 1024
{
  Led3 = !Led3;
}...
回復(fù)

使用道具 舉報

6#
ID:123289 發(fā)表于 2021-8-9 20:59 | 只看該作者
用多個電阻分壓,8個開關(guān)將不同一電壓送入CPU的AD口,剩下的就是寫程序,依據(jù)不同的AD位來判定是哪個按鍵按下了。
回復(fù)

使用道具 舉報

7#
ID:213173 發(fā)表于 2021-8-10 08:21 | 只看該作者
查表法8位ADC模擬輸入按鍵掃描,按下圖搭建電路。

  1. unsigned char code dis_buf[]={0,10,30,50,70,90,110,130,150};
  2. unsigned char key_value;//鍵值
  3. unsigned char ADC_value;//ADC轉(zhuǎn)換值(8位)
  4. unsigned char i;

  5. void key_scan(ADC_value)
  6. {
  7.         for(i=0;i<8;i++)
  8.         {
  9.                 if(ADC_value>=dis_buf[i] && ADC_value<dis_buf[i+1])
  10.                 {
  11.                         key_value=i+1;
  12.                         break;//跳出當(dāng)前循環(huán)
  13.                 }
  14.         }
  15. }
復(fù)制代碼




回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表