肺活量,源码51

晶振频率  22.1184MHz
#include"reg52.h"


#define open 0x3f
#define close 0x3e
#define row 0xc0
#define page 0xb8
#define line  0x40

#define OUT  P1

sbit RESET=P3^4;
sbit CS1=P3^2;
sbit CS2=P3^3;
sbit E=P3^7;
sbit R_W=P3^5;
sbit D_I=P3^6;

sbit AD_CS=P2^3;
sbit AD_CLK=P2^1;
sbit AD_IO=P2^2;

/// 智(0) 能(1) 肺(2) 活(3) 量(4) 测(5) 仪(6) 毫(7) 升(8)
static code unsigned char word[][2][16]={

0x10,0x14,0x13,0x92,0x7E,0x32,0x52,0x92,0x00,0x7C,0x44,0x44,0x44,0x7C,0x00,0x00,
0x00,0x01,0x01,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,/*"智",0*/

0x10,0xB8,0x97,0x92,0x90,0x94,0xB8,0x10,0x00,0x7F,0x48,0x48,0x44,0x74,0x20,0x00,
0x00,0xFF,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x3F,0x44,0x44,0x42,0x72,0x20,0x00,/*"能",1*/

0x00,0x00,0xFE,0x12,0x12,0xFE,0x04,0xE4,0x24,0x24,0xFF,0x24,0x24,0xE4,0x04,0x00,
0x40,0x30,0x0F,0x21,0x41,0x3F,0x00,0x1F,0x00,0x00,0xFF,0x08,0x10,0x0F,0x00,0x00,/*"肺",2*/

0x10,0x60,0x01,0xC6,0x30,0x20,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x22,0x20,0x00,
0x04,0x04,0xFF,0x00,0x00,0x00,0xFE,0x42,0x42,0x43,0x42,0x42,0xFE,0x00,0x00,0x00,/*"活",3*/

0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00,/*"量",4*/

0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,/*"测",5*/

0x40,0x20,0xF0,0x0C,0x03,0x00,0x38,0xC0,0x01,0x0E,0x04,0xE0,0x1C,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x40,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00,/*"仪",6*/

0x00,0x82,0x82,0x82,0xBA,0xAA,0xAA,0xAB,0xAA,0xAA,0xAA,0xBA,0x82,0x82,0x82,0x00,
0x00,0x01,0x20,0x28,0x2A,0x2A,0x2A,0x7E,0xAA,0xAA,0xAA,0xA8,0xA0,0x81,0xE0,0x00,/*"毫",7*/

0x00,0x40,0x44,0x44,0x44,0xFE,0x42,0x42,0x40,0x40,0xFE,0x40,0x40,0x60,0x40,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,/*"升",8*/

};


///
static code unsigned char 
letter[][2][8]={	
/字符为8*16格式
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/

0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",10*/
};
///


unsigned char writepage=0,writeline=0;
unsigned char circlemax=3,circle=0;
unsigned char temp;
union thetime{unsigned long total;
			  struct{unsigned char timeH1,timeH0,timeL1,timeL0;}time;
             }sum;
union thenum {unsigned int total;
			  struct{unsigned char numH,numL;}numHL;
             }num;

void initUart(void);
void delay(unsigned char);
void wtitedata(unsigned char);
void writeorder(unsigned char);
void clear(void);
void sendpc(unsigned int carnum,unsigned long time,unsigned char circle,unsigned char circlemax);
void sendlcm(unsigned int carnum,unsigned long time,unsigned char circle,unsigned char circlemax);

void delay(unsigned char ms)
  {unsigned char i;
  for(;ms>0;ms--)
   for(i=100;i>0;i--)
    ;
  }


void writedata(unsigned char _data)
  {
   delay(0);
   E=0;
   R_W=0;
   D_I=1;   
   E=1;
   OUT=_data;
   E=0;
   //delay(1);
  }

void writeorder(unsigned char _order)
  {
  delay(0);
  E=0;
  R_W=0;
  D_I=0; 
  E=1;
  OUT=_order;
  E=0;
  //delay(1);
  }
//清屏
void clear(void)
{
  unsigned char t,i,j,pg,l;
  t=1;
  CS1=0;
  CS2=1;
  do
  {
  for(i=0;i<8;i++)
    {
    pg=page|i;
	writeorder(pg);
    l=line|0x00;
    writeorder(l);
	for(j=0;j<128;j++)
	  {
	   writedata(0x00);
	   }
    }
  CS1=1;
  CS2=0;
  }while(t--);
}

///******************************///
void out_word(unsigned char _page,unsigned char _line,unsigned char word_num,unsigned char back)
 {
  unsigned char i,j,k,wordbyte,order;
  char m;
  m=_line;
  if(m>127)
     m=127;
  k=0;
//
  if(m<64)
  {
  CS1=1;
  CS2=0;
  for(j=0;j<2;j++)
    {
	 order=_page+j;
	 if(order>7)
        break;
     order=page|order;
	 writeorder(order);
	 order=line|m;
	 writeorder(order);

	 for(i=0;i<16&&((m+i)<64);i++)
	    {wordbyte=word[word_num][j][i];
		 if(back>0)
		    wordbyte=~wordbyte;
	     writedata(wordbyte);
		}
	 k=i;
	}
  }
  if((m+k)>=64)
  {
  m=(m+k)-64;
  CS1=0;
  CS2=1;
  for(j=0;j<2;j++)
    {	 
	 writepage=_page+j;
	 if(writepage>7)
        break;
     order=page|writepage;
	 writeorder(order);
	 writeline=m;
	 order=line|writeline;
	 writeorder(order);
	for(i=k;i<16&&((m+i)<64);i++)
	    {wordbyte=word[word_num][j][i];
		 if(back>0)
		    wordbyte=~wordbyte;
		 writedata(wordbyte);
		}
	}
  }
}
/
/
void out_letter(unsigned char _page,unsigned char _line,unsigned char letter_num,unsigned char back)
 {
  unsigned char i,j,k,letterbyte,order;
  char m;
  m=_line;
  if(m>127)
     m=127;
  k=0;
  if(m<64)
  {
  CS1=1;
  CS2=0;
  for(j=0;j<2;j++)
    {
	 order=_page+j;
	 if(order>7)
        break;
     order=page|order;
	 writeorder(order);
	 order=line|m;
	 writeorder(order);

	 for(i=0;i<8&&((m+i)<64);i++)
	    {letterbyte=letter[letter_num][j][i];
		 if(back>0)
		    letterbyte=~letterbyte;
	     writedata(letterbyte);
		}
	 k=i;
	}
  }
  if((m+k)>=64)
  {
  m=(m+k)-64;
  CS1=0;
  CS2=1;
  for(j=0;j<2;j++)
    {	 
	 writepage=_page+j;
	 if(writepage>7)
        break;
     order=page|writepage;
	 writeorder(order);
	 writeline=m;
	 order=line|writeline;
	 writeorder(order);
	for(i=k;i<8&&((m+i)<64);i++)
	    {letterbyte=letter[letter_num][j][i];
		 if(back>0)
		    letterbyte=~letterbyte;
		 writedata(letterbyte);
		}
	}
  }
}

//
void initUart(void)
{
 TMOD|=0x20;
 SCON=0x50;
 TH1=0xfa;
 TL1=0xfa;
 TR1=1;
 ET1=1;
}

void uart(void) interrupt 4   //串口中断
{ 
  if(RI)
    {
	  RI=0;
	  temp=SBUF;

	}
  else if(TI)
       TI=0;

}
/
发数据到上位机
void sendpc(unsigned int carnum,unsigned long time,unsigned char circle,unsigned char circlemax)
{
 num.total=carnum;
 sum.total=time;
 SBUF=0x00; 表示开始
 delay(10);
 SBUF=num.numHL.numH;
 delay(10);
 SBUF=num.numHL.numL;
 delay(10);
 SBUF=sum.time.timeH1;
 delay(10);
 SBUF=sum.time.timeH0;
 delay(10);
 SBUF=sum.time.timeL1;
 delay(10);
 SBUF=sum.time.timeL0;
 delay(10);
 SBUF=circle;
 delay(10);
 SBUF=circlemax;
 delay(10);
 SBUF=0xFF;表示结束
 delay(10);
}
/
void sendlcm(unsigned int carnum,unsigned long time,unsigned char circle,unsigned char circlemax)
{
  unsigned char temp,temp2;

  carnum=carnum%10000;
  temp=carnum/1000;
  out_letter(2,50,temp,0);
  carnum=carnum%1000;
  temp=carnum/100;
  out_letter(2,60,temp,0);
  carnum=carnum%100;
  temp=carnum/10;
  out_letter(2,70,temp,0);
  temp=carnum%10;
  out_letter(2,80,temp,0);

  time=time%1000000;
  temp=time/100000;
  out_letter(4,40,temp,0);
  time=time%100000;
  temp=time/10000;
  out_letter(4,48,temp,0);
  time=time%10000;
  temp=time/1000;
  out_letter(4,56,temp,0);
  time=time%1000;
  temp=time/100;
  out_letter(4,68,temp,0);
  time=time%100;
  temp=time/10;
  out_letter(4,76,temp,0);
  temp=time%10;
  out_letter(4,84,temp,0);

  temp2=circle%100;
  temp=temp2/10;
  out_letter(6,20,temp,0);
  temp=temp2%10;
  out_letter(6,28,temp,0);

  temp2=circlemax%100;
  temp=temp2/10;
  out_letter(6,92,temp,0);
  temp=temp2%10;
  out_letter(6,100,temp,0);
}
//
unsigned char TLC549(void)
{
 unsigned char x,i,temp;
 temp=0;
 x=0;
 AD_CLK=0;
 AD_CS=1;
 delay(100);
 AD_CS=0;
 for(i=0;i<8;i++)
   {
	x=x<<1;
 	AD_CLK=1;
 	AD_CLK=0;
 	temp=AD_IO;
 	temp=temp&0x01;
	x=x+temp;

   }
 return x;
}


void main(void)
{  
  unsigned char order,i,temp;
  unsigned char adsum;
  unsigned int  sum;
  unsigned long v;
  initUart();
  //开显示
  delay(1);
  delay(250);
  writeorder(close);
  delay(250);
  CS1=0;
  CS2=1;
  writeorder(open);
  CS1=1;
  CS2=0;
  writeorder(open);
  clear();
  order=row|0x00;
  writeorder(order);
  order=page|0x00;
  writeorder(order);
  delay(1);
/****************/

智能肺活量测量仪
  out_word(1,0,0,0);
  out_word(1,16,1,0);
  out_word(1,32,2,0);
  out_word(1,48,3,0);
  out_word(1,64,4,0);
  out_word(1,80,5,0);
  out_word(1,96,4,0);
  out_word(1,112,6,0);

肺活量:    毫升
  out_word(5,0,2,0);
  out_word(5,16,3,0);
  out_word(5,32,4,0);

  out_letter(5,48,10,0);

  out_word(5,96,7,0);
  out_word(5,112,8,0);
/
/

//  sum.total=0x4f3f2f1f;
//  num.total=359;
//  sendlcm(num.total,sum.total,circle,circlemax);
//  sendpc(num.total,sum.total,circle,circlemax); 
   


  while(1)
  
  {
  sum=0;
  v=0;
  for(i=0;i<20;i++)
    {
	  delay(1);
	  adsum=TLC549();
	  sum=sum+adsum;
	}
  delay(200);
  sum=sum/20;
  if(sum>0x60)
     sum=sum-0x66;
	 else
	     sum=0;
  SBUF=sum;
  delay(20);
  sum=sum%10000;

  temp=sum/1000;
  out_letter(5,64,temp,0);
  sum=sum%1000;
  temp=sum/100;
  out_letter(5,72,temp,0);
  sum=sum%100;
  temp=sum/10;
  out_letter(5,80,temp,0);
  sum=sum%10;
  temp=sum;
  out_letter(5,88,temp,0);
 
  }

  while(1);
}

 

上一篇:Keil环境下创建STM32汇编语言工程(无硬件)


下一篇:什么是大小端