📄 tlc1543.c
字号:
{
if (DJ_back == False)
{
if (V_ml < 1) goto KG5;
DJ_back = 1; TXD_c(1);
}
}
KG1: if (P_max2 < Adend) P_max2 = Adend;
if (C_run)
{
C_run = False;
if (DJ_back)
{
if (b >= 10)
{
if (Adend > P_max) goto KG5; /* 如果后退1ML,还大于设定压力.则停止 */
DJ_back = 0; TXD_c(2); b += 2;
}
else b++;
if (V_ml <= 1) /* 如果后退时总输液量小于0.1ML时,则停止 */
{
if (Adend > P_max) goto KG5;
DJ_back = 0; TXD_c(2);
}
}
else { if (b > 0) b--; }
if (DJ_back==0 && b==0) Disp_2(Adend / 3);
if (over == 0) Display(23, 7 , 3, 5, V_ml, 1);
if (V_ml >= 100)
{
DJ_run = 0; TR0 = 0; ET0 = 0; TXD_c(3); over = 1;
Disp_msg(16, 16, 11);
do { i = RXD_c(); } while (i == 0);
goto KG4;
}
}
if (DJ_run)
{
if (Paus == False)
{
if (pause == False) {pause = True;TR0 = False;ET0 = False;TXD_c(3);Disp_msg(16, 16, 2);}
}
else
{
if (pause) {pause = False;TR0 = True;ET0 = True;TXD_c(2);Disp_msg(16, 16, 1);}
}
}
i = RXD_c();
if (i == 4)
{
if (DJ_run == True)
{
DJ_run = False;TR0 = False;ET0 = False; TXD_c(3);
Disp_msg(16,16,2);
continue;
}
DJ_run = 1; TR0 = 1; ET0 = 1; TXD_c(2);
Disp_msg(16, 16, 1);
}
if (i == 1) { if (P_max < 500) P_max += 10; }
if (i == 2) { if (P_max > 260) P_max -= 10; }
} while(i != 5);
KG5: Disp_msg(16, 16, 4); TXD_c(3); DJ_run = 0; TR0 = 0; ET0 = 0;
do
{
i = RXD_c();
if (i == 5) { TXD_c(2); Disp_msg(16, 16, 1); DJ_run = 1; TR0 = 1;ET0 = 1; goto KG1; }
if (i == 3) break;
} while (1);
KG4: Disp_msg(16, 16, 6);
P_max = P_max2;
do { i = RXD_c(); } while(!(i==3 || i==5));
if (i == 3)
{
save();
Print_40(0, 1);
}
Disp_msg(16,16,0);
}
/***************************************/
/**************画压力曲线***************/
/***************************************/
/* ad 为显示的压力值,并把数据存在8155中 */
void Disp_2(uchar ad)
{
uchar i,j;
uchar *p;
uchar xdata *mem;
j = 219-ad;
i = V_ml; i--;
mem = &M8155;
mem = mem + i;
*mem = ad;
if (V_ml == 1) save_y = j;
if (save_y > j)
{
for (i=0; i<=save_y-j; i++) W_DOT(15+V_ml, save_y-i);
}
else
{
for (i=0; i<=j-save_y; i++) W_DOT(15+V_ml, save_y+i);
}
save_x = 15 + V_ml;
W_DOT(save_x, j);
save_y = j;
p = &string5[zs][0];
if (zs >= 4) zs = 0; else zs++;
}
/****************************************************/
/********************输液量显示**********************/
/****************************************************/
void Display(uchar o_x, uchar o_y, uchar id, uchar id1, uint x, bit open)
{
uchar *p;
uchar i;
p = M_D.list;
if (id==4 || id==5) i = 3;
else i=8;
strcpy(p, str_3[id]);
p = &M_D.list[i-3];
sprintf(p,"%u",x);
if (x <= 9)
{
M_D.list[i] = M_D.list[i-3];
M_D.list[i-1] = 0x2e;
M_D.list[i-2] = 0x30;
M_D.list[i-3] = 0x30;
goto Disp_1;
}
if (x <= 99)
{
M_D.list[i] = M_D.list[i-2];
M_D.list[i-1] = 0x2e;
M_D.list[i-2] = M_D.list[i-3];
M_D.list[i-3] = 0x30;
goto Disp_1;
}
else
{
M_D.list[i] = M_D.list[i-1];
M_D.list[i-1] = 0x2e;
}
Disp_1:
p = &M_D.list[i+1];
strcpy(p, str_3[id1]);
M_D.list[i+4] = 0xff;
p = M_D.list;
if (open) CW_PR(o_x, o_y, p);
}
/***************************************/
void Disp_msg(uint o_x, uchar o_y, uchar n)
{ uchar *p;
p = &Msg[n][0];
TXT_S(o_x, o_y, 1, p);
DOT_s(o_x*8-4, o_y-4, o_x*8+66, o_y+19, 1);
}
/***************TLC1543********************/
/* i为通道号,当o_x,o_y都为0时不显示*/
/* io_clock,io_cs,data_in,data_out */
/*****************************************/
void Max192(uchar i,uchar o_x,uchar o_y,bit set)
{ uchar j,k;
//uchar *p;
if (i <= 0x0f) k = i; /* 通道数为0--7 */
for (j=0; j<=3; j++)
{
io_clock = 0;
io_cs= 0;
AD = k;
AD <<= 4;
for (i=0; i<4; i++) //把通道号打入1543
{
data_in = (bit)(AD&0x80);io_clock=1; _nop_(); io_clock=0; _nop_();
AD <<= 1;
}
for (i=0; i<6; i++) //填充6个CLOCK
{
io_clock=1; _nop_(); io_clock=0; _nop_();
}
io_cs = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
io_cs = 0; //等待AD转换
_nop_(); _nop_();_nop_();
AD = 0;
for (i=0; i<2; i++) //取D9,D8
{
data_out=1;
io_clock=1;
AD <<= 1;
if (data_out) AD|=0x01;
io_clock=0;
}
Adend = 0;
for (i=0; i<8; i++) //取D7--D0
{
data_out = 1;
io_clock = 1;
Adend <<= 1;
if (data_out) Adend_0 = 1;
io_clock = 0;
}
io_cs = 1;
Adend_8 = AD_0; Adend_9 = AD_1;
M_D.A_data[j] = Adend;
}
Adend = (M_D.A_data[0] + M_D.A_data[1] + M_D.A_data[2] + M_D.A_data[3]) / 4;
//if (Adend > 900) Adend = 0;
//AD = 0; AD_0 = Adend_8; AD_1 = Adend_9;
data_in = 1; io_clock = 1;
if (o_x != 0) Display(o_x, o_y, 2, 4, Adend, 1);
}
/**************************************/
void disp_3(uchar O_X, uchar O_Y, uchar h_ox, uchar l_oy, uchar *p)
{ uchar i = 0,j = 0;
i = O_X; j = O_Y;
DOT_s(100, 62, 222, 216, 0);
while (*p != 0xff)
{
if (*p == 0xfe) {j = j + l_oy; *p++; i = O_X; continue;}
CCW2_PR(i, j, *p);
i = i+h_ox;
*p++;
}
//i = O_X - 2; j = O_Y + (menu*l_oy); CCW2_PR(i, j, 15);
//i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8)); TXT_S(i, j, 0, p=TXT_1);
}
//**************菜单选择******************/
uchar choose(uchar O_X,uchar O_Y,uchar h_ox,uchar l_oy,uchar *p)
{
uchar i = 0, j = 0;
//ZD();
//bit ok = 0;
i = O_X; j = O_Y;
//O_X = 100; O_Y = 70; k = 222;
disp_3(O_X, O_Y, h_ox, l_oy, p);
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
di:
do
{
read_time(1,1,1);
i = RXD_c();
} while (!(i==1 || i==2 || i==3 || i==6 || i==7));
switch(i)
{
case 1:
{
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 23);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_2);
if(menu == 0) menu = 5;
else menu--;
i = O_X; j = (O_Y / 8) +( menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
} break;
case 2:
{
i = O_X - 2; j = O_Y + (menu * l_oy);
CCW2_PR(i, j, 23);
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_2);
if(menu == 5) menu = 0;
else menu++;
i = O_X; j = (O_Y / 8) + (menu*(l_oy / 8));
TXT_S(i, j, 0, p=TXT_1);
i = O_X - 2; j =O_Y + (menu * l_oy);
CCW2_PR(i, j, 15);
} break;
case 3: return(menu + 1); break;
case 6:
{
TXD_c(2);
do
{
i = RXD_c();
} while (i == 6);
TXD_c(3);
} break;
case 7: temperature(); break;
default: break;
}
goto di;
}
/**********************/
/* 西文子程序函数 */
/**********************/
void CW_PR(uint O_X, uint O_Y, uchar *p)
{
uchar i;
uint j;
i = PARA;
j = i*O_Y + O_X;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1= j / 256;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
while (*p != 0xff)
{
wdadd1=*p++; /* 写入数据 */
}
}
void CW_PR1(uint O_X, uint O_Y, uchar p)
{
uchar i;
uint j;
i = PARA;
j = i*O_Y + O_X;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1 = j / 256;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
wdadd1 = p; /* 写入数据 */
}
/************************/
/* 初始化子程序函数 */
/************************/
void INT_1()
{ uchar i;
uchar code *p;
wcadd1=0x40; /* SYSTEM SET代码 */
for (i=0; i<8; i++)
{
wdadd1 = SYSTAB[i]; /* 写入参数 */
}
wcadd1=0x44; /* SCROLL代码 */
for(i=0; i<10; i++)
{
wdadd1 = SCRTAB[i]; // 写入参数
}
wcadd1 = 0x5a; // HDOT SCR 代码
wdadd1 = 0x00; // 设置参数P1
wcadd1 = 0x5b; // OVLAY 代码
wdadd1 = 0x01; // 设置参数:显示一,三区为文本属性
CLEAR(); // 调清屏子程序
wcadd1 = 0x59; // 显示状态设置
wdadd1 = 0x54; // 设置参数:显示一~四区开显示
wcadd1 = 0x5d; // 设光标形状
wdadd1 = 0x05;
wdadd1 = 0x87; // 块状
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -