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

📄 可视听诊器设计.c

📁 此为基于单片机的可视听诊器设计。利用C语言实现了驻极体式声音传感器实现的心音数据采集系统功能
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <reg52.h>
#include <math.h>
#include <absacc.h>
#include <string.h>   //头文件
#define uchar unsigned char
/*lcd函数声明*/
PR1();
PR11();
PR12();
void ST01(void);
void ST3(void);
INT_1 ();  
CLEAR ();       
CCW2_PR ();
void DRAW();
W_DOT ();
//ad函数声明
void collect();
void delay(uchar x);
uchar readadc(void);
void adcck(void);
void adc(void);
//键函数声明
uchar scankey(void);
void scan(void);
keydo(keyvalue);
tongxun();
exit();
//显示画面函数定义
display1();
display2();
display4();
display5();
display6();
display7();
display10();
void display();
/* lcd  地址定义   */
  sbit  cd=P1^7;     //定义C/D
  sbit  wr=P3^6;     //定义wr
  sbit  rd=P3^7;     //定义rd
  sbit  yjcs=P2^7;   //定义lcd 的cs
/* ad 地址定义  */
  sbit adcdo=P3^2;
  sbit adccs=P2^6;
  sbit adcclk=P1^6;
  sbit ramcs=P2^5;
/*   常数定义   */
#define  para1 0x10;		 //显示宽度16个 
/*	 宏定义	 */
uchar bei_data=6;  //ad参数缩小倍数
uchar lcd_step=1;  //读ram时的读数间隔
uchar average;//采集数据的中间点
/*标志位*/
char flag,flag1;
/*参数声明*/
bit a;
long int ram_wr=0;
unsigned int O_X,O_Y, com,dat1,dat2,adc_sum;//com为液晶屏的指令代码,dat2显示文本垂直位置
uchar code_1, wave_count=0, adc_t, lb_date, adc_date, keyvalue;
uchar xdata RAM[5120]_at_ 0xc400;  //外部存储器,注意必须为0XCxxx,跟P2口有关
/******************************/
code uchar CCTAB [34] [32] = { 
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,    // 一,0x00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,    // 二,0x01
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
0x00,0x00,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0xFE,0x00,0x00,0x00,
          0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x3F,    // 三,0x02
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,
0x00,0x08,0xFC,0x00,0x00,0x00,0x10,0xF8,
0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x00,         
          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    //空格,0x03
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
          0x00,0x3F,0x21,0x21,0x21,0x3F,0x21,0x21,    // 用,0x04
0x21,0x3F,0x21,0x21,0x21,0x41,0x41,0x80,
0x08,0xFC,0x08,0x08,0x08,0xF8,0x08,0x08,
0x08,0xF8,0x08,0x08,0x08,0x08,0x28,0x10,                                 
          0x00,0x1F,0x10,0x10,0x1F,0x10,0x10,0x1F,    // 显,0x05
0x14,0x44,0x34,0x14,0x04,0x04,0xFF,0x00,
0x10,0xF8,0x10,0x10,0xF0,0x10,0x10,0xF0,
0x50,0x44,0x4C,0x50,0x40,0x44,0xFE,0x00,
          0x00,0x3F,0x00,0x00,0x00,0x00,0xFF,0x01,    // 示,0x06
0x01,0x09,0x19,0x21,0x41,0x01,0x05,0x02,
0x10,0xF8,0x00,0x00,0x00,0x04,0xFE,0x00,
0x00,0x20,0x18,0x0C,0x04,0x00,0x00,0x00,
          0x00,0x40,0x30,0x17,0x04,0x84,0x44,0x0F,    // 波,0x07
0x14,0x25,0xE4,0x24,0x28,0x29,0x32,0x24,
0x40,0x40,0x40,0xFC,0x44,0x48,0x40,0xF8,
0x08,0x10,0xA0,0x40,0xA0,0x10,0x0E,0x04,
          0x00,0x7F,0x11,0x11,0x11,0x11,0x11,0xFF,    // 形,0x08
0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x01,
0x80,0xC4,0x0C,0x10,0x20,0x44,0x0C,0xD0,
0x20,0x42,0x06,0x08,0x10,0x20,0x40,0x80,
          0x02,0x02,0xFF,0x04,0x08,0x0B,0x10,0x10,    // 存,0x09
0x30,0x5F,0x90,0x10,0x10,0x10,0x11,0x10,
0x00,0x04,0xFE,0x00,0x00,0xF8,0x10,0x20,
0x44,0xFE,0x40,0x40,0x40,0x40,0x40,0x80,
          0x10,0x10,0x18,0x25,0x24,0x60,0xBD,0x24,    // 储,0x0a
0x25,0x26,0x24,0x25,0x26,0x24,0x20,0x20,
0x40,0x40,0x48,0xFC,0x50,0x64,0xFE,0x88,
0xFC,0x88,0x88,0xF8,0x88,0x88,0xF8,0x88,
          0x40,0x27,0x24,0x04,0x05,0xE4,0x24,0x27,    // 调,0x0b
0x24,0x25,0x25,0x2D,0x35,0x25,0x08,0x10,
0x04,0xFE,0x44,0x44,0xF4,0x44,0x54,0xFC,
0x04,0xF4,0x14,0x14,0xF4,0x04,0x14,0x08,
          0x03,0x40,0x30,0x10,0x03,0x02,0xF2,0x13,    // 通,0x0c
0x12,0x12,0x13,0x12,0x12,0x2A,0x44,0x03,
0xF8,0x10,0xA0,0x48,0xFC,0x48,0x48,0xF8,
0x48,0x48,0xF8,0x48,0x68,0x50,0x06,0xFC,
          0x00,0x47,0x30,0x11,0x01,0x01,0xF1,0x11,    // 讯,0x0d
0x17,0x11,0x11,0x11,0x15,0x19,0x11,0x01,
0x10,0xF8,0x10,0x10,0x10,0x10,0x10,0x50,
0xF0,0x10,0x10,0x10,0x0A,0x0A,0x06,0x00,
          0x00,0x04,0xFE,0x10,0x11,0x23,0x25,0x7D,    // 确,0x0e
0xA5,0x25,0x25,0x25,0x25,0x3D,0x22,0x04,
0x40,0x40,0x78,0x90,0x24,0xFE,0x24,0x24,
0xFC,0x24,0x24,0xFC,0x24,0x24,0x24,0x0C,
          0x00,0x40,0x30,0x10,0x00,0x00,0xF0,0x10,    // 认,0x0f
0x10,0x11,0x11,0x15,0x1A,0x12,0x04,0x08,
0x40,0x40,0x40,0x40,0x40,0x40,0xA0,0xA0,
0xA0,0x10,0x10,0x10,0x08,0x08,0x06,0x04,
          0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,    // 回,0x10
0x44,0x44,0x47,0x44,0x40,0x7F,0x40,0x00,
0x00,0x04,0xFE,0x04,0x44,0xE4,0x44,0x44,
0x44,0x44,0xC4,0x44,0x04,0xFC,0x04,0x00,
          0x02,0x02,0x7F,0x04,0x09,0x11,0x21,0x3F,    // 车,0x11
0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,
0x00,0x08,0xFC,0x00,0x00,0x00,0x20,0xF0,
0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,
          0x00,0x40,0x33,0x12,0x02,0x02,0xF2,0x12,    // 返,0x12
0x12,0x12,0x12,0x14,0x15,0x28,0x44,0x03,
0x08,0x1C,0xE0,0x00,0x00,0xF8,0x08,0x90,
0x50,0x20,0x50,0x8C,0x04,0x00,0x06,0xFC,
          0x20,0x10,0x10,0x00,0xFF,0x20,0x24,0x3E,    // 放,0x13
0x24,0x24,0x24,0x24,0x44,0x54,0x89,0x02,
0x40,0x40,0x40,0x84,0xFE,0x08,0x88,0x88,
0x50,0x50,0x20,0x50,0x50,0x88,0x0E,0x04,
          0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x02,    // 大,0x14
0x02,0x02,0x04,0x04,0x08,0x10,0x60,0x00,
0x00,0x00,0x00,0x00,0x04,0xFE,0x00,0x80,
0x80,0x40,0x40,0x20,0x10,0x0E,0x04,0x00,
          0x20,0x20,0x27,0x44,0x49,0xF1,0x12,0x26,    // 缩,0x15
0x4A, 0xFA, 0x42, 0x02, 0x1A, 0xE2, 0x42, 0x02,
0x40,0x20,0xFE,0x02,0x04,0xFE,0x20,0x44,
0xFE,0x84,0x84,0xFC,0x84,0x84,0xFC,0x84,
          0x01,0x01,0x01,0x01,0x01,0x05,0x05,0x09,    // 小,0x16
0x09,0x11,0x21,0x41,0x01,0x01,0x05,0x02,
0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,
0x08,0x04,0x04,0x00,0x00,0x00,0x00,0x00,
          0x10,0x10,0x10,0x13,0xFC,0x11,0x15,0x19,    // 拉,0x17
0x30,0xD0,0x10,0x10,0x10,0x10,0x57,0x20,
0x80,0x40,0x48,0xFC,0x00,0x08,0x08,0x08,
0x90,0x90,0x90,0xA0,0x20,0x44,0xFE,0x00,
          0x08,0x08,0x08,0x17,0x14,0x34,0x54,0x97,    // 伸,0x18
0x14,0x14,0x14,0x17,0x14,0x10,0x10,0x10,
0x40,0x40,0x44,0xFE,0x44,0x44,0x44,0xFC,
0x44,0x44,0x44,0xFC,0x44,0x40,0x40,0x40,
          0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x2F,    // 压,0x19
0x20,0x20,0x20,0x20,0x40,0x40,0x9F,0x00,
0x08,0xFC,0x80,0x80,0x80,0x80,0x88,0xFC,
0x80,0xA0,0x98,0x88,0x80,0x84,0xFE,0x00,
		  0x00,0x00,0x7F,0x00,0x11,0x08,0x01,0x01, 	  //	采,0x1a
0xFF,0x03,0x05,0x09,0x11,0x61,0x01,0x01,
0x08,0x7C,0x80,0x08,0x18,0xA0,0x00,0x04,
0xFE,0x80,0x40,0x30,0x0E,0x04,0x00,0x00,
          0x09,0x08,0x1F,0x31,0x5F,0x91,0x1F,0x11,	  //  集,0x1b
0x1F,0x11,0xFF,0x05,0x09,0x11,0x61,0x01,
0x00,0x90,0xF8,0x00,0xF0,0x00,0xF0,0x00,
0xF8,0x00,0xFE,0x40,0x20,0x1C,0x08,0x00,
0x02,0x44,0x2F,0x28,0x0F,0x08,0xEF,0x28,    // 谢,0x1c
0x28,0x3F,0x21,0x2A,0x34,0x28,0x12,0x01,
0x08,0x88,0xC8,0x88,0x88,0xFE,0x88,0x88,
0xC8,0xA8,0xA8,0x88,0x88,0x88,0xA8,0x10,
0x10,0x10,0x1F,0x20,0x27,0x64,0xA4,0x24,    // 使,0x1e
0x27,0x24,0x22,0x21,0x20,0x21,0x26,0x28,
0x40,0x44,0xFE,0x40,0xFC,0x44,0x44,0x44,
0xFC,0x44,0x40,0x80,0xC0,0x30,0x0E,0x04,
0x00,0x3F,0x21,0x21,0x21,0x3F,0x21,0x21,    // 用,0x1f
0x21,0x3F,0x21,0x21,0x21,0x41,0x41,0x80,
0x08,0xFC,0x08,0x08,0x08,0xF8,0x08,0x08,
0x08,0xF8,0x08,0x08,0x08,0x08,0x28,0x10,
			0x03,0x42,0x32,0x13,0x02,0x02,0xF3,0x12,    // 退,0x20
0x12,0x12,0x12,0x13,0x12,0x28,0x44,0x03,
0xF8,0x08,0x08,0xF8,0x08,0x08,0xFC,0x08,
0xD0,0x20,0x90,0x0C,0x04,0x00,0x06,0xFC,
0x01,0x01,0x21,0x21,0x21,0x21,0x3F,0x21,    // 出,0x21
0x01,0x41,0x41,0x41,0x41,0x41,0x7F,0x40,
0x00,0x00,0x08,0x08,0x08,0x08,0xF8,0x08,
0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,
0x00,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,   		// 四,0x21
0x44,0x44,0x48,0x50,0x40,0x7F,0x40,0x00,
0x00,0x04,0xFE,0x44,0x44,0x44,0x44,0x44,
0x44,0x3C,0x04,0x04,0x04,0xFC,0x04,0x00
};
/*------------------------------------------------
The main C function.  Program execution starts
here after stack initialization.
------------------------------------------------*/
main()
 {     unsigned int i=0;       
       yjcs=0;  
       INT_1();         /* 屏幕初始化函数 */
       CLEAR();         /* 清屏函数 */
       for(i=0;i<5120;i++)
       {RAM[i]=0x00;}    //对外部RAM初始化 
	    display1();    //显示开机画面
       do				  //等待S6确定
         {scan();
         if (keyvalue==0x3d) exit();
         }while (keyvalue!=0x1f);            
	   while(1)
	   {INT_1();
	    CLEAR();
	    display2();  //显示菜单选择画面    
		 flag=1;      
		 do
         { scan();
         if(keyvalue==0x3b)//s4上移
            { if (dat2>=7) dat2=1;	   //光标垂直方向赋值
                     else dat2=dat2+2;
              if (flag>=4) flag=1;  //光标标志赋值
                     else  flag++;  
              display4();	 /* 显示光标纵向移*/
            }
         else if(keyvalue==0x37)//s3下移
             { if (dat2<=1) dat2=7;
                     else dat2=dat2-2;
               if (flag<=1) flag=4;
                     else flag--;
               display4(); 
             }    
               } while (keyvalue!=0x1f);//S6确认        
	   switch(flag)
		{case 1:collect();break;
		 case 2:display(); break;
		 case 3:tongxun();break;
		 case 4:exit();break;} 
		 }		
		}     
void collect(void)
{  CLEAR();
	display5();  //显示通讯中画面 
   ram_wr=0;
   TCON=0x40; //T1记时停
	TMOD=0x00; //T1工作方式为0模式,
	TH1=0X00;
	TL1=0X00;	
   IE=0x88;   //开中断,定时器1开中断  	    
	while(ram_wr<5120)
	{a=0;
	 TH1=0xe7;		 //按照香农定理,采样频率大于1200HZ,就是时间要小于0.83ms,
    TL1=0x00;       //即低于830us 取0.8ms
	 TR1=1;         //启动定时器1
	 while(a==0)
	 {;}   	  }	 
   TR1=0;//关闭定时器1
	ram_wr=0;       //存贮地址的第1个
	yjcs=1;
	yjcs=0;	
   IE=0X00;
    }
void  TIMER(void)  interrupt 3		   //采集并存储数据
{  adc();
   //yjcs=1;   /*lcd的cs值为1LCD不工作*/
   //ramcs=1; //打开存储器6264   
   RAM[ram_wr]=adc_date;  //wave赋值给ram
   ram_wr++;   //ram 数组下标
   a=1;   
   }             
/*****************************/
/*图像显示*/
/****************************/ 
void display()
{ram_wr=0; 
DRAW();
 do 
 {scan();
  {if(keyvalue==0x3e)
      {bei_data++;
 	   if (bei_data==8) bei_data=0; 
      DRAW();}
	 else if(keyvalue==0x2f)
    {ram_wr=ram_wr+128;
	 if(ram_wr>=1024) ram_wr=0;
	 	  DRAW();}	 
     }    
   }while(keyvalue!=0x3d);
 }
/**************************/
/*     屏幕初始化函数     */
/**************************/
INT_1()
    {  dat1=0x00;      /*设文本显示区域首地址*/
       dat2=0x00;
       com=0x40;
       PR1();       
	    dat1=para1;    /*设文本显示区域宽度*/
       dat2=0x00;
       com=0x41;
       PR1();       
	    dat1=0x00;    /*设图形显示区域首地址*/
       dat2=0x08;
       com=0x42;
       PR1();       
	    dat1=para1;    /*设图形显示区域宽度*/
       dat2=0x00;
       com=0x43;
       PR1();       
	    com=0xa3;      /*光标形状设置*/
       PR12();       
	    com=0x80;      /*显示方式设置逻辑"或"合成*/
       PR12();       
	    com=0x9c;      /*显示开关设置 开文本和图形显示*/
       PR12();
    }
/***************************/
/*       清显示函数        */
/***************************/
CLEAR()
    {   unsigned int i;
        dat1=0x00;
        dat2=0x00;
        com=0x24;  /* 设置显示地址 */
        PR1();         
	     com=0xb0;  /* 设置自动写方式 */
        PR12();    
	for(i=0;i<8200;i++) /* 清8K存储器 */
       { ST3();
         cd=0;
         P0=0xff;
         P0=0x00;
         wr=0;
        //NOP(); 
         wr=1;
       }       
	   com=0xb2;     /* 设置自动写方式结束*/
       PR12();
    }
/********************************/
/*    汉字写入(图形方式)函数  */
/********************************/
CCW2_PR()
    {   unsigned int i,j,count1;
        i=para1;
        j=i*O_Y+O_X+0x0800;   /* 图形显示区首地址为0x0800*/
             for(count1=0;count1<16;count1++)
                {dat1=j%256;  /* 显示地址设置 */
                 dat2=j/256;
                 com=0x24;
                 PR1();
                 dat2=CCTAB[code_1][count1];
                 com=0xc0;
                 PR11();
                 dat2=CCTAB[code_1][count1+16];
                 PR11();
                 j=j+i;
                }
     }
/**************************/
/*        绘点函数          */
/****************************/
W_DOT()
 {    uchar j;
      unsigned int k;
      j=O_X%8;

⌨️ 快捷键说明

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