📄 c_demo.c
字号:
int mainwl;
uchar i;
_x_ = X[0]/(X[0] + Y[0] + Z[0]);
_y_ = Y[0]/(X[0] + Y[0] + Z[0]);
mainwl = wavelength(_x_, _y_);
clslcd();
for (i=0; i<3; i++)
{
dis1616(*(mwl+i), 5+2*i, 0);
}
if (mainwl >= 0)
{
dis816(lambda, 5, 4);
dis816(blank, 6, 4);
dis816(equal, 7, 4);
dis816(blank, 8, 4);
dis_int(mainwl, 9, 4);
}
else
{
dis816(lambda, 5, 4);
dis816(blank, 6, 4);
dis816(equal, 7, 4);
dis816(blank, 8, 4);
dis816(minus, 9, 4);
dis_int(-mainwl, 10, 4);
}
}
/***************************************************************************
* 函数原型:void MeaE(void);
* 函数功能:测量色差开始。
***************************************************************************/
void MeaE(void)
{
uchar status = 0;
uchar key;
dis_blank();
while (1)
{
key = getkey();
if (key == Enter)
{
if(status < 5)
{
status++;
}
switch (status)
{
case 1: MeaE1();break;
case 2: MeaE2();break;
case 3: MeaE3();break;
case 4: MeaE4();break;
default:break;
}
}
if (key == Esc)
{
dis_menu();
dis_arrow(1);
break;
}
}
}
/***************************************************************************
* 函数原型:void MeaE1(void);
* 函数功能:测量色差步骤1。
***************************************************************************/
void MeaE1(void)
{
dis_wait();
Ir0 = measure(RED) - I0;
Ig0 = measure(GREEN) - I0;
Ib0 = measure(BLUE) - I0;
dis_samples(1);
}
/***************************************************************************
* 函数原型:void MeaE2(void);
* 函数功能:测量色差步骤2。
***************************************************************************/
void MeaE2(void)
{
float Ar1, Ag1, Ab1;
dis_wait();
Ar1 = (measure(RED)-I0)/(float)Ir0;
Ag1 = (measure(GREEN)-I0)/(float)Ig0;
Ab1 = (measure(BLUE)-I0)/(float)Ib0;
color(Ar1, Ag1, Ab1, 0);
dis_samples(2);
}
/***************************************************************************
* 函数原型:void MeaE3(void);
* 函数功能:测量色差步骤3。
***************************************************************************/
void MeaE3(void)
{
float Ar1, Ag1, Ab1;
dis_wait();
Ar1 = (measure(RED)-I0)/(float)Ir0;
Ag1 = (measure(GREEN)-I0)/(float)Ig0;
Ab1 = (measure(BLUE)-I0)/(float)Ib0;
color(Ar1, Ag1, Ab1, 1);
MeaE4();
}
/***************************************************************************
* 函数原型:void MeaE4(void);
* 函数功能:测量色差步骤4。
***************************************************************************/
void MeaE4(void)
{
float E;
uchar i;
clslcd();
dis1616(*title, 5, 0);
dis1616(*(title+2), 7, 0);
dis1616(*(tris+3), 9, 0);
E = Eab();
for (i=0; i<3; i++)
{
dis816(*(eabuv+i), 2+i, 3);
}
dis816(blank, 5, 3);
dis816(equal, 6, 3);
dis816(blank, 7, 3);
dis_float(E, 8, 3);
E = Euv();
dis816(*eabuv, 2, 5);
dis816(*(eabuv+3), 3, 5);
dis816(*(eabuv+4), 4, 5);
dis816(blank, 5, 5);
dis816(equal, 6, 5);
dis816(blank, 7, 5);
dis_float(E, 8, 5);
}
/***************************************************************************
* 函数原型:void ChangeTime(void);
* 函数功能:设定时间。
***************************************************************************/
void ChangeTime(void)
{
uchar clock[7];
uchar temp;
uchar status = 0;
GetClk(clock);
dis_clock(clock);
while (1)
{
switch (getkey())
{
case Up:
switch (status)
{
case 0:
temp = BCD_B(clock[6]);
temp++;
if (temp > 99)
{
temp = 0;
}
clock[6] = B_BCD(temp);
dis816(blank, 3, 2);
dis816(blank, 4, 2);
dis816(*(number_dark+(clock[6]>>4)), 3, 2);
dis816(*(number_dark+(clock[6]&0x0f)), 4, 2);
break;
case 1:
temp = BCD_B(clock[4]);
temp++;
if (temp > 12)
{
temp = 1;
}
clock[4] = B_BCD(temp);
dis816(blank, 7, 2);
dis816(blank, 8, 2);
dis816(*(number_dark+(clock[4]>>4)), 7, 2);
dis816(*(number_dark+(clock[4]&0x0f)), 8, 2);
break;
case 2:
temp = BCD_B(clock[3]);
temp++;
if ((clock[4]==1||clock[4]==3||clock[4]==5||clock[4]==7||clock[4]==8||clock[4]==10||clock[4]==12)
&&(temp > 31))
{
temp = 1;
}
if ((clock[4]==4||clock[4]==6||clock[4]==9||clock[4]==11)&&(temp > 30))
{
temp = 1;
}
if ((clock[4]==2)&&(clock[6]%4!=0)&&(temp > 28))
{
temp = 1;
}
if ((clock[4]==2)&&(clock[6]%4==0)&&(temp > 29))
{
temp = 1;
}
clock[3] = B_BCD(temp);
dis816(blank, 11, 2);
dis816(blank, 12, 2);
dis816(*(number_dark+(clock[3]>>4)), 11, 2);
dis816(*(number_dark+(clock[3]&0x0f)), 12, 2);
break;
case 3:
temp = BCD_B(clock[2]);
temp++;
if (temp > 23)
{
temp = 0;
}
clock[2] = B_BCD(temp);
dis816(blank, 4, 4);
dis816(blank, 5, 4);
dis816(*(number_dark+(clock[2]>>4)), 4, 4);
dis816(*(number_dark+(clock[2]&0x0f)), 5, 4);
break;
case 4:
temp = BCD_B(clock[1]);
temp++;
if (temp > 59)
{
temp = 0;
}
clock[1] = B_BCD(temp);
dis816(blank, 7, 4);
dis816(blank, 8, 4);
dis816(*(number_dark+(clock[1]>>4)), 7, 4);
dis816(*(number_dark+(clock[1]&0x0f)), 8, 4);
break;
case 5:
temp = BCD_B(clock[0]);
temp++;
if (temp > 59)
{
temp = 0;
}
clock[0] = B_BCD(temp);
dis816(blank, 10, 4);
dis816(blank, 11, 4);
dis816(*(number_dark+(clock[0]>>4)), 10, 4);
dis816(*(number_dark+(clock[0]&0x0f)), 11, 4);
break;
default:
break;
}
break;
case Down:
switch(status)
{
case 0:
temp = BCD_B(clock[6]);
temp--;
if (temp == 0xff)
{
temp = 99;
}
clock[6] = B_BCD(temp);
dis816(blank, 3, 2);
dis816(blank, 4, 2);
dis816(*(number_dark+(clock[6]>>4)), 3, 2);
dis816(*(number_dark+(clock[6]&0x0f)), 4, 2);
break;
case 1:
temp = BCD_B(clock[4]);
temp--;
if (temp == 0xff)
{
temp = 12;
}
clock[4] = B_BCD(temp);
dis816(blank, 7, 2);
dis816(blank, 8, 2);
dis816(*(number_dark+(clock[4]>>4)), 7, 2);
dis816(*(number_dark+(clock[4]&0x0f)), 8, 2);
break;
case 2:
temp = BCD_B(clock[3]);
temp--;
if ((clock[4]==1||clock[4]==3||clock[4]==5||clock[4]==7||clock[4]==8||clock[4]==10||clock[4]==12)
&&(temp < 1))
{
temp = 31;
}
if ((clock[4]==4||clock[4]==6||clock[4]==9||clock[4]==11)&&(temp < 1))
{
temp = 30;
}
if ((clock[4]==2)&&(clock[6]%4!=0)&&(temp<1))
{
temp = 28;
}
if ((clock[4]==2)&&(clock[6]%4==0)&&(temp<1))
{
temp = 29;
}
clock[3] = B_BCD(temp);
dis816(blank, 11, 2);
dis816(blank, 12, 2);
dis816(*(number_dark+(clock[3]>>4)), 11, 2);
dis816(*(number_dark+(clock[3]&0x0f)), 12, 2);
break;
case 3:
temp = BCD_B(clock[2]);
temp--;
if (temp == 0xff)
{
temp = 23;
}
clock[2] = B_BCD(temp);
dis816(blank, 4, 4);
dis816(blank, 5, 4);
dis816(*(number_dark+(clock[2]>>4)), 4, 4);
dis816(*(number_dark+(clock[2]&0x0f)), 5, 4);
break;
case 4:
temp = BCD_B(clock[1]);
temp--;
if (temp == 0xff)
{
temp = 59;
}
clock[1] = B_BCD(temp);
dis816(blank, 7, 4);
dis816(blank, 8, 4);
dis816(*(number_dark+(clock[1]>>4)), 7, 4);
dis816(*(number_dark+(clock[1]&0x0f)), 8, 4);
break;
case 5:
temp = BCD_B(clock[0]);
temp--;
if (temp == 0xff)
{
temp = 59;
}
clock[0] = B_BCD(temp);
dis816(blank, 10, 4);
dis816(blank, 11, 4);
dis816(*(number_dark+(clock[0]>>4)), 10, 4);
dis816(*(number_dark+(clock[0]&0x0f)), 11, 4);
break;
default:
break;
}
break;
case Enter:
switch(status)
{
case 0:
status++;
dis816(blank, 3, 2);
dis816(blank, 4, 2);
dis816(*(number+(clock[6]>>4)), 3, 2);
dis816(*(number+(clock[6]&0x0f)), 4, 2);
dis816(blank, 7, 2);
dis816(blank, 8, 2);
dis816(*(number_dark+(clock[4]>>4)), 7, 2);
dis816(*(number_dark+(clock[4]&0x0f)), 8, 2);
break;
case 1:
status++;
dis816(blank, 7, 2);
dis816(blank, 8, 2);
dis816(*(number+(clock[4]>>4)), 7, 2);
dis816(*(number+(clock[4]&0x0f)), 8, 2);
dis816(blank, 11, 2);
dis816(blank, 12, 2);
dis816(*(number_dark+(clock[3]>>4)), 11, 2);
dis816(*(number_dark+(clock[3]&0x0f)), 12, 2);
break;
case 2:
status++;
dis816(blank, 11, 2);
dis816(blank, 12, 2);
dis816(*(number+(clock[3]>>4)), 11, 2);
dis816(*(number+(clock[3]&0x0f)), 12, 2);
dis816(blank, 4, 4);
dis816(blank, 5, 4);
dis816(*(number_dark+(clock[2]>>4)), 4, 4);
dis816(*(number_dark+(clock[2]&0x0f)), 5, 4);
break;
case 3:
status++;
dis816(blank, 4, 4);
dis816(blank, 5, 4);
dis816(*(number+(clock[2]>>4)), 4, 4);
dis816(*(number+(clock[2]&0x0f)), 5, 4);
dis816(blank, 7, 4);
dis816(blank, 8, 4);
dis816(*(number_dark+(clock[1]>>4)), 7, 4);
dis816(*(number_dark+(clock[1]&0x0f)), 8, 4);
break;
case 4:
status++;
dis816(blank, 7, 4);
dis816(blank, 8, 4);
dis816(*(number+(clock[1]>>4)), 7, 4);
dis816(*(number+(clock[1]&0x0f)), 8, 4);
dis816(blank, 10, 4);
dis816(blank, 11, 4);
dis816(*(number_dark+(clock[0]>>4)), 10, 4);
dis816(*(number_dark+(clock[0]&0x0f)), 11, 4);
break;
case 5:
status++;
SetClk(clock);
break;
default:
break;
}
break;
case Esc:
status = 6;
break;
default:
break;
}
if (status > 5)
{
break;
}
}
dis_menu();
dis_arrow(2);
}
/***** 按键 *****/
/***************************************************************************
* 函数原型:uchar getkey(void);
* 函数功能:扫描按键,并且返回按键码。
***************************************************************************/
uchar getkey(void)
{
uchar keycode;
uchar i,key;
key = (PC&0x1f);
if (key != 0x1f)
{
delay(5);
key = (PC&0x1f);
if (key != 0x1f)
{
for (i=1; i<6; i++)
{
if ((key&0x01) == 0)
{
keycode = i;
break;
}
key >>= 1;
}
while (1)
{
key = (PC&0x1f);
if (key == 0x1f)
{
break;
}
}
}
}
else
{
keycode = 0;
}
return keycode;
}
/***************************************************************************
* 函数原型:void color(float Ir, float Ig, float Ib, uchar i);
* 函数功能:本函数计算待测溶液颜色三刺激值及色品座标。
***************************************************************************/
void mulmatrix(float Ir, float Ig, float Ib, uchar i, K_RGB *p)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -