📄 tlc1543.c
字号:
Io8155 = 0x0e; // C为0x02入,0x0e出
Io8155_c = 0x3f;
SFCF = 0xc0;
i = AD_set;
p = &AD_set;
if (i == 0xff)
{
AD_Value = 0;
save_data(p, 0);
SFCF=0x00;
}
else AD_Value = i;
}
/*************************/
/* 清屏子程序函数 */
/*************************/
void CLEAR()
{ uint i, j;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = 0x00; /* 设置参数光标指针低8位 */
wdadd1 = 0x00; /* 设置参数光标指针高8位 */
wcadd1 = 0x42; /* MWRITE 代码 */
for(j=0; j<560; j++) /*清64K的显示存储器*/
{
for(i=0; i<40; i++) /*写入一行*/
{
wdadd1 = 0x00; /* 写入数据 */
}
}
}
/************************/
/* CGRAM子程序函数 */
/************************/
void CGRAM()
{ uchar i,j;
wcadd1 = 0x5c; /* CGRAMADR 代码 */
wdadd1 = 0x00; /* 设置SAG=0x7000 */
wdadd1 = 0x70;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = 0x00; /* 设置CSR=0x7400(字符代码=80H) */
wdadd1 = 0x74;
wcadd1 = 0x4c; /* CSRDIR 代码 */
wcadd1 = 0x42; /* MWRITE 代码 */
for(j=0; j<=2; j++)
{
for(i=0; i<32; i++)
{
wdadd1 = CGTAB1[j][i]; /* 写入字模数据 */
}
}
}
/***************************/
/* 写汉字子程序(文本)函数 */
/***************************/
void TXT_S(uchar O_X, uchar O_Y, bit c, uchar *disp)
{
while ((*disp!=0xff) && (*disp!=0xfe))
{
if (c) CCW2_PR(O_X, O_Y, *disp);
else CCW1_PR(O_X, O_Y, *disp);
O_X += 2;
*disp ++;
}
}
/******/
/*画框*/
/******/
void DOT_s(uint o_x1, uint o_y1, uint o_x2, uint o_y2, bit c)
{ uint i;
i = o_x1;
while (i != o_x2) { W_DOT(i, o_y1); i++;}
i = o_y1;
while (i != o_y2) { W_DOT(o_x2, i); i++;}
i = o_x2;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2;
while (i != o_y1) { W_DOT(o_x1,i ); i--;}
if (c) return;
i = o_x2 - 1; o_y2++; o_x1--;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2;
while (i != o_y1) { W_DOT(o_x1, i); i--;}
i = o_x2 - 2; o_y2++; o_x1--;
while (i != o_x1) { W_DOT(i, o_y2); i--;}
i = o_y2; o_y1++;
while (i != o_y1) { W_DOT(o_x1, i); i--;}
}
/**********************/
/*文本方式显示单个汉字*/
/**********************/
void CCW1_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uint i,j;
i = PARA;
j=i*O_Y + O_X;
wcadd1 = 0x4f; /* CSRDIR 代码(下移) */
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j%256; /* 设置光标地址 */
wdadd1 = j / 256;
wcadd1 =0x42; /* MWRITE 代码 */
wdadd1 = code_l; /* 写入汉字代码 */
wdadd1 = code_l + 1; /* 写入汉字代码 */
j++;
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j%256; /* 设置光标地址 */
wdadd1 = j / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
wdadd1 = code_l + 2; /* 写入汉字代码 */
wdadd1 = code_l + 3; /* 写入汉字代码 */
}
/***************************/
/* 写汉字子程序(图形)函数 */
/***************************/
void CCW2_PR(uchar O_X,uchar O_Y,uchar code_l)
{ uchar count1;
uint i,j,a = 0;
i = PARA;
j = i*O_Y + O_X + 0x3000; /* 显示一区所控制的显示屏行数 如为320240屏k=j*O_Y+O_X+0x04ce*/
wcadd1 =0x4f; /* CSRDIR 代码(下移) */
for(i=0; i<2; i++)
{
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j % 256; /* 设置光标地址CSR */
wdadd1 = j / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
for(count1=i*16; count1<16*(i+1); count1++)
{
wdadd1=CGTAB[code_l][count1]; /* 写入数据 */
}
j = j + 1;
}
}
/********************************/
/* 写汉字子程序(图形)函数 24*24 */
/*********************************/
void CCW2_PR24(uchar O_X,uchar O_Y,uchar code_l)
{ uchar count1;
uint i,j,a = 0;
i = PARA;
j = i*O_Y + O_X + 0x3000; /* 显示一区所控制的显示屏行数 如为320240屏k=j*O_Y+O_X+0x04ce*/
wcadd1 = 0x4f; /* CSRDIR 代码(下移) */
for(i=0; i<3; i++)
{
wcadd1 = 0x46; /* CSRW 代码 */
wdadd1 = j%256; /* 设置光标地址CSR */
wdadd1 = j / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
for(count1=i*24; count1<24*(i+1); count1++)
{
wdadd1 = CGTAB24[code_l][count1]; /* 写入数据 */
}
j=j+1;
}
}
/***********************/
/* 绘点函数 */
/***********************/
void W_DOT(uint O_X,uint O_Y)
{ uchar i,j,dat;
uint k;
j = PARA;
i = O_X%8;
O_X = O_X / 8;
/* 显示一区所控制的显示屏行熟 如为320240屏k=j*O_Y+O_X+0x4ce*/
k = j*O_Y + O_X + 0x3000; /*写入位地址的表达式*/
wcadd1 = 0x4f;
wcadd1 = 0x46; /* 设置光标地址 */
wdadd1 = k % 256; /* 计算光标地址 */
wdadd1 = k / 256;
i = 7-i;
O_Y = 0x01 << i;/* 计算显示位 */
wcadd1 = 0x43; /* MREAD 代码 */
dat = rdadd1; /* 读取当前显示数据 */
wcadd1 = 0x46; /* 设置光标地址 */
wdadd1 = k % 256; /* 计算光标地址 */
wdadd1 = k / 256;
wcadd1 = 0x42; /* MWRITE 代码 */
wdadd1 = dat | O_Y; /* 写入合成数据 */
}
void Link(uint o_x, uint o_y, uint n, bit c)
{ uint i;
uchar j, k;
if (c)
{
for (j=0; j<=4; j++) { W_DOT(o_x-j,o_y+j); W_DOT(o_x+j,o_y+j);}
}
j=0;
for (i=0; i<n; i++)
{
W_DOT(o_x, o_y);
if (c)
{
if (i == Dot_s10[j])
{
for (k=0; k<=5; k++) W_DOT(o_x-k, o_y);
for (k=0; k<=1 ;k++) CW_PR1(k,Dot_s2[j], string_3[j][k]);
j++;
}
o_y++;
}
else
{
if (i == Dot_s11[j])
{
for (k=0; k<=5; k++) W_DOT(o_x,o_y+k);
for (k=0; k<=3 ;k++) CW_PR1(Dot_s3[j]+k, 29, string_4[j][k]);
j++;
}
o_x++;
}
}
if (c == False)
{
for (j=0; j<=4; j++) { W_DOT(o_x-j, o_y-j); W_DOT(o_x-j, o_y+j); }
}
}
//*************************************************************
void delay(void)
{ uint i;
for (i=0; i<10000; i++)
{
_nop_();
}
}
void delay_2()
{ uint i;
for (i=0; i<35500; i++)
{
_nop_();
}
}
/********定时1ms***********/
void delay3(uint Tm_count)
{
uint i;
while (Tm_count--)
{
for (i=0; i<125; i++) {};
}
}
/********************/
/*发送一个指令给MC51*/
/********************/
void TXD_c(uchar i)
{ uchar a;
bit FLAG_1 = 0;
out = 0;
Master =0 ;
FLAG_1 = 0;
for (a=0; a<0x10; a++);
for (a=0;a<0xff;a++)
{
if (Second == False)
{
i =~ i; P1 &= i; Master = 1; out = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
FLAG_1 = 1;P1 |= 0x3f; break;
}
else continue;
break;
}
if (FLAG_1 == False) Bad = False;
else Bad = 1;
out=1;
P1 |= 0x3f;
delay();
Master = 1;
}
/******************/
/*向MC51读一个按键*/
/******************/
uchar RXD_c()
{ uchar k,i;
for (k=0; k<0xff; k++)
{
if (Second != False) continue;
Master = 0;
while (!Second);
_nop_(); _nop_();
i = P1; i |= 0xf0; i=~ i;
Master = 1;
//SBUF=i;while(!TI);TI=0;
return(i);
}
return(0);
}
/******************/
/*产生输液量的定时*/
/******************/
void Time_0(void) interrupt 1
{
static uchar count;
static uchar C2;
TR0 = 0;
EA = 0;
TH0 = TH0_T;
TL0 = TL0_T;
if (count >= 10)
{
count = 0;
switch (Speed_V)
{ case 0:
{
V_ml++; C_run = 1;
} break;
case 1:
{
if (C2 < 1) { C2++; break; }
V_ml++; C2 = 0; C_run = 1;
} break;
case 2:
{
if (C2 < 3) { C2++; break; }
if (DJ_back) V_ml--;
else V_ml++;
C2 = 0; C_run = 1;
} break;
default: Speed_V = 0; break;
}
}
else count++;
EA = 1;
TR0 = 1;
}
/*******************************/
/************串口接收***********/
/*******************************/
void RS232(void) interrupt 4
{
static uchar RS_count;
uchar i;
EA = 0;
ES = 0;
RI = 0;
i = SBUF;
switch (RS_count)
{
case 0:
{
RS_buf[0] = i;
RS_count++;
} break;
case 1:
{
if (i+RS_buf[0] == 0xff)
{
Bad = 1; RS_count = 0; RS_input = 1;
if (RS_buf[0] == 0x0a) send_kpa = 1;
}
else { Bad = 0; RS_count = 0;}
} break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -