找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC12C5A60S2单片机AD按键程序(节约io口)

  [复制链接]
跳转到指定楼层
楼主
单片机用的是STC12C5A60S2  晶振12M
AD判断部分我自己琢磨的  稳定性还可以吧  只要别快速轮换按不同按键就没事    最大显示数是255

基准电源用的是5V 所以电压必须稳定没有波动     也可以用431做一个稳定的基准电源   
串联的分压电阻随意选择 只要能拉开电压差距就行  按下按键看显示屏显示的数  在到程序里修改该按键值的数据范围
比如显示的是20   程序里对应按键的最小数填15 最大数填25    这两个数及它们之间的数都属于该按键的   
对地电容我是随便选的 不知道是多少  能用就行  

电路原理图如下:


制作出来的实物图如下:



MA:
    MOV        ADC_CONTOR,#0C8H        ;开启P1.0的AD转换        电压  #11001000B
        LCALL AD        ;调用AD子程序
        MOV        A,ADC_RES
        MOV 33H,A;           电压数据放入33H
        MOV  B,#100           ;100放入B
    DIV  AB                   ;ADC_RES除以B
    MOV  36H,A           ;A余数放入36H
    MOV  A,B           ;B余数放入A
    MOV  B,#10           ;10放入B
    DIV  AB                   ;A除以B
    MOV  37H,A           ;A放入37H
    MOV  38H,B           ;B放入38H
        MOV A,33H;           取出电压数据放入A 用于按键对比
        RET;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;AD转换子程序
AD:         MOV        A,ADC_CONTOR
     LCALL DELAY30MS
         JNB        0E4H,AD
         CLR        0E4H
         MOV        ADC_CONTOR,A
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADDAT:            
;按键0                                                                                 0~05等于按键0按下
V_KEY0:                                 CJNE A,#0,V_KEY0_2;
V_KEY0_1:                          CLR OUT0;                 
                                         LCALL DIP;                                 调用显示
                                         LCALL MA;                                 调用AD检测
                                         CJNE A,#255,V_KEY0;         判断按键释放
                                         LJMP V_KEY0_4
V_KEY0_2:                         CJNE A,#05,V_KEY0_3;
                                         LJMP V_KEY0_1;
V_KEY0_3:                          JC V_KEY0_1;
V_KEY0_4:            MOV P3,#0FFH;                         P3输出高电位                 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按键1                                                                                 18~27等于按键1按下
V_KEY1:              CJNE A,#18,V_KEY1_2;
V_KEY1_1:            CLR OUT1;
                                         LCALL DIP;
                     LCALL MA;
                                         CJNE A,#255,V_KEY1;         
                                         LJMP V_KEY1_4               
V_KEY1_2:            CJNE A,#27,V_KEY1_3;
                     LJMP V_KEY1_1;
V_KEY1_3:            JC V_KEY1_1;
V_KEY1_4:            MOV P3,#0FFH;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;按键2                                                               38~46等于按键2按下
V_KEY2:              CJNE A,#38,V_KEY2_2;
V_KEY2_1:            CLR OUT2;
                                         LCALL DIP;
                     LCALL MA;
                                         CJNE A,#255,V_KEY2;
                                         LJMP V_KEY2_4                 
V_KEY2_2:            CJNE A,#46,V_KEY2_3;
                     LJMP V_KEY2_1;
V_KEY2_3:            JC V_KEY2_1;
V_KEY2_4:            MOV P3,#0FFH;

51hei截图20200708200955.jpg (38.73 KB, 下载次数: 147)

51hei截图20200708200955.jpg

51hei截图20200708201001.jpg (31.87 KB, 下载次数: 159)

51hei截图20200708201001.jpg

STC12C5A60S2 - 1602 - AD按键.rar

29.71 KB, 下载次数: 51, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:285380 发表于 2020-7-24 10:54 | 只看该作者
说老实话   这种程序语言我就没看懂。
回复

使用道具 举报

板凳
ID:241423 发表于 2020-7-24 13:35 | 只看该作者
caifei9280 发表于 2020-7-24 10:54
说老实话   这种程序语言我就没看懂。

那是汇编语言,执行效率最高,最难读懂的语言
回复

使用道具 举报

地板
ID:69310 发表于 2020-8-16 10:46 | 只看该作者
大神啊,膜拜了,谢谢
回复

使用道具 举报

5#
ID:224782 发表于 2020-8-22 22:52 | 只看该作者
STC12的话单独验证是可以的,加进系统里使用要考虑好参考电压的问题。电压不稳对AD按键来说是灾难,实用的话为了省事最好用STC15或者STC8
回复

使用道具 举报

6#
ID:126173 发表于 2020-8-29 07:49 | 只看该作者
谢谢,有自己的思想。
回复

使用道具 举报

7#
ID:65956 发表于 2020-9-1 11:45 | 只看该作者
首先为你还在用汇编的点赞,曾几何时我也是从汇编过来的,现在已改为C了,会汇编的来学改用C的很好学的,但前提是要有人帮指导一二,然后通过自己不断的实践,从实践中不断的改进,会学得更快的,支持你
回复

使用道具 举报

8#
ID:375228 发表于 2020-10-22 01:40 | 只看该作者
汇编好,学习学习
回复

使用道具 举报

9#
ID:832512 发表于 2020-10-22 22:36 | 只看该作者
caifei9280 发表于 2020-7-24 10:54
说老实话   这种程序语言我就没看懂。

没看懂那就学呗哈哈
回复

使用道具 举报

10#
ID:675767 发表于 2021-2-5 23:43 来自手机 | 只看该作者
又是位汇编大佬,这两天在琢磨这个ADC检测多个按键的事,只会C,还没想好怎么写
回复

使用道具 举报

11#
ID:99987 发表于 2021-2-12 17:10 | 只看该作者
汇编不错,代码写的不错。
回复

使用道具 举报

12#
ID:856401 发表于 2021-3-28 22:03 来自手机 | 只看该作者
汇语言,实在不了好移植。楼主写C语言吧
回复

使用道具 举报

13#
ID:468209 发表于 2021-3-29 11:01 来自手机 | 只看该作者
旧时老式彩色电视就会这样的原理 但有一个很大的缺点 一但回南天按键受潮 按键本身就会产生电阻值 AD就会判断错误 比如说你想按加音量 结果给你直接换台了 这也是老式电视通病
回复

使用道具 举报

14#
ID:976070 发表于 2022-2-12 22:07 | 只看该作者
没有参数设置?
回复

使用道具 举报

15#
ID:200844 发表于 2023-7-1 10:39 | 只看该作者
用汇编写的程序真的很少了,我也只能看的懂汇编,C一直觉得复杂看不懂。
回复

使用道具 举报

16#
ID:731755 发表于 2023-7-4 08:18 来自手机 | 只看该作者
这个方法,在电视机上早就有了,从2002年电视机芯片开始用单片机,里面的按键就是采用这种方法
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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