旋转编码器程序Word文档下载推荐.docx
- 文档编号:22383192
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:25
- 大小:20.14KB
旋转编码器程序Word文档下载推荐.docx
《旋转编码器程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《旋转编码器程序Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
//静音存储用的
u_int8PID_MID=0;
u_int16gbX9C102_Data_MID;
constintKeyCode[8]={
0x47,0x4f,0x57,0x5f,0x67,0x6f,0x77
};
typedefstruct_led_bitmap
{
u_int8character;
u_int8bitmap;
}led_bitmap;
constled_bitmapBCD_decode_tab[LEDMAPNUM]=
{
{'
0'
0x3F},{'
1'
0x06},{'
2'
0x5B},{'
3'
0x4F},
4'
0x66},{'
5'
0x6D},{'
6'
0x7D},{'
7'
0x07},
8'
0x7F},{'
9'
0x6F},{'
a'
0x77},{'
A'
0x77},
b'
0x7C},{'
B'
c'
0x58},{'
C'
0x39},
d'
0x5E},{'
D'
e'
0x79},{'
E'
0x79},
f'
0x71},{'
F'
0x71}
};
//BCD码字映射
/************************************************
SCLPC0
SDAPC1
************************************************/
//立即数码值映射
u_int8bLEDTable[]=
0x3F,//b00000011"
0"
0x06,//b10011111"
1"
0x5B,//b00100001"
2"
0x4F,//b00001101"
3"
0x66,//b10001000"
4"
0x6D,//b01001001"
5"
0x7D,//b01000001"
6"
0x07,//b00011111"
7"
0x7F,//b00000001"
8"
0x6F,//b00001001"
9"
0x77,//b00010001"
A"
0x7C,//b11000001"
b"
0x39,//b01100011"
C"
0x5E,//b10000101"
d"
0x79,//b01100001"
E"
0x71,//b01110001"
F"
/****************************************************************
*
*FunctionName:
FD650_Start
*Description:
*Parameter:
*return:
****************************************************************/
voidFD650_Start(void)
FD650_SDA_SET();
FD650_SDA_D_OUT;
FD650_SCL_SET();
FD650_SCL_D_OUT;
DELAY;
FD650_SDA_CLR();
FD650_SCL_CLR();
}
FD650_Stop
voidFD650_Stop(void)
FD650_SDA_D_IN();
FD650_WrByte
WriteOneBytedata
data
voidFD650_WrByte(u_int8dat)
u_int8i;
for(i=0;
i!
=8;
i++)
{
if(dat&
0x80)
{
FD650_SDA_SET();
}
else
FD650_SDA_CLR();
DELAY;
FD650_SCL_SET();
dat<
=1;
//可选延时
FD650_SCL_CLR();
}
ReadOneBytedata
data
u_int8FD650_RdByte(void)
u_int8dat,i;
dat=0;
if(FD650_SDA)
dat++;
};
returndat;
/****************************************FD650操作函数*********************************************/
FD650_Write
通过发送命令参数
DIG0:
0x28h
DIG1:
0x2ah
DIG2:
0x2Ch
DIG3:
0x2Eh
cmd见FD650.H
无
voidFD650_Write(u_int16cmd)//写命令
FD650_Start();
FD650_WrByte(((u_int8)(cmd>
>
7)&
0x3E)|0x40);
//高7位写&
00111110|01000000
FD650_WrByte((u_int8)cmd);
FD650_Stop();
return;
FD650_Read
读取按键按下状态的键值,如读到无效按键值返回0
无
按键按下状态的键值
/*u_int8FD650_Read(void)//读取按键
u_int8keycode=0;
FD650_WrByte((u_int8)(FD650_GET_KEY>
0x3E|0x01|0x40);
//00111110|00000001|01000000
keycode=FD650_RdByte();
if(keycode&
0x40==0)
keycode=0;
returnkeycode;
}*/
/********************应用**********************************/
Led_Get_Code
转换字符为数码管的显示码,如遇到无法转换的字符返回0
cTemp待转换为显示码的字符
显示码值
staticu_int8Led_Get_Code(charcTemp)
u_int8i,bitmap=0x00;
for(i=0;
i<
LEDMAPNUM;
i++)
if(BCD_decode_tab[i].character==cTemp)//字符和其相等吗,相等则后面码值
bitmap=BCD_decode_tab[i].bitmap;
//显示码送出
break;
returnbitmap;
/******************************************************
Led_Show_650
简单的数码管显示应用示例
acFPStr显示的字符串;
*sec_flag开启小数点标志位;
*Lock开启锁定灯;
*Stdby开启待机显示灯;
//voidLed_Show_650(char*acFPStr,unsignedcharsec_flag,unsignedcharLock,unsignedcharStdby)
voidLed_Show_650(unsignedcharsec_flag,unsignedcharLock,unsignedcharStdby)
inti,Data,iLenth,Energy_1,Energy_2,Energy_3,Energy_4;
intdat_a[4]={0x00,0x00,0x00,0x00};
/*if(strcmp(acFPStr,"
"
)==0)//比较字符串大小,如果和空格相等则返回
return;
iLenth=strlen(acFPStr);
//计算字符串长度
if(iLenth>
4)
iLenth=4;
//只显示4位
iLenth;
dat_a[i]=Led_Get_Code(acFPStr[i]);
//字符串转换为数组
}*/
//gbData=gbData;
//删除
Energy_1=gbData/1000;
Data=gbData%1000;
if(Energy_1>
9)
Energy_1=0x0E;
//若值大于9999则显示E开头
Energy_2=Data/100;
Data=Data%100;
Energy_3=Data/10;
Data=Data%10;
Energy_4=Data;
Data=Data%1000;
dat_a[0]=bLEDTable[Energy_1];
//第一个LED显示的值
dat_a[1]=bLEDTable[Energy_2];
//第二个LED显示的值
dat_a[2]=bLEDTable[Energy_3];
//第三个LED显示的值
dat_a[3]=bLEDTable[Energy_4];
//第四个LED显示的值
FD650_Write(FD650_SYSON_4);
//开启显示和键盘,8段显示方式
//发显示数据
FD650_Write(FD650_DIG0|(u_int8)dat_a[0]);
//点亮第一个数码管
if(sec_flag)
FD650_Write(FD650_DIG1|(u_int8)dat_a[1]|FD650_DOT);
//点亮第二个数码管
else
FD650_Write(FD650_DIG1|(u_int8)dat_a[1]);
if(Lock)
FD650_Write(FD650_DIG2|(u_int8)dat_a[2]|FD650_DOT);
//点亮第三个数码管
else
FD650_Write(FD650_DIG2|(u_int8)dat_a[2]);
if(Stdby)
FD650_Write(FD650_DIG3|(u_int8)dat_a[3]|FD650_DOT);
//点亮第四个数码管
FD650_Write(FD650_DIG3|(u_int8)dat_a[3]);
/*******************************************************************************/
//全局数据和数字电位器之间的转换;
/******************************************************************************/
voidX9C102_Change(void)
if(gbData>
99)
gbData=99;
//若值大于99则等于99
/***********************************************************************************************/
voidX9C102_WD(void);
//声明
//延时程序us级
voiddelay_us(u_int16t)
u_int16i;
i<
t;
i++)
;
//X9C102初始化
voidX9C102_csh(void)
gbmode=0;
gbsave=1;
//1保存。
0不保存
X9C102_WD();
//向下调99步至0
/*************************************************/
//gbData=50;
gbData=gbcounter;
gbmode=1;
//向上调节
//数字电位器调整:
gbX9C102_Data为调整步数;
//mode为方向选择为‘1’时向上,为‘0’时向下;
//save为存储有效‘1’存,‘0’不存;
voidX9C102_WD(void)
u_int16j,k;
CS_SCL_CLR();
//片选
if(gbmode!
=0)//上调
{UD_SCL_SET();
//上调有效
delay_us
(1);
for(k=gbData;
k>
0;
k--)
//for(k=1;
k--)//测试
INC_SCL_SET();
delay_us
(1);
INC_SCL_CLR();
delay_us
(2);
//等待输出稳定
delay_us(10);
if(gbsave==1)
INC_SCL_SET();
//存储滑动端位置
CS_SCL_SET();
}//不存储,返回等待
if(gbmode==0)//下调
{UD_SCL_CLR();
//下调有效
//for(k=1;
delay_us
(2);
}//不存储,返回等待
/**************************************************************************************/
//LED测试函数
voidLedTest(void)
Led_Show_650(0,1,1);
/************************************************************************************/
//旋转编码器检测程序
/***************************************************************************************/
/*voidscan_encoder(void)
if(updata1==1&
&
R0IOShadow0==0)//判断前后状态以识别是否发生下降沿
if(R0IOShadow2==0)//判断另一相电平
{
if(gbcounter==99)
gbcounter++;
//为高,正转
}
else
if(gbcounter==0)
gbcounter--;
//为低,反转
}
updata1=R0IOShadow0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 旋转 编码器 程序