⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 computer2.c

📁 AT89S52串口多字节接收,可以接收任意字节.
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -