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

📄 caijiduan.c

📁 8路数据采集器
💻 C
字号:
 #include <reg51.h>
 #define uchar unsigned char 
  
   
  uchar code dis_7[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};
  short dis[8][4];
  short TAB[4][4]={
                   {0x00,0x01,0x02,0x03},
                   {0x04,0x05,0x06,0x07},
                   {0x08,0x08,0x08,0x08},
				   {0x08,0x08,0x08,0x08}
				   };
  short n;

  sbit dot=P0^7;
  sbit P3_3=P3^3;  
  sbit alarm=P3^4;

   /*初始化*/
	void init()
	{
	 TMOD=0x21;	  //T1自动重装,T0工作在16位计数
	 TH1=0xfd;
	 TL1=0xfd;
	 PCON=0x00;
	 TCON=0x51;   //启动T0,T1
	 SCON=0X50;
	 EA=1;
	 ES=1;
	 ET0=1;
	 EX0=1;
	 P3_3=0;
	 alarm=0;
	 n=8;
	 }

	/*延时1ms子程序*/

	  void delay(short t)
	    {
		 short i,j;
		 for(i=0;i<t;i++)
		    for(j=0;j<120;j++);
		}

	   /*发送子程序*/
	void send(short h,short l)
	{
	 do {
	     P3_3=1;	
		 SBUF=TAB[h][l];while(!TI);TI=0;
		 P3_3=0;
		 while(!RI);RI=0;
		 }
	 while(SBUF!=TAB[h][l]);
	 P3_3=1;
	 SBUF=0xaa;while(!TI);TI=0;
	 P3_3=0;
	} 


		/*T0中断*/

	void t0() interrupt 1
	  {
	   alarm=1;
	  }
       


	 /*键盘扫描中断*/
	 void keyscan()interrupt 0
	 {
	  short H,L;
	  EA=0;
	  P2=0xf0;
	  if((P2&0xf0)!=0xf0)
	   {
		  delay(5);
	      switch(P2)
		    {
		      case 0x70: H=0;break;
		      case 0xb0: H=1;break;
		      case 0xd0: H=2;break;
		      case 0xe0: H=3;break;
		      default: break;
	 	    }
	     P2=0x0f;
	     if((P2&0x0f)!=0x0f)
	       {
	         switch(P2)
		       {
		          case 0x07: L=0;break;
		          case 0x0b: L=1;break;
		          case 0x0d: L=2;break;
                  case 0x0e: L=3;break;
                  default: break;
	 	       }
	        do delay(5);
	        while((P2&0x0f)!=0x0f);
			n=TAB[H][L];
		    send(H,L);	 
	    	}

	 	 }
		 EA=1;
	}



	 

	/*接收中断子程序*/

	void receive() interrupt 4 
	 {
	  unsigned short temp;
	  if(RI==1)
	    {
		  EA=0;
		  RI=0;
		  temp=SBUF;
		  P3_3=1;
		  SBUF=temp;while(!TI);TI=0;
		  P3_3=0;
		  while(!RI);RI=0;
		  if(SBUF==0xaa)
		    {
			     n=temp;
		  	     do{
			        while(!RI);RI=0; 
					temp=SBUF;
					P3_3=1;
			    	SBUF=temp;while(!TI);TI=0;
					P3_3=0;
			    	while(!RI);RI=0;
			    	}
			     while(SBUF!=0xaa);
			 dis[n][0]=n+1;
			 dis[n][1]=temp/51;
			 dis[n][3]=temp%51*10;
			 dis[n][2]=dis[n][3]/51;
			 dis[n][3]=dis[n][3]%51*10/51;
								     
		    }
		    else EA=1;
	    }
	   TR0=0;	  //计数器T0置0
	   TL0=0x00;
	   TH0=0x00;
	   TR0=1;
	 }
	

	  

	 
	  /*显示子程序*/

 void display()
 {
	  	short i,k;
		int	h;
	 if(n!=8)			   /*单路显示*/
		  {
		   for(h=0;h<500;h++)	 /*显示时间1秒*/
		    {
		     for(k=0;k<4;k++)
			   {
			     P0=dis_7[dis[n][k]];
				 if(k==2) {dot=0;}
				 P1=scan_con[k];
				 delay(1);
				 P1=0xff;
				}
		     }
		   }
	else {    					   /*循环显示*/
		 for(i=0;i<8;i++)
			{
			   for(h=0;h<500;h++)
			     {
				  for(k=0;k<4;k++)
			        {
			          P0=dis_7[dis[i][k]];
				      if(k==2) {dot=0;}
			       	  P1=scan_con[k];
				      delay(1);
			    	  P1=0xff;
			    	}
			  	  }
			  }
	      }
	
  }
	
	/*主程序*/
	
	void main()

	  {
	     init();
	     while(1)
	       {
   	        display();
	       }	  
	   }

⌨️ 快捷键说明

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