矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: lxa000

[原创diy]试验51单片机驱动3脚增量型旋转编码器

[复制链接]
     
 楼主| 发表于 2018-1-28 23:16:11 | 显示全部楼层
huxiangming 发表于 2018-1-28 01:19
C语言的,接2个中断很简单*(中断类型为电平跳变)

interrupt [EXT_INT6] void ext_int6_isr(void)

抱歉
我不会c
所以也看不懂
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-29 00:06:15 | 显示全部楼层

今天加上1602a继续做模拟试验


PLL试验1.jpg
PLL试验2.jpg
回复 支持 反对

使用道具 举报

     
发表于 2018-1-29 12:13:20 | 显示全部楼层
楼主误导我,明明是增量型旋转编码开关,非要说是旋转编码器,一点也不严谨!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-29 20:57:45 | 显示全部楼层
夏国特 发表于 2018-1-29 12:13
楼主误导我,明明是增量型旋转编码开关,非要说是旋转编码器,一点也不严谨!

套包和网上都管它见做增量型旋转编码器
是网络误导了你
回复 支持 反对

使用道具 举报

     
发表于 2018-1-29 23:31:22 | 显示全部楼层
qzlbwang 发表于 2018-1-28 14:15
看看明白否?发现有什么区别了吗?

这就是我说的,不用中断,直接读AB的状态,AB相同的不考虑,这次读和上次状态不一样就是一次变化,方向看AB的组合
回复 支持 反对

使用道具 举报

     
发表于 2018-1-30 10:52:54 | 显示全部楼层
lxa000 发表于 2018-1-29 20:57
套包和网上都管它见做增量型旋转编码器
是网络误导了你

嗯,我多年前做技术标准化,对用词比较敏感,什么轻触开关和微动开关,电子元件和器件,导线电线线束电缆的区别,还是很关注的。
企业里要是这样叫,物料系统就要乱套了。标准化很重要!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-30 13:56:43 | 显示全部楼层
模拟调谐电台的试验参考代码:


;1602-LCD模拟调电台汇编代码
;Lxa0最后修改于2018-1-28-V1.0
;本代码晶体为11.0592MHz
;代码中未注明的只占用区0

RS EQU p2.5           ;定义液晶接口
RW EQU p2.6
E  EQU p2.7

org 0000h
ljmp mm

;主程序*********************************************************
org 0100h
mm:nop
acall ys
mov tmod,#90h          ;T0设方式0,T1门控与方式1
mov tcon,#04h          ;T0原始方式,INT1下降沿触发
;mov ie,#84h            ;设中断允许
mov ip,#04h            ;设中断优先级别
mov sp,#7fh            ;设堆栈入口
mov 08h,#30h           ;解码转换用
mov 09h,#07h           ;解码转换用
mov 10h,#30h           ;读红外波头存放首址
mov 11h,#2fh           ;读红外波头48个
mov 20h,#00h           ;读红外、解码、动作,电台最大最小标志位06h和05h
mov 21h,#00h           ;动作指令码占           
mov 22h,#09h           ;电台频率小数位
mov 23h,#07h           ;电台频率个位
mov 24h,#00h           ;电台频率十位
mov 25h,#01h           ;电台频率百位
mov 26h,#00h           ;XX暂存单元
mov 27h,#00h           ;XX暂存单元
mov p0,#01H            ;清屏
acall wcom
MOV p0,#38H            ;使用8Bits汇流排,显示2行5*7字符
acall wcom
MOV p0,#0CH            ;显示开,光标关
acall wcom
MOV p0,#06H            ;字符不动,光标自动右移一格
acall wcom
MOV p0,#80H            ;第一行的开始位置
acall wcom
MOV DPTR,#TAB001       ;到TABLE1取码
acall xsztab           
MOV p0,#0C0H           ;第二行的开始位置
acall wcom
MOV DPTR,#TAB002       ;到TABLE2 取码
acall xsztab           
acall cgwr
m0:nop
acall ys
acall xsz
sjmp m0

;显示tab001和tab002子代码*****************************************
xsztab:nop              
push dph
push dpl
push acc
push psw
clr psw.3               ;进入区0工作寄存器
clr psw.4
mov r1,#00h
A1:mov a,r1
MOVC A,@A+DPTR          ;到table取码
mov p0,a
acall wdat              ;显示到lcd
INC r1
CJNE A,#0,A1            ;是否到00h
pop psw
pop acc
pop dpl
pop dph
RET

;延时0.5mS子代码**************************************************
ys:nop              
push dph
push dpl
push acc
push psw
clr psw.3               ;进入区0工作寄存器
clr psw.4
MOV R7,#04              ;延时0.5mS子程序
ys00:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,ys00
pop psw
pop acc
pop dpl
pop dph
RET

;以下是字符数据表**************************************************
tab001: db"      Lxa0      ",00h
tab002: db" FM--000.0 MHz  ",00h

;显示xsz子程序<占用区0>********************************************
org 0200h
xsz:nop
push dph              ;保护现场
push dpl
push acc
push psw
mov p0,#0c9h          ;设置小数位地址
lcall wcom
mov a,22h             ;取小数位数据
add a,#30h            ;加上#30h就是去CGROM取数据
mov p0,a
lcall wdat            ;送出显示
mov p0,#0c7h          ;设置频率个位地址
lcall wcom
mov a,23h             ;取频率个位数据
add a,#30h
mov p0,a
lcall wdat            ;送出显示
mov p0,#0c6h          ;设置频率十位地址
lcall wcom
mov a,24h             ;取频率十位数据
add a,#30h
mov p0,a
lcall wdat            ;送出显示
mov p0,#0c5h          ;设置频率百位地址
lcall wcom
mov a,25h             ;取频率百位数据
add a,#30h
mov p0,a
lcall wdat            ;送出显示
mov p0,#80h           ;显示天线符号
lcall wcom
mov p0,#00h
lcall wdat
mov p0,#81h           ;显示信号符号
lcall wcom
mov p0,#01h
lcall wdat
mov p0,#8fh           ;显示电池符号
lcall wcom
mov p0,#02h
lcall wdat
pop psw               ;恢复现场
pop acc
pop dpl
pop dph
ret                   ;返回

;写命令和数据子代码************************************************
org 0280h
wcom:CLR RS           ;送命令
CLR RW
clr E
acall ys
setb E
clr E
RET

wdat:SETB RS          ;送数据
CLR RW
clr E
acall ys
setb E
clr E
RET

;建立自定义CGRAM字符库子程序(占用区0工作寄存器)********************
org 0300h
cgwr:nop
push dph
push dpl
push acc
push psw
mov p0,#40h           ;设置CGRAM首地址
lcall wcom
mov r2,#64            ;设置天线信号电池等共8X8=64个代码
mov r3,#00h
mov dptr,#cgtab1      ;设置字符代码表首地址
cgwr00:mov a,r3
movc a,@a+dptr        ;取字符代码
mov p0,a
lcall wdat
inc r3
djnz r2,cgwr00
pop psw
pop acc
pop dpl
pop dph
ret

;以下是CGRAM数据表*************************************************
cgtab1:
db 15H,15H,15H,0EH,04H,04H,04H,00H         ;"天线"代码=0x08h
db 00H,00H,01H,03H,07H,0fH,1fH,00H         ;"信号"代码=0x09h
db 04H,1FH,11H,15H,15H,11H,1FH,00H         ;"电池"代码=0x10h
db 00h,01h,02h,03h,04h,05h,06h,07h         ;"空"代码=0x05h
db 00h,01h,02h,03h,04h,05h,06h,07h         ;"空"代码=0x00h
db 00h,01h,02h,03h,04h,05h,06h,07h         ;"空"代码=0x01h
db 00h,01h,02h,03h,04h,05h,06h,07h         ;"空"代码=0x02h
db 00h,01h,02h,03h,04h,05h,06h,07h         ;"空"代码=0x03h
;******************************************************************
end

;CGRAM的首地址为40h
;DDRAM的首地址为80h
回复 支持 反对

使用道具 举报

     
发表于 2018-2-1 13:51:13 | 显示全部楼层
飞梭开关的程序其实也很简单,A信号接外部中断0,判断B信号的状态:从0到1为正转,从1到0为反转。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 09:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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