找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2584|回复: 6
打印 上一主题 下一主题
收起左侧

单片机用8个按键ADC模拟输入控制8个led灯的亮灭,求程序思路

[复制链接]
跳转到指定楼层
楼主
50黑币
用8个按键ADC模拟输入控制8个led灯的亮灭,为了节省io口,需要保证1个按钮控制1个led灯的开与关。请大家帮忙给发个程序学习一下 谢谢。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:950946 发表于 2021-8-7 15:33 | 只看该作者
你可以试试在按键后面接电压的地方放上电位计,然后使其每个按下的电压都不一样。记录下每个按键按下的adc数据,最后联系上led灯
回复

使用道具 举报

板凳
ID:609192 发表于 2021-8-9 11:09 | 只看该作者
思路很简单,你采用电阻串联或并联的方式,使得每个按键按下时ADC读取的电压都不一样,再进行比较就行了
回复

使用道具 举报

地板
ID:955673 发表于 2021-8-9 15:02 | 只看该作者
计算好ADC按键电压范围,定时去查(类似按键扫描),STC下载软件里有例程
回复

使用道具 举报

5#
ID:161164 发表于 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;
}...
回复

使用道具 举报

6#
ID:123289 发表于 2021-8-9 20:59 | 只看该作者
用多个电阻分压,8个开关将不同一电压送入CPU的AD口,剩下的就是写程序,依据不同的AD位来判定是哪个按键按下了。
回复

使用道具 举报

7#
ID:213173 发表于 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转换值(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;//跳出当前循环
  13.                 }
  14.         }
  15. }
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表