📄 复件 computer2.c
字号:
io_cs = 0; _nop_();_nop_();_nop_();
io_clock = 1;_nop_();_nop_();_nop_();
io_clock = 0;_nop_();_nop_();_nop_();
AD_1 = data_out;
_nop_(); io_clock = 1; _nop_();_nop_();
io_clock = 0; _nop_();_nop_();
AD_0 = data_out; _nop_();
Adend = 0;
for (i=0; i<8; i++)
{
Adend <<= 1;
io_clock = 1; _nop_();_nop_();_nop_();
io_clock = 0; _nop_();_nop_();_nop_();
Adend_0 = data_out;
}
_nop_(); _nop_(); io_cs = 1;
Adend_8 = AD_0; Adend_9 = AD_1;
if ((o_x!=0) && (o_y!=0)) Adend = Adend - AD_Value;
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 > 600) Adend = 0;
AD = 0; AD_0 = Adend_8; AD_1 = Adend_9;
data_in = 1; io_clock = 1;
if ((o_x==0) && (o_y==0)) return;
Display(o_x, o_y, 2, 4, Adend,1);
}
//**************菜单选择******************/
uchar choose(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;
i = O_X - 2;
j = O_Y + (menu*l_oy);
i = O_X;
j = (O_Y /8) + (menu*(l_oy/8));
return(0);
}
/**********************/
/* 西文子程序函数 */
/**********************/
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;
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; /* 块状*/
Io8155 = 0x06; /*A 口输入,B口输出,C口输出*/
Io8155_C = 0x00;
}
/*************************/
/* 清屏子程序函数 */
/*************************/
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; /* 写入数据 */
}
}
}
/******/
/*画框*/
/******/
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 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%2 == 0) send_kpa = 1;
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;
}
else
{
Bad = 0;
RS_count = 0;
}
} break;
}
ES = 1;
EA = 1;
}
/*******************************/
/**********电机复位*************/
/*******************************/
void Reset(void)
{
uchar i;
uint O_X;
Max192(0, 0, 0);
if (Adend < 30) 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);
while(1);
}
else { i = 1; TXD_c(i); while(Back); i = 3; TXD_c(i); }
}
TXD_c(10); 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 - Adend; while (!TI); TI = 0;
}
ES = 1;
EA = 1;
delay();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -