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

📄 可视听诊器设计.c

📁 此为基于单片机的可视听诊器设计。利用C语言实现了驻极体式声音传感器实现的心音数据采集系统功能
💻 C
📖 第 1 页 / 共 2 页
字号:
      O_X=O_X/8;
      k=O_X+0x0bf0-0x10*O_Y;
  	   dat1=k%256;
      dat2=k/256;
      com=0x24;
      PR1();
	   j=0x07-j;
      com=j|0xf8;  /* 位操作 */
      PR12();
 }
void DRAW(void)
{     uchar i,j=0;
      unsigned int O_Y1;
 uchar max=0;  
  for(i=0;i<5120;i++)
 {if (RAM[i]>max) max=RAM[i];
   }
 average=max/2;
for(i=10;i>=5110;i++)
    	{a=0;
	 for(j=0;j==10;j++)
        { if(RAM[i+j]>=average)
        a=1;
		if(RAM[i-j]>=average)
		  a=1;}
     	if(a==0)		RAM[i]=0;
		}  
     CLEAR();
     O_Y1=RAM[ram_wr]/bei_data;
     for(i=0;i<128;i++)
			{  O_X=i;
				O_Y=RAM[ram_wr+lcd_step*i]/bei_data;				
				while(abs(O_Y-O_Y1)>8)
					{	 if(O_Y>O_Y1)
							{O_Y=O_Y1+1;
							 O_Y1=O_Y;
        		          W_DOT();}
						 else if(O_Y1>O_Y)
							{O_Y=O_Y1-1;
						    O_Y1=O_Y;
        					 W_DOT();}
					}
				O_Y1=O_Y;
        		W_DOT();
		   }
 }
/****************************/
/*    写指令和写数据函数    */
/****************************/
PR1()              /* 双字节参数指令写入入口 */
    { ST01();
      cd=0;		  //数据通道
      P0=0xff;	  //清一下电平      
      P0=dat1;  /* 取第一参数单元数据 */
     wr=0;
     wr=1;
     PR11();
    }
PR11()             /* 单字节参数指令写入入口 */
    {ST01();
     cd=0;
     P0=0xff;
      P0=dat2;  /* 取第二参数单元数据 */
     wr=0;
     wr=1;
     PR12();
    }
PR12()             /* 无参数指令代码写入入口 */
  { ST01();
    cd=1;		  //指令通道
    P0=0xff;
    P0=com;    /* 写入指令代码 */
    wr=0;
    wr=1;
  }
/*******************************************/
/*读取lcd状态字   */
/******************************************/
uchar readstate(void)
{ uchar lcd_state;
  P0=0xff;
  cd=1; 
  rd=0;      
 lcd_state=P0&0xff;   // 读取引脚A物理电平 
  rd=1;   // /RD=1  
return lcd_state;
}
/************************************************/
/*  判状态位S1,S0 函数(读写指令和读写数据状态)  */
/************************************************/
void ST01(void)
 {    while((readstate()&0x03)!=3) ;   }
/************************************/
/*  判状态位S3函数(数据自动写状态)  */
/************************************/
void ST3(void)
{ while((readstate()&0x08)!=8) ;}
/**************************/
/*  ad 子程序  */
/**************************/
 void DELAY(uchar x)
       {  unsigned int i; 
         for(i=0;i<x;i++); 
       }


void adcck(void) 
{ adcclk=1; DELAY(2); 
 adcclk=0; DELAY(2); 
  }   
 uchar readadc(void)  /*获ad数据的函数 */
 {uchar ch,i;
  ch=0; 
  adccs=0;  adcck(); ch=0;
  for (;adcdo==1;) adcck();
  for (i=0; i<8; i++) 
  { adcck(); 
    ch=(ch<<1)|adcdo; 
   }
  adccs=1;
  return(ch);
  }
void adc(void)
      { adc_date=readadc();
       }
/*****************************/
  /* 显示开机画面 */
/*****************************/
display1()
  {    code_1=0x05;         /* 汉字写入显示波形回车确认*/     
       O_X=0x03;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x06;
       O_X=0x05;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x07;
       O_X=0x07;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x08;
       O_X=0x09;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x10;
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x11;
       O_X=0x05;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x0E;
       O_X=0x07;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x0F;
       O_X=0x09;
       O_Y=0x10;
       CCW2_PR();
    }
/*****************************/
  /* 显示选择图像画面 */
/*****************************/
display2()
  {    code_1=0x00;    /* 汉字写入:一采集*/
       O_X=0x00;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x1a;    
       O_X=0x03;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x1b;	  
       O_X=0x07;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x01;    /* 汉字写入:二显示*/
       O_X=0x00;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x05;    
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x06;	
       O_X=0x07;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x02;    /* 汉字写入:三通讯*/
       O_X=0x00;
       O_Y=0x20;
       CCW2_PR();
       code_1=0x0c;     
       O_X=0x03;
       O_Y=0x20;
       CCW2_PR();
       code_1=0x0d;
       O_X=0x07;
       O_Y=0x20;
       CCW2_PR();
code_1=0x21;    /* 汉字写入:四退出*/
       O_X=0x00;
       O_Y=0x30;
       CCW2_PR();
       code_1=0x1f;     
       O_X=0x03;
       O_Y=0x30;
       CCW2_PR();
       code_1=0x20;
       O_X=0x07;
       O_Y=0x30;
       CCW2_PR();
       com=0x9f;  // 显示状态设置,1001ABCD,本处为闪烁,显示,文本显示,图形显示
       PR12();
	    com=0xa7;   //光标形状,10100ABC,形状为8点(列)*ABC行
       PR12();
	    dat1=0x00;  // 光标地址水平位置
       dat2=0x01;  // 光标地址垂直位置
       com=0x21;   
       PR1();	   
       }  

/*****************************/
  /* 显示光标 纵向移*/
/****************************/
display4()
 {    com=0x9f;  /* 显示状态设置 */
      PR12();   
	  com=0xa7;
      PR12();     //光标形状8*7      
	  dat1=0x00;
      com=0x21;  // 光标地址设置 
      PR1();  	 //注意这里的dat2可能以包含在主调程序中
  }
/*****************************/
  /* 显示采集中画面 */
/*****************************/
display5()
  {    CLEAR();
       CCW2_PR();
       code_1=0x1a;    /* 汉字写入:采*/ 
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x1b;	  /* 汉字写入:集*/
       O_X=0x07;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x03;	 /*实际有残留的“讯”字,所以写空以消除*/
       O_X=0x07;
       O_Y=0x20;
       CCW2_PR();
		code_1=0x03;	 /*实际有残留的“讯”字,所以写空以消除*/
    	O_X=0x07;
      	O_Y=0x30;
      	CCW2_PR();
       com=0x9f;  // 显示状态设置,1001ABCD,本处为闪烁,显示,文本显示,图形显示
       PR12();       
	   	com=0xa7;   //光标形状,10100ABC,形状为8点(列)*ABC行
       PR12();       
	   	dat1=0x09;  // 光标地址水平位置
       dat2=0x11;  // 光标地址垂直位置
       com=0x21;   
       PR1();	   
       }  
/*****************************/
  /* 显示通讯中画面 */
/*****************************/
display6()
  {    CLEAR();  
       CCW2_PR();
       code_1=0x0c;    /* 汉字写入:通*/ 
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x0d;	  /* 汉字写入:讯*/
       O_X=0x07;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x03;	 /*实际有残留的“讯”字,所以写空以消除*/
      	O_X=0x07;
       O_Y=0x20;
      	CCW2_PR(); 
 	  	code_1=0x03;	 /*实际有残留的“讯”字,所以写空以消除*/
     	O_X=0x07;
      	O_Y=0x30;
      	CCW2_PR();
       com=0x9f;  // 显示状态设置,1001ABCD,闪烁,显示,文本显示,图形显示
       PR12();        
	   com=0xa7;   //光标形状,10100ABC,形状为8点(列)*ABC行
       PR12();
	   dat1=0x09;  // 光标地址水平位置
       dat2=0x11;  // 光标地址垂直位置
       com=0x21;   
       PR1();
       }/*****************************/
 /*键扫描程序*/
/*****************************/
void delay(void)
  { unsigned char i;
    for(i=200;i>0;i--){}
   }
//扫描键值
unsigned char scankey(void)
  { unsigned char key,key1,keypush; 
   P1=0xFF;  //清一下P1口 
   if ((P1&0x3F)!=0x3F)  //有键按下
     { delay();
       if ((P1&0x3F)!=0x3F)
        { keypush=P1&0x3F;
          do
            { key1=P1&0x3F;
             }while(key1!=0x3F);
         key=keypush;
        }
       else return 0; 
      }
    else return 0;           
    return(key);
  }  
void scan(void)
  {   keyvalue=scankey();
 }  
/********************************/
/*通讯子程序*/
/********************************/
 tongxun()
{uchar i;
 CLEAR();
  display6();  //显示通讯画面
  TCON=0x05;
  TMOD=0x20;
  PCON=0;
  TH1=0xE6;
  TL1=0xE6;
  TR1=1;
  SCON=0X50;
  for(i=0;i<5120,TI=1;i++)
  {  ACC=RAM[i]; 
     SBUF=ACC;
     TI=0;
  }
  }
exit()
{CLEAR();
display10();
 do				  //等待S6确定
         {scan();
          }while (keyvalue!=0x1f);
}
display10()
  {    code_1=0x1c;         /* 汉字写入谢谢使用*/     
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x1c;
       O_X=0x05;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x1d;
       O_X=0x07;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x1e;
       O_X=0x09;
       O_Y=0x10;
       CCW2_PR();
      
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -