51单片机数字旋转编码器内部原理应用与实现
1.数字旋转编码器
可实现按下确认,旋转加减。
不按状态为高电平,按下为低电平。
时序图:
顺时针 逆时针
A B A B
1 1 1 1
0 1 1 0
0 0 0 0
1 0 0 1文章来源:https://www.toymoban.com/news/detail-654594.html
电路原理图如下所示:
实现程序如下图所示:效果不错,无丢数情况,很顺畅。功能顺时针加1逆时针减1,按下清0.哈哈哈。挺好玩的,可以试试。使用查询方式。利用边沿检测进行编程:文章来源地址https://www.toymoban.com/news/detail-654594.html
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/*
* 定义引脚
*/
/* 595控制数码管时钟信号线引脚定义 */
sbit HC595CLK = P1^1;
/* 595控制数码管片选信号线引脚定义 */
sbit HC595RCK = P1^0;
/* 595控制数码管数据输入引脚定义 */
sbit HC595DATA = P1^4;
sbit Pin_Portry_A = P2^0;
sbit Pin_Portry_B = P2^1;
sbit Pin_Poetry_Sd = P2^2;
code unsigned char ucDis_Segmentcode[16] = {
0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 位码表 */
code unsigned char ucDis_Bitcode[8] = {
0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};
uchar dis_XS[8] = {
0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d};
uchar Last_Bmb_Status;
uchar Current_Bmb_Status;
uchar Sd_Flag = 0;
uchar Sd_Key_Value = 0;
void Send_Data(unsigned int uiDataOne, unsigned int uiDataTwo);
//此段代码为了消除最后一位数码管过亮设计
void display()
{
static uchar i;
dis_XS[0] = ucDis_Segmentcode[Sd_Key_Value/100]; //百位
dis_XS[1] = ucDis_Segmentcode[Sd_Key_Value%100/10]; //十位
dis_XS[2] = ucDis_Segmentcode[Sd_Key_Value%10]; //个位
if(i < 2)
{
i++;
}
else
{
i = 0;
}
Send_Data(dis_XS[i], ucDis_Bitcode[i]);
}
/********************************
到了这里,关于51单片机数字旋转编码器内部原理应用与实现------day5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!