📄 digitalcoder.c
字号:
#ifndef MSP430F449_H
#include <msp430x44x.h>
#endif
#define LEDLen 12
void LedDisply(void);
//void Channel_Number(void);
unsigned char CURT_SELT,VOLE_SELT,CHAN_SELT;
unsigned char Right_Rotate,Left_Rotate;
unsigned char Hundred,Ten,Digital;
unsigned char pre_vlaue; //used to svae the last value of the coder
extern unsigned char LEDBuf[LEDLen]; // 显示缓冲
extern unsigned char current[6]; //useed to read and write between the 24c16
extern unsigned char voltage[9];
unsigned char channel[2];
extern const unsigned char NUM_LED[10];
extern unsigned int speed;
void Channel_Display(void)
{
if(CURT_SELT==1)
{
switch(LEDBuf[8]&0x30)
{
case 0x20: //current
current[0] = Hundred;
current[1] = Ten;
current[2] = Digital;
LEDBuf[0] = NUM_LED[current[0]];
LEDBuf[1] = NUM_LED[current[1]];
LEDBuf[2] = NUM_LED[current[2]];
LedDisply();
break;
case 0x10: //thick
current[3] = Hundred;
current[4] = Ten;
current[5] = Digital;
LEDBuf[0] = NUM_LED[current[3]];
LEDBuf[1] = NUM_LED[current[4]];
LEDBuf[2] = NUM_LED[current[5]];
LedDisply();
break;
default:
break;
}
}
else if(VOLE_SELT==1)
{
switch(LEDBuf[8]&0x0e)
{
case 0x08: //voltage
voltage[0] = Hundred;
voltage[1] = Ten;
voltage[2] = Digital;
LEDBuf[3] = NUM_LED[voltage[0]];
LEDBuf[4] = NUM_LED[voltage[1]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[2]];
LedDisply();
break;
case 0x04: //length
voltage[3] = Hundred;
voltage[4] = Ten;
voltage[5] = Digital;
LEDBuf[3] = NUM_LED[voltage[3]];
LEDBuf[4] = NUM_LED[voltage[4]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[5]];
LedDisply();
break;
case 0x02: //arc_force
voltage[6] = Hundred;
voltage[7] = Ten;
voltage[8] = Digital;
LEDBuf[3] = NUM_LED[voltage[6]];
LEDBuf[4] = NUM_LED[voltage[7]]&0x7F;
LEDBuf[5] = NUM_LED[voltage[8]];
LedDisply();
speed=100*Hundred+10*Ten+Digital;
break;
default:
break;
}
}
else if(CHAN_SELT==1)
{
//switch(LEDBuf[8])
//{
//case 0x01: //channel
channel[0] = Ten;
channel[1] = Digital;
LEDBuf[6] = NUM_LED[channel[0]];
LEDBuf[7] = NUM_LED[channel[1]];
LedDisply();
}
}
void Add_Number(void)
{
if(CURT_SELT==1 || VOLE_SELT==1)
{
if(Digital>=0 && Digital<9)
Digital++;
else if(Digital==9)
{
if(Ten>=0 && Ten<9)
{
Ten++;
Digital = 0;
}
else if(Ten==9)
{
if(Hundred>=0 && Hundred<9)
{
Hundred++;
Ten = 0;
Digital = 0;
}
else if(Hundred==9)
{
Digital = 0;
Ten = 0;
Hundred = 0;
}
}
}
}
else if(CHAN_SELT==1)
{
if(Digital>=0 && Digital<9)
Digital++;
else if(Digital==9)
{
if(Ten>=0 && Ten<9)
{
Ten++;
Digital = 0;
}
else if(Ten==9)
{
Ten = 0;
Digital = 0;
}
}
}
Channel_Display();
}
void Dec_Number(void)
{
if(CURT_SELT==1 || VOLE_SELT==1)
{
if(Digital>0 && Digital<=9)
Digital--;
else if(Digital==0)
{
if(Ten>0 && Ten<=9)
{
Ten--;
Digital = 9;
}
else if(Ten==0)
{
if(Hundred>0 && Hundred<=9)
{
Hundred--;
Ten = 9;
Digital = 9;
}
else if(Hundred==0)
{
Digital = 9;
Ten = 9;
Hundred = 9;
}
}
}
}
else if(CHAN_SELT==1)
{
if(Digital>0 && Digital<=9)
Digital--;
else if(Digital==0)
{
if(Ten>0 && Ten<=9)
{
Ten--;
Digital = 9;
}
else if(Ten==0)
{
Ten = 9;
Digital = 9;
}
}
}
Channel_Display();
}
void Left_Or_Right(void)
{
if(Right_Rotate==1)
Add_Number();
else if(Left_Rotate==1)
Dec_Number();
}
void Num_Rotate(void)
{
if(CURT_SELT==1)
{
switch(LEDBuf[8]&0x30)
{
case 0x20: //current
Hundred = current[0];
Ten = current[1];
Digital = current[2];
Left_Or_Right();
break;
case 0x10: //thick
Hundred = current[3];
Ten = current[4];
Digital = current[5];
Left_Or_Right();
break;
default:
break;
}
}
else if(VOLE_SELT==1)
{
switch(LEDBuf[8]&0x0e)
{
case 0x08: //voltage
Hundred = voltage[0];
Ten = voltage[1];
Digital = voltage[2];
Left_Or_Right();
break;
case 0x04: //length
Hundred = voltage[3];
Ten = voltage[4];
Digital = voltage[5];
Left_Or_Right();
break;
case 0x02: //arc_force
Hundred = voltage[6];
Ten = voltage[7];
Digital = voltage[8];
Left_Or_Right();
break;
default:
break;
}
}
else if(CHAN_SELT==1)
{
//switch(LEDBuf[10])
//{
//case 0xc0: //frequent
Ten = channel[0];
Digital = channel[1];
Left_Or_Right();
}
}
void CoderRead(void)
{
unsigned char value_in,value_temp;
//process the coder's data
value_in = P4IN;
pre_vlaue = pre_vlaue << 2;
value_in = value_in >> 6;
value_temp = value_in | pre_vlaue;
pre_vlaue = value_in;
//judge the state: 11 01 00 10 11 is left-truning and 11 10 00 01 11 is right-turning
//there are several case that we can judge whether is it left or right turning
//left-turning: 1011 1101 0100 0010 and right-truning: 0111 1110 1000 0001
//Note:There are several conditions to judge turn left or right, We need judge only one of them,
//then it must trun out
if(value_temp==0x0e) //0x0E:right-truning
{
Right_Rotate = 1;
Left_Rotate = 0;
Num_Rotate();
return;
}
else
{
if(value_temp==0x0b) //0x0B:left-turning
{
Right_Rotate = 0;
Left_Rotate = 1;
Num_Rotate();
return;
}
else
if(value_temp==0x07) //0x07:right-truning
{
Right_Rotate = 1;
Left_Rotate = 0;
Num_Rotate();
return;
}
else
{
if(value_temp==0x0d) //0x0D:left-turning
{
Right_Rotate = 0;
Left_Rotate = 1;
Num_Rotate();
return;
}
else
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -