旋转编码开关 实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11010000 10010001 10001011 10100001 10100000 10010111 10000000 10000001 10000100
*/
'1' 0x9f '2' 0xd0 '3' 0x91 '4' 0x8b '5' 0xa1 '6' 0xa0 '7' 0x97 '8' 0x80 '9' 0x81 '0' 0x84
w1=0;
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
P1=seg[a]; delay(); w1=1; delay();
} }
/* 延时函数 */ /* 如果把 i 改为 1,试试是啥效果:静态显示 4 位数 4321 */ void delay(void) {
uchar i,j,k; for(i=0;i<1;i++)
for(j=0;j<15;j++) for(k=0;k<250;k++) ;
}
//旋转编码开关处理函数 //顺时针计数值增加,逆时针计数值减少,这里上限是 9999,高于清 0 //此函数没有包括按键处理部分
uint CodingsWitchPolling(void)//
本人看到这种按钮非常激动,第 1 时间从淘宝网买了 10 个(3 元一个,配旋钮等 4 元 1 个),连夜进行焊接和程序的调试,终于成功。程序是从网上下载的,但发现有错,现已 改正。
现上两图,以飨读者。 图一:开关实物照片(反面)
图二:开关与单片机实验系统 V2 版本(沈红卫课程教学用)的演示照片
旋钮,可左 转右转
一起来吧!
/* EC11 系列旋转编码开关演示程序
Baidu Nhomakorabea*/
/* 把旋转开关旋转产生的脉冲数依次在 4 个数码管上显示
*/
/* 绍兴文理学院自动化教研室 沈红卫
*/
/* 2010 年 11 月 2 日
*/
/* CPU: STC12C 系列
*/
/* 主频:12M
*/
#include <stc12c5410ad.h> /* 这是所用单片机头文件,必须包含*/
Bold = CodingsWitch_B; return tmp;
// //返回计数值
}
#define uchar unsigned char #define uint unsigned int
/* 数码管的控制引脚定义 */
sbit w4=P2^1;
/* 第 4 个数码管的共阳极控制*/
sbit w2=P3^7;
sbit w3=P2^7;
sbit w1=P2^6;
/* 定义编码开关控制引脚 */ //中间脚(第 2 脚)接地 sbit CodingsWitch_B=P2^3; //A 脚定义(即 1 脚) 这两脚必须接 10K 上拉电阻
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
这种开关可方便地应用单片机系统中,成为一个人机交流界面。具体应用程序可根据 需要自己编写。
以下是在单片机实验系统 V2(也可应用于 V1)(沈红卫开发,用于课程教学)实现的 范例程序,供大家应用时参考,希望大家能喜欢。
{
st = 0;
if(tmp==9999)
tmp=0;
else
tmp++;
//
} if(Aold)
//为高说明编码开关在向减小的方向转
{
st = 0;
if(tmp==0)
tmp=9999;
else tmp--;
//设返回值
}
}
} Aold = CodingsWitch_A;
//保持这次检测的电平,以备下次调用比较用
*/
uchar seg[10]={0x84,0x9f,0xd0,0x91,0x8b,0xa1,0xa0,0x97,0x80,0x81};
//函数说明 void delay(void); uint CodingsWitchPolling(void);
//主函数 void main(void) {
uint ttt=2345; uchar a,b,c,d;
b=ttt%1000/100;
//百位
c=ttt%100/10;
//十
d=ttt%100%10;
//个
w4=0; P1=seg[d]; delay(); w4=1; delay();
w3=0; P1=seg[c]; delay(); w3=1; delay();
w2=0; P1=seg[b]; delay(); w2=1; delay();
st = 1; if(st)
//如果 st 为 1 执行下面的步骤
{
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
if(CodingsWitch_A==0&&CodingsWitch_B==0) //如果两引脚都为低执行下面
{ if(Bold)
//为高说明编码开关在向加大的方向转
{
static uchar Aold,Bold; //两个变量用来储存上一次调用时编码开关两引脚的电平
static uchar st=0;
//用来储存以前是否出现了两个引脚都为高电平的状态
static uint tmp=0;
// ***这 3 个均为静态变量,以便保持上次结果***
if(CodingsWitch_A&&CodingsWitch_B)
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
w1=w2=w3=w4=1; /* 关闭 4 数码管 */
while(1)
{
ttt=CodingsWitchPolling(); //调用编码开关函数
a=ttt/1000; //把二进制转化为 4 位 BCD 码,以便显示在数码管上,这是千位
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
EC11 带按键旋转编码开关及其演示程序
旋转编码开关(Rotary Encoder switch)分带按键和不带按键两种,又分一圈 20 脉冲和 30 脉冲输出两种。前者使用 5 脚的,后面一个使用 3 脚的。大家可能对这种玩意都不是很了解, 但这个玩意已大量开始应用于家电的设定、仪表的设定和一键飞梭遥控中,是单片机系统经 济美观的人机界面,因为可以省去按键了。
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
sbit CodingsWitch_A=P1^7; //B 脚定义(即 3 脚) /* 数码管的段码定义*/
/* P1.7 此时固定为 1 */ /* h c b f a g d e /* P2.0 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 */ /* 1 0 0 1 1 1 1 1
*/
'1' 0x9f '2' 0xd0 '3' 0x91 '4' 0x8b '5' 0xa1 '6' 0xa0 '7' 0x97 '8' 0x80 '9' 0x81 '0' 0x84
w1=0;
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
P1=seg[a]; delay(); w1=1; delay();
} }
/* 延时函数 */ /* 如果把 i 改为 1,试试是啥效果:静态显示 4 位数 4321 */ void delay(void) {
uchar i,j,k; for(i=0;i<1;i++)
for(j=0;j<15;j++) for(k=0;k<250;k++) ;
}
//旋转编码开关处理函数 //顺时针计数值增加,逆时针计数值减少,这里上限是 9999,高于清 0 //此函数没有包括按键处理部分
uint CodingsWitchPolling(void)//
本人看到这种按钮非常激动,第 1 时间从淘宝网买了 10 个(3 元一个,配旋钮等 4 元 1 个),连夜进行焊接和程序的调试,终于成功。程序是从网上下载的,但发现有错,现已 改正。
现上两图,以飨读者。 图一:开关实物照片(反面)
图二:开关与单片机实验系统 V2 版本(沈红卫课程教学用)的演示照片
旋钮,可左 转右转
一起来吧!
/* EC11 系列旋转编码开关演示程序
Baidu Nhomakorabea*/
/* 把旋转开关旋转产生的脉冲数依次在 4 个数码管上显示
*/
/* 绍兴文理学院自动化教研室 沈红卫
*/
/* 2010 年 11 月 2 日
*/
/* CPU: STC12C 系列
*/
/* 主频:12M
*/
#include <stc12c5410ad.h> /* 这是所用单片机头文件,必须包含*/
Bold = CodingsWitch_B; return tmp;
// //返回计数值
}
#define uchar unsigned char #define uint unsigned int
/* 数码管的控制引脚定义 */
sbit w4=P2^1;
/* 第 4 个数码管的共阳极控制*/
sbit w2=P3^7;
sbit w3=P2^7;
sbit w1=P2^6;
/* 定义编码开关控制引脚 */ //中间脚(第 2 脚)接地 sbit CodingsWitch_B=P2^3; //A 脚定义(即 1 脚) 这两脚必须接 10K 上拉电阻
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
这种开关可方便地应用单片机系统中,成为一个人机交流界面。具体应用程序可根据 需要自己编写。
以下是在单片机实验系统 V2(也可应用于 V1)(沈红卫开发,用于课程教学)实现的 范例程序,供大家应用时参考,希望大家能喜欢。
{
st = 0;
if(tmp==9999)
tmp=0;
else
tmp++;
//
} if(Aold)
//为高说明编码开关在向减小的方向转
{
st = 0;
if(tmp==0)
tmp=9999;
else tmp--;
//设返回值
}
}
} Aold = CodingsWitch_A;
//保持这次检测的电平,以备下次调用比较用
*/
uchar seg[10]={0x84,0x9f,0xd0,0x91,0x8b,0xa1,0xa0,0x97,0x80,0x81};
//函数说明 void delay(void); uint CodingsWitchPolling(void);
//主函数 void main(void) {
uint ttt=2345; uchar a,b,c,d;
b=ttt%1000/100;
//百位
c=ttt%100/10;
//十
d=ttt%100%10;
//个
w4=0; P1=seg[d]; delay(); w4=1; delay();
w3=0; P1=seg[c]; delay(); w3=1; delay();
w2=0; P1=seg[b]; delay(); w2=1; delay();
st = 1; if(st)
//如果 st 为 1 执行下面的步骤
{
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
if(CodingsWitch_A==0&&CodingsWitch_B==0) //如果两引脚都为低执行下面
{ if(Bold)
//为高说明编码开关在向加大的方向转
{
static uchar Aold,Bold; //两个变量用来储存上一次调用时编码开关两引脚的电平
static uchar st=0;
//用来储存以前是否出现了两个引脚都为高电平的状态
static uint tmp=0;
// ***这 3 个均为静态变量,以便保持上次结果***
if(CodingsWitch_A&&CodingsWitch_B)
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
w1=w2=w3=w4=1; /* 关闭 4 数码管 */
while(1)
{
ttt=CodingsWitchPolling(); //调用编码开关函数
a=ttt/1000; //把二进制转化为 4 位 BCD 码,以便显示在数码管上,这是千位
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
EC11 带按键旋转编码开关及其演示程序
旋转编码开关(Rotary Encoder switch)分带按键和不带按键两种,又分一圈 20 脉冲和 30 脉冲输出两种。前者使用 5 脚的,后面一个使用 3 脚的。大家可能对这种玩意都不是很了解, 但这个玩意已大量开始应用于家电的设定、仪表的设定和一键飞梭遥控中,是单片机系统经 济美观的人机界面,因为可以省去按键了。
EC11 带按键旋转编码开关及其演示程序 沈红卫 绍兴文理学院 2010 年 11 月
sbit CodingsWitch_A=P1^7; //B 脚定义(即 3 脚) /* 数码管的段码定义*/
/* P1.7 此时固定为 1 */ /* h c b f a g d e /* P2.0 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 */ /* 1 0 0 1 1 1 1 1