|
单片机用的是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;
|
评分
-
查看全部评分
|