📄 复件 computer2.c
字号:
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <stdlib.h>
/* 直接访问方式地址定义,根据用户平台接口修改 */
//PARA1 EQU 20H ; 应用于DMF682(256*128)
//PARA1 EQU 28H ; 应用于DMF50081/50174(320*240)
//PARA1 EQU 50H ; 应用于DMF50036(640*200)
#define wcadd1 XBYTE[0xbf00] /* 写指令代码地址 */
#define wdadd1 XBYTE[0x3f00] /* 写参数及显示数据地址 */
#define rdadd1 XBYTE[0xbf00] /* 读参数及显示数据地址 */
#define rbadd1 XBYTE[0x3c00] /* 读忙状态地址 */
#define Io8155 XBYTE[0xef00]
#define M8155 XBYTE[0xcf00]
#define M8155_1 XBYTE[0xcf10]
#define Io8155_A XBYTE[0xef01]
#define Io8155_B XBYTE[0xef02]
#define Io8155_C XBYTE[0xef03]
/* 程序参数定义,根据用户选择的LCM型号修改 32K(7FFFH)*/
#define True 1
#define False 0
#define PARA 0x28;
#define AD_Value 0x2c;
typedef unsigned char uchar;
typedef unsigned int uint;
sfr16 DPTR = 0x82;
sfr16 flash = 0xb3;
sfr SFCF = 0xb1;
sfr SFCM = 0xb2;
sfr SFAL = 0xb3;
sfr SFAH = 0xb4;
sfr SFDT = 0xb5;
sfr SFST = 0xb6;
sbit Input_1 = P1^0;
sbit Input_2 = P1^1;
sbit Input_3 = P1^2;
sbit Input_4 = P1^3;
sbit Master = P1^4;
sbit Second = P1^5;
sbit out = P1^6;
sbit Time_out = P1^7;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit io_clock = P3^2; //sbit io_clock = P2^7; //MAX192
sbit io_cs = P3^3; //sbit io_cs = P2^6;
sbit data_in = P2^0; //sbit data_in = P3^3;
sbit data_out = P2^1; //sbit data_out = P1^7;
sbit PC_start = P3^2;
sbit STB = P2^3;
sbit Bad = P3^4;
sbit Paus = P1^7;
sbit Back = P3^5;
/* 定义调用子程序 */
bit TXD_pc(uchar i);
void KG();
void GL();
void Disp_2(uchar ad); /* 画压力曲线 */
void CW_PR(uint O_X, uint O_Y, uchar *p); /* 西文写入子程序 */
void CW_PR1(uint O_X, uint O_Y, uchar p);
void Link(uint o_x, uint o_y, uint n, bit c);
void Reset();
void Max192(uchar i, uchar o_x, uchar o_y);
void delay_2();
void ZD();
void ZL();
uchar RXD_c();
void Display(uchar o_x, uchar o_y, uchar id, uchar id1, uint x, bit open);
void DOT_s(uint o_x1, uint o_y1, uint o_x2, uint o_y2, bit c);
void TXD_c(uchar i);
uchar choose(uchar O_X, uchar O_Y, uchar h_ox, uchar l_oy, uchar *p);
void W_DOT(uint O_X, uint O_Y ); /* 绘点子程序 */
void CLEAR();
void INT_1();
void delay(void);
//;-------------- DMF-50081/50174 的SYSTEM SET 参数 --------------
//SYSTAB: DB 30H,87H,07H,27H,42H,0F0H,28H,00H ; P1-P8参数
//SCRTAB: DB 00H,00H,0F0H,00H,30H,0F0H,00H,60H,00H,00H ; P1-P10参数
/*-------------------240128的SYSTEM SET 参数-------------------------------*/
//code uchar SYSTAB[8]={0x30,0x87,0x07,0x1e,0x21,0x80,0x1f,0x00};
//code uchar SCRTAB[10]={0x00,0x00,0x80,0xf0,0x01,0x80,0x00,0x00,0x00,0x00};
/*-------------------320240的SYSTEM SET 参数-------------------------------*/
code uchar SYSTAB[8] = {0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
code uchar SCRTAB[10] = {0x00,0x00,0xf0,0x00,0x30,0xf0,0x00,0x60,0x00,0x00};
//code uchar SCRTAB[10]={0x00,0x00,0xf0,0xce,0x04,0xf0,0x80,0x00,0x00,0x00};
/* 在此可以观察文本方式下的字符及光标的显示效果(写入内容为"Sevicer tel:") */
code uchar DRAG_1[6][5] = {0,1,2,3,0xfe,0,1,4,5,0xfe,6,7,8,9,0xfe,10,8,4,5,0xfe,11,12,13,14,0xfe,53,54,55,56,0xff};
code uchar TXT_2[] = {0x84,0x84,0x84,0x84,0x84,0x84,0xff};
code uchar TXT_1[] = {0x80,0x80,0x80,0x80,0x80,0x82,0xff};
code uchar TXT_3[] = {23,23,23,23,23,23,0xff};
code uchar TXT_4[] = {59,57,58,60,0xff};
code uchar TXT_5[] = {67,68,69,63,64,0xff};
/* 文本方式下的汉字显示方法
在文本方式下显示汉字, 需要在SED1335 等显示RAM 内建立一个自定义字符库
CGRAM,然后通过在相应的单元写入相应的字符代码来实现汉字的显示.
SED1335 等的字符代码对应的是8x8 点阵的字符块, 而一个汉字需要四个8x8
点阵的字符块组合显示, 所以在建立汉字的CGRAM 时, 需要四个字符代码管理一个
汉字, 一般是按左上部, 左下部, 右上部和右下部四部分分配代码. 比如在演示程
序中建立 "清华" 两个汉字的CGRAM,那么这两个汉字的代码为80H(81H,82H,83H)和
84H(85H,86H,87H). */
code uchar Msg[16][5] = {36,37,30,31,0xff,26,27,0,1,0xff,0,1,28,29,0xff,0,1,24,25,0xff,
32,33,34,35,0xff,2,3,24,39,0xff,45,46,47,48,0xff,45,46,49,50,0xff,
49,50,0,1,0xff,8,51,9,52,0xff,26,27,10,8,0xff,10,8,24,25,0xff,
57,58,38,23,0xff,57,58,61,62,0xff,47,48,63,64,0xff,65,66,63,64,0xff,
};
uchar menu = 0;
uchar TH0_T,TL0_T;
uint V_ml;
uchar Speed_V;
uchar bdata AD;
uint bdata Adend;
sbit Adend_0 = Adend^8;
sbit Adend_8 = Adend^0;
sbit Adend_9 = Adend^1;
sbit AD_0 = AD^0;
sbit AD_1 = AD^1;
sbit AD_7 = AD^7;
bit C_run;
bit DJ_run;
bit DJ_back;
bit send_kpa;
code uchar *str_3[] = {"Pmax=\0","Vmax=\0"," P=\0"," V=\0","Kpa=\0","mL\0","Qin=\0",};
code uchar Dot_s10[] = {9,27,60,93,126};
code uchar Dot_s11[] = {49,99,149,199,249,99};
code uchar string_3[5][2] = {0x34,0x35,0x34,0x30,0x33,0x30,0x32,0x30,0x31,0x30};
code uchar string_4[5][4] = {0x20,0x35,0x6d,0x4c,0x31,0x30,0x6d,0x4c,0x31,0x35,0x6d,0x4c,0x32,0x30,0x6d,0x4c,0x32,0x35,0x6d,0x4c};
code uchar Dot_s2[] = {9,12,16,20,24};
code uchar Dot_s3[] = {6,13,19,26,32};
code uchar string5[5][5] = {38,23,23,23,0xff,38,38,23,23,0xff,38,38,38,23,0xff,38,38,38,38,0xff,23,23,23,23,0xff};
code uchar string6[3][4] = {44,23,40,0xff,41,42,43,0xff,42,23,43,0xff};
code uchar TXT1[] = {'K','p','a',0xff};
code uchar time[] = {0x2f,0x2f,0x20,0x3a,0x3a,0xff};
code uchar time_x[6][2] = {0,99,1,12,1,31,0,23,0,59,0,59};
uchar RS_buf[1];
code uchar D40_1[] = {0x1b,0x38,0x00,0x1b,0x31,0x06,0xff}; //设置字和间距
code uchar D40_p1[4][15] = {0x0d,0x1b,0x66,0x00,0x05,0xca,0xe4,0xd2,0xba,0xd5,0xef,0xb6,0xcf,0x0d,0xff,//输液诊断
0x0d,0x1b,0x66,0x00,0x05,0xca,0xe4,0xd2,0xba,0xd6,0xce,0xc1,0xc6,0x0d,0xff, //输液治疗
0x0d,0x1b,0x66,0x00,0x05,0xb2,0xe2,0xc1,0xbf,0xb9,0xac,0xc8,0xdd,0x0d,0xff, //测量宫容
0x0d,0x1b,0x66,0x00,0x05,0xc0,0xa9,0xb9,0xac,0xd6,0xce,0xc1,0xc6,0x0d,0xff //扩宫治疗
};
code uchar D40_s1[] = {0x0d,0xbb,0xbc,0x20,0x20,0xd5,0xdf,0x3a,0x20,0xff}; //患 者:
code uchar D40_s2[] = {0x0d,0xd7,0xa2,0xd2,0xba,0xc1,0xbf,0x3a,0x20,0xff}; //注液量:
code uchar D40_s3[] = {0x0d,0xb9,0xac,0x20,0x20,0xc8,0xdd,0x3a,0x20,0xff}; //宫 容:
code uchar D40_s4[] = {0x0d,0xd5,0xef,0x20,0x20,0xb6,0xcf,0x3a,0x20,0xff}; //诊 断:
code uchar D40_s5[] = {0x0d,0xd1,0xb9,0x20,0x20,0xc1,0xa6,0x3a,0x20,0xff}; //压 力:
code uchar D40_s6[] = {0xcd,0xa8,0xb3,0xa9,0xff};
code uchar D40_s7[] = {0xd3,0xd0,0xb6,0xc2,0xc8,0xfb,0xff};
code uchar D40_s8[] = {0xb6,0xc2,0xc8,0xfb,0xff};
code uchar D40_s11[] = {0x1b,0x36,0xff};
code uchar D40_x1[] = {0x1B,0x27,0x03,50,100,150,0xFF};
code uchar D40_x2[] = {0x1B,0x27,0x04,1,2,3,4,0xFF};
code uchar D40_x3[] = {0x1b,0x66,0x00,0x01,'N','o',':',0xff};
uint idata P_max;
bit RS_input;
union
{
uchar list[20];
uint A_data[4];
} M_D;
uchar idata save_y;
uchar idata zs;
/*********************/
/* 演示主程序 */
/*********************/
void main()
{
uchar code_l, i;
uchar *p;
uint O_X, O_Y;
uchar ok;
TH1 = TL1 = 0xFa;
TH0_T = 10; TL0_T = 0;
delay_2();
_nop_();
choose(O_X = 15, O_Y = 72, 3, 24, p=&DRAG_1[0][0]);
INT_1(); /* 调初始化子程序 */
O_X = 5; O_Y = 22; code_l = 0;
ES = 1;
// Reset();
while(1)
{
//ZD();
//Bad = 0;
SCON = 0x50;
TMOD = 0x21;
TR1 = 1; EA = 1;
O_X = 5; O_Y = 22; code_l = 0;
if (RS_input) goto main_1;
i = RXD_c();
if (i == 0) continue;
if (i == 8)
{
TXD_c(2);
do { i = RXD_c(); } while (i == 8);
TXD_c(3);
TXD_c(9);
continue;
}
TXD_pc(i);
main_1: V_ml = 0;
for (O_X=0; O_X<30000; O_X++)
{
while (RS_input)
{
RS_input = 0;
if (RS_buf[0] == 1)
{
CLEAR(); TXD_c(2); TXD_c(7);
TR0 = 1;ET0 = 1;
DJ_run = 1;
ZD();
Io8155_C = 0x3f;
TXD_c(9);
Reset();
CLEAR();
DJ_run = 0;
continue;
}
if (RS_buf[0] == 2)
{
CLEAR(); TXD_c(2); TXD_c(8);
TR0 = 1; ET0 = 1;
DJ_run = 1;
Speed_V = 1; TXD_c(5);
ZL();
Io8155_C = 0x3f;
TXD_c(10);
Reset();
CLEAR();
DJ_run = 0;
continue;
}
if (RS_buf[0] == 3)
{
CLEAR(); TXD_c(2); TXD_c(7);
TR0 = 1; ET0 = 1;
DJ_run = 1;
Speed_V = 1; TXD_c(5);
GL();
Io8155_C = 0x3f;
TXD_c(9);
Reset();
CLEAR();
DJ_run = 0;
continue;
}
if (RS_buf[0] == 4)
{
CLEAR(); TXD_c(2); TXD_c(8);
TR0 = 1; ET0 = 1; DJ_run = 1;
Speed_V = 1; TXD_c(6);
KG();
Io8155_C = 0x3f;
TXD_c(10);
Reset();
CLEAR();
DJ_run = 0;
continue;
}
if (RS_buf[0] == 111)
{
CLEAR();
}
if (RS_buf[0] == 100) ;
}
}
}
}
/******************************/
/**********输液诊断************/
/******************************/
void ZD(void)
{
uchar i;
uchar *p;
bit over = 0, pause = 0;
P_max = 0; zs = 0;
Link(15, 220, 300, 0);
Link(15, 60, 160, 1);
DOT_s(16, 12,94,32,0);
p = &DRAG_1[menu][0];
Speed_V = 0; TXD_c(4);
p = TXT1;
CW_PR(1, 6, p);
Display(4, 5, 0, 4, 260, 1);
Display(4, 7, 1, 5, 250, 1);
do
{
Max192(0, 23, 5);
if (send_kpa) {send_kpa = 0; TXD_pc(0);}
if (Adend<120) {if (Speed_V != 0) {TXD_c(4); Speed_V = 0;} goto ZD1; }
if (Adend<200) {if (Speed_V != 1) {TXD_c(5); Speed_V = 1;} goto ZD1; }
if (Adend<260) {if (Speed_V != 2) {TXD_c(6); Speed_V = 2;} goto ZD1; }
else {P_max=Adend;goto ZD2;}
ZD1: if (P_max<Adend) P_max = Adend;
if (C_run)
{
C_run = 0;
TXD_pc(0x0a);
if (over == 0) Display(23, 7, 3, 5, V_ml, 1);
if (V_ml >= 250)
{
ZD2: Disp_2(Adend / 3);
DJ_run = 0; TR0 = 0; ET0 = 0; TXD_c(3); over = 1;
p = &string5[0][0];
TXD_pc(0);
RS_input = 0;
ZD3: do { i = 0; } while (!RS_input);
RS_input = 0;
if (RS_buf[0] != 5) goto ZD3;
goto ZD4;
}
Disp_2(Adend / 3);
}
if (RS_input)
{
RS_input = 0;
switch (RS_buf[0])
{
case 5: break;
case 6:
{
if (DJ_run)
{
DJ_run = 0; TR0 = 0; ET0 = 0; TXD_c(3); //Bad = 0;
}
else
{
DJ_run = 1; TR0 = 1; ET0 = 1; TXD_c(2); //Bad = 1;
}
} break;
case 7: goto pc7;
default: break;
}
}
if (DJ_run)
{
if (Paus == 0)
{
if (pause == 0) {pause = 1;TR0 = 0;ET0 = 0;TXD_c(3);}
}
else
{
if (pause) {pause = 0;TR0 = 1;ET0 = 1;TXD_c(2);}
}
}
i=RXD_c();
if (i == 8)
{
if (DJ_run)
{
DJ_run = 0; TR0 = 0; ET0 = 0; TXD_c(3); //Bad = 0;
}
else
{
DJ_run = 1; TR0 = 1; ET0 = 1; TXD_c(2); //Bad = 1;
}
}
if (i==6 ||i ==7) TXD_pc(i);
} while(1);
pc7:
TXD_c(3); DJ_run = 0; TR0 = 0; ET0 = 0;
do
{
i=RXD_c();
if (i==5 || i==7) TXD_pc(i);
if (RS_input)
{
RS_input = 0;
switch (RS_buf[0])
{
case 5: goto ZD4;
case 7: { TXD_c(2); DJ_run=1; TR0=1; ET0=1; goto ZD1; } break;
default: break;
}
}
} while(1);
ZD4: ;
}
/*******************************/
/***********输液治疗************/
/*******************************/
void ZL()
{
uchar i;
uchar *p, sa_v;
bit over, pause = 0;
zs = 0; over = 0; P_max = 0;
Link(15, 220, 300, 0);
Link(15, 60, 160, 1);
DOT_s(16, 12, 94, 32, 0);
p = &DRAG_1[menu][0];
p = TXT1;
CW_PR(1, 6, p);
Display(4, 5, 0, 4, 260, 1);
Display(4, 7, 1, 5, 250, 1);
do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -