📄 复件 demo2.c
字号:
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 == 0)
{
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_();
}
}
/********************/
/*发送一个指令给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 == 0)
{
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 == 0) Bad = 0;
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 != 0) 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;
}
ES = 1;
EA = 1;
}
/*******************************/
/**********电机复位*************/
/*******************************/
void Reset(bit c)
{
uchar i;
uint O_X;
uchar *p;
if (c == 0) { p=&Msg[0][0]; TXT_S(16, 160, 1, p); }
Max192(0, 0, 0);
if (Adend < 30) { p = TXT_5; TXT_S(15, 160, 1, p); while(1); }
TXD_c(12);
TXD_c(4);
Master = 0;
if (Back)
{
i = 1; TXD_c(i);
while (Back);
i = 3; TXD_c(i);
}
else
{
i = 2; TXD_c(i);
for (O_X=0; O_X<65535; O_X++) { for (i=0;i <0x05; i++); }
if (Back == 0)
{
i = 3;
TXD_c(i);Disp_msg(16,160,15);
while(1);
}
else { i = 1; TXD_c(i); while(Back); i = 3; TXD_c(i); }
}
if (c == 0) { p= TXT_3; TXT_S(16, 160, 1, p);}
TXD_c(11); TXD_c(4);
Master = 1;
}
/****************************************/
/*************向计算机发数据*************/
/****************************************/
bit TXD_pc(uchar i)
{
EA = 0;
ES = 0;
if (i != 0)
{
SBUF = 0x80; while(!TI); TI = 0;
SBUF = i; while(!TI); TI = 0;
SBUF = 0xff - i; while(!TI); TI = 0;
}
else
{
SBUF = 0x90 + AD; while(!TI); TI=0;
SBUF = Adend; while(!TI); TI=0;
SBUF = 0xff - AD; while(!TI); TI=0;
}
ES=1;
EA=1;
delay();
return(0);
}
/*******************************************/
/***************读时钟**********************/
/*******************************************/
void read_time(uchar o_x,uchar o_y,bit open)
{
uchar i,j,k;
uchar t[7];
uchar *p;
uchar xdata *addr;
addr=&timeadd2;
t[0]=0x20;
t[1]=timeadd2;
t[2]=*(addr-1);
t[3]=*(addr-2);
t[4]=*(addr-5);
t[5]=*(addr-7);
t[6]=*(addr-9);
M_D.list[0]=0x32;
M_D.list[1]=0x30;
k=0;
/********************************/
for (j=1;j<=6;j++)
{
i=t[j]/10;
i&=0x0f;
i=i+0x30;
M_D.list[j*2+k]=i;
i=t[j]%10;
i&=0x0f;
i=i+0x30;
M_D.list[j*2+1+k]=i;
M_D.list[j*2+2+k]=time[j-1];
k++;
}
p=M_D.list;
if (open) CW_PR(o_x,o_y,p);
}
/********************************************/
/*****************写时钟*********************/
/********************************************/
void write_time(uchar o_x,uchar o_y)
{ uchar xdata *p;
uchar *d;
uchar i;
uchar j,k;
uchar t[6];
bit s;
wcadd1=0x59;
wdadd1=0x56;
p=&timeadd2;
t[0]=timeadd2;
t[1]=*(p-1);
t[2]=*(p-2);
t[3]=*(p-5);
t[4]=*(p-7);
t[5]=*(p-9);
o_x+=2;
set_xy(o_x+1,o_y);
for (i=0;i<=5;i++)
{ s=1;
do { // k=1;
k=RXD_c();
if (k==1)
{ if (t[i]==time_x[i][1]) t[i]=time_x[i][0];
else t[i]++;
ui: j=t[i]/10;
j&=0x0f;
j=j+0x30;
M_D.list[0]=j;
j=t[i]%10;
j&=0x0f;
j=j+0x30;
M_D.list[1]=j;
M_D.list[2]=0xff;
d=M_D.list;
CW_PR(o_x,o_y,d);
set_xy(o_x+1,o_y);
}
if (k==2)
{ if (t[i]==time_x[i][0]) t[i]=time_x[i][1];else t[i]--;
k=0;
goto ui;
}
if (k==3) { s=0;o_x+=3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -