找回密码
 立即注册
楼主: 朱家臣

单片机按键

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-17 17:14:03
已绑定手机
已实名认证

112

主题

2394

回帖

6026

积分

版主

积分
6026
发表于 2023-9-26 16:35:07 | 显示全部楼层
本帖最后由 王昱顺 于 2023-9-26 16:40 编辑
朱*** 发表于 2023-9-26 15:19
STC90C52RC,三极管是数码管驱动,其他电路看懂了,也调试好了,主要是按键电路,不知是矩阵还是独立,还是 ...

这么老的单片机是没有ADC功能的,所以必须要用矩阵或者独立按键。
矩阵按键代码写着稍微麻烦一点,独立按键写代码较为容易。
如果用独立按键的话,可以使用
  1. if(P01==0)
  2. {
  3.     //此处写按键处理程序
  4. }
复制代码

判断引脚低电平进行实现,老的单片机最好外部加入上拉电阻
具体电路如图所示,KEY1连接单片机引脚
(当然了,这是在改动你的原理图的情况下实现的)

截图202309261634353058.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-17 17:14:03
已绑定手机
已实名认证

112

主题

2394

回帖

6026

积分

版主

积分
6026
发表于 2023-9-26 16:55:05 | 显示全部楼层
朱*** 发表于 2023-9-26 15:19
STC90C52RC,三极管是数码管驱动,其他电路看懂了,也调试好了,主要是按键电路,不知是矩阵还是独立,还是 ...

我仔细看了一下,如果用你这个电路原理图的话。

按键的这个接法应该是用来在扫描数码管的间隙实现读取按键状态。
我简化了一下你的单路状态原理图
截图202309261651561548.jpg

那么程序流程应该是:
首先P01控制数码管单段动态刷新,在P01为0的时候如果按键SW2按下,则D17的负极为0,正极因为按键按下导通而得到1。

所以D17导通,此时因为D17正极的1是通过10K上拉电阻实现的,不如P01的0驱动能力强,所以P17被拉到0。
所以此时读到P17为0就可以判断是SW2按下。
以此类推,只要保证动态扫描的时候P00到P06同时只有一个端口为0,就可以通过为零的端口判断是哪一个按键按下了。
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-26 18:52:16 | 显示全部楼层
王*** 发表于 2023-9-26 16:55
我仔细看了一下,如果用你这个电路原理图的话。

按键的这个接法应该是用来在扫描数码管的间隙实现读取按 ...

void main ()
{
  
if( P17==0)
        {
          P0=0x82;
          P1=0xfb;
        }
        else
        {
          P0=0x92;
          P1=0xf7;

        }
         
}按你的理解,我主程序中写了这个代码结果我安下按键显示没有变化一直显示5

点评

用静态显示的方案肯定是不能兼顾同时扫描按键和显示的 如果你单纯想要测试按键的话,可以试一下这段代码 这个需要使用万用表量一下P01是否在按下S1后从高电平变化为低电平  详情 回复 发表于 2023-9-26 19:18
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-26 18:54:41 | 显示全部楼层
我认为按下P17是0的话应显示6,不按显示5,结果不论按不按都 显示是5
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-17 17:14:03
已绑定手机
已实名认证

112

主题

2394

回帖

6026

积分

版主

积分
6026
发表于 2023-9-26 19:18:57 | 显示全部楼层

用静态显示的方案肯定是不能兼顾同时扫描按键和显示的
如果你单纯想要测试按键的话,可以试一下这段代码
  1. if(P17==0)
  2.     {
  3.         P0 = 0xfd;//P01口拉低
  4.     }else
  5.     {
  6.         P0 = 0xfe;//P00口拉低
  7.     }
复制代码

这个需要使用万用表量一下P01是否在按下S1后从高电平变化为低电平
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-27 11:09:38 | 显示全部楼层
王*** 发表于 2023-9-26 19:18
用静态显示的方案肯定是不能兼顾同时扫描按键和显示的
如果你单纯想要测试按键的话,可以试一下这段代码
...

P01就是低电平,控不控下都是低电平,只是P17控下S1P17电平从5V变为3.6V

点评

"P17电平从5V变为3.6V" 那证明你这个端口上用的上拉电阻有点小了,上拉效果太强,导致电平无法被识别为0,3.6V的话肯定会被识别成高电平1的  详情 回复 发表于 2023-9-27 14:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-17 17:14:03
已绑定手机
已实名认证

112

主题

2394

回帖

6026

积分

版主

积分
6026
发表于 2023-9-27 14:53:52 | 显示全部楼层
本帖最后由 王昱顺 于 2023-9-27 14:55 编辑
朱*** 发表于 2023-9-27 11:09
P01就是低电平,控不控下都是低电平,只是P17控下S1P17电平从5V变为3.6V

"P17电平从5V变为3.6V"
==那证明你这个端口上用的上拉电阻有点小了,上拉效果太强,导致电平无法被识别为0,3.6V的话肯定会被识别成高电平1的

”P01就是低电平,控不控下都是低电平“
==不能控制那么就没办法分辨出来到底是哪个按键按下了,只能识别按下这个操作
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-27 18:36:10 | 显示全部楼层
是的这样的王工.但想不通原设计者是如何达到的,这个是别人成熟的产品用别人编译的代码是可以的
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-27 18:37:03 | 显示全部楼层
论如何也要谢谢王工这几天解答

点评

不客气,我也学习了到新的电路设计  详情 回复 发表于 2023-9-28 10:23
回复 支持 反对

使用道具 举报 送花

3

主题

16

回帖

77

积分

注册会员

积分
77
发表于 2023-9-27 18:38:12 | 显示全部楼层
王工现在哪个城市,我在宁波有机会来宁来找我玩
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 23:54 , Processed in 0.167678 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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