[问答] STC单片机电子琴如何做力度运算

[复制链接]

实习生

发表于 2018-2-13 01:50:29   1287 查看 2 回复 显示全部楼层 倒序浏览
分享
各位好!

我是新手,请大家多关照,最近想设计一台用STC单片机做的61键无线蓝牙电子琴,用现成的廉价电子琴来改装,打算直接扫描16X8行列的状态加以处理,这部分程序已经写好测试妥当了(附程序),由于这是一个有力度感的键盘,一个键有2个触点,通过测定触点的接触时间差计算出速度而换算为力度,原理是很简单,但实施起来很困难,怎样也想不通,所以特地来请教各位高手,原理是:运行单片机内的计时器(向上),当检测到第一个接触点时,读取定时器数值存入相应的记忆1,等检测到第二个接触点时, 再读取定时器数值存入相应的记忆2,两个数字的差就是力度了。硬件上的设计确定一个琴键按下时,第一触点一定比第二触点快,所以记忆2的数值一定比记忆1的数值大,问题在于计数器溢出时就会是记忆2的数值一定比记忆1的数值小了,更大的问题是如果时间再长些,记忆2的数值又会比记忆1的数值大,变成无法分析而确定的难题了。不知道各位是否看过这方面的文献介绍过解决这问题的方法,现实是有力度的电子琴满街都在卖,厂家肯定已经解决问题了,就是我这新手笨,想不通,特来请教大家。

SCANNER:
;CPL P1.2
SCANP2:              ; SHIFT P2 AND READ P0
MOV 32H, #8          ;8 BITS TO SHIFT
MOV 30H, #11111111B  ;THIS BYTE FOR SHIFT AND OUTPUT TO P2
MOV 35H, #0          ;THIS WILL ADD TO ROW TO MAKE 0-7
CLR C
SCANP2A:
MOV A, 30H
RRC A
MOV 30H, A
MOV P2, A            ;P2 ONE ROW LOW
LCALL DELAY4         ;MUST WAIT STABLE
MOV A, P0            ;READ FROM P0
CPL A
JZ SCANNEXT1           ;NO KEY PRESS FOUND, READP1
LCALL STOREDATA
SCANNEXT1:
;LCALL DELAY2
DJNZ 32H, SCANP2A
MOV P2, #11111111B   ;END OF SCANP2
;JMP SCANNER

SCANP3:              ; SHIFT P3 AND READ P0
MOV 32H, #8          ;8 BITS TO SHIFT
MOV 30H, #11111111B  ;THIS BYTE FOR SHIFT AND OUTPUT TO P2
MOV 35H, #8          ;THIS WILL ADD TO ROW TO MAKE 0-7
CLR C
SCANP3A:
MOV A, 30H
RRC A
MOV 30H, A
MOV P3, A            ;P2 ONE ROW LOW
LCALL DELAY4         ;MUST WAIT STABLE
MOV A, P0            ;READ FROM P0
CPL A
JZ SCANNEXT2           ;NO KEY PRESS FOUND, READP1
LCALL STOREDATA
SCANNEXT2:
;LCALL DELAY2
DJNZ 32H, SCANP3A
MOV P3, #11111111B   ;END OF SCANP
;LCALL DELAY5
JMP SCANNER

STOREDATA:           ;32H CONTAIN ROW NUMBER THAT CAUSE LOW
PUSH PSW
MOV 34H, #8          ;8 BIT TO SHIFT
MOV 33H, A           ;A CONTAIN 8BITS WITH FEW HIGH(CAUSE BY KEYPRESS)
STOREDATA1:
MOV A, 33H
;MOV P0, A
CLR C
RLC A
MOV 33H, A
JNC NEXTBIT ;NOT PRESSED
LCALL COUNTPOSITION
LCALL KEYMAP
;LCALL SENTONEBYTE2
NEXTBIT:
DJNZ 34H, STOREDATA1

POP PSW
RET

KEYMAP:
MOV DPH, #10H
MOV DPL, #00H
MOVC A,@A+DPTR
RET

COUNTPOSITION:
;ROWxCOLxCOL
PUSH PSW
MOV A, 32H        ;1-8
ADD A, 35H        ;+0=old or +8=16LEFT8(0-7) SO 1=16
MOV 37H, A
MOV A, #0
COUNT1:
ADD A, #8
DJNZ 37H, COUNT1  ;A WILL BE 8,16,24,32,40.......128
CLR C
SUBB A, #8        ;MAKE A 0-120
ADD A, 34H        ;(1-8)  A=1 TO 128
DEC A             ;MAKE 0-127 SYSTEM
POP PSW
RET
标签:STC 单片机 电子琴 运算
发表于 2018-2-24 11:01:48  
提问记得下次选择“问答”类别哦
回复

点赞 举报

实习生

发表于 2018-2-26 16:14:43  
是学习还是问答?
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /9 下一条

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

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区