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

📄 点滴测量从机.c

📁 此为点滴测量子程序
💻 C
字号:
#include <AT89X51.H>
#include <intrins.h> 
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={"0123456789"};
uchar code table2[]={"NO."};
uchar code table3[]={"SPEED:"};
uchar code table4[]={"TOO LOW!!!!"};
uchar code table5[]={"BROKEN!!!!"};
uchar code table6[]={"SET"};
uchar code table7[]={"NOR"};
uchar code table8[]={"INPUT DATA"};
uchar code table9[]={"ERROR!!!!"};
uchar code table10[]={"WELCOME TO USE"};
uchar code table11[]={"THE EXTENSION"};
uchar no[3];
uchar speed[4];
sbit   RS=P3^7;
sbit   WR1=P3^6;
sbit    E=P3^5;
sbit RDat=P3^4;
sbit   TD=P3^3;
sbit PLAY=P1^1;
uchar count=0,i=0,j=0;
uchar p;
bit l=1;
bit q;





/****************************延时子函数********************************/
void mDelay(uchar j)
{ 
 uint i;
 for(;j>0;j--)
  {
   for(i=125;i>0;i--)           
   {;}
   }
}


void delay1()    //键盘去抖动延时
	{uchar i;
	for(i=200;i>0;i--)
	{}
	}

void delay(uchar n)
	{uchar f,m;
	for(m=n;m>0;m--)
   //for(n=15;n>0;n++)
	for(f=248;f>0;f--)
	{}	}







/****************************液晶显示子函数********************************/
/*虚拟同步串行通信*/
void corr(uchar dat)  //164使用共阴代码
{uchar ADS,n;
 ADS=dat;
 for(n=8;n>0;n--)
  {
   TD=0;
   RDat=ADS&0x80;      
   TD=1;
   ADS=ADS<<1;  
  }
 }

void lcd_com(unsigned char a)
 {  E=1;
    RS=0;
	WR1=0;
	corr(a);
    /*f_buzy(); */
    delay(1);
	E=0;
 }
/*数据发送*/
 void lcd_dat(unsigned char b)
  {  E=1;
     RS=1;
	 WR1=0;
	 corr(b);
     /*f_buzy(); */
     delay(1);
	 E=0;
  }
/*液晶数据缓冲*/
lcd_dis(uchar k[],char r) 
{char n;
lcd_com(r);
//delay(1);          
for(n=0;k[n]!=0x00;n++)
{lcd_dat(k[n]);
}

}
/****************************PID算法子函数********************************/




/****************************声光报警子函数***********************************/
speak(uchar a)
{
P3=a;     
PLAY=0;
delay(65);
PLAY=1;
P3=0xff;
}



/***************************** 数据通讯子函数******************************/
worknet(uchar t)
{
    SBUF=t;
	while(!TI);       
	TI=0;

}

 void receive()interrupt 4 using 0     //接收程序
{
	
	if(RI)
	{
    RI=0;
	p=SBUF;
	no[0]=p;//table1[p];
    //q=1;	
	}
	     }


/****************************键盘处理子函数*******************************/
select(uchar a)      //键值选择
{l=0;
if(count==1)      //设置
 {if(j<=2)
 {  speed[j]=table1[a];
      j++;
      speed[j]=0x00;
       lcd_dis(speed,0x8c);
	                       }}}

 enter()         //回车键
{uchar n;
l=0;
 if(count==1)
{if(no[1]==0x00)
{n=(no[0]&0x0f);
 worknet(n);}
 else
{n=(no[0]&0x0f)*10+(no[1]&0x0f);
 worknet(n);}
 }
   }


normal()       //正常模式
{//delay(2);
while((P1&0xf0)!=0xf0);
count=0;
l=0;
lcd_com(0x01);   //清屏
	delay(2);
lcd_dis(table2,0x80);
lcd_dis(table3,0x86);
lcd_dis(table7,0xcd);

 while(1)
 {lcd_dis(no,0x83);
 // P1=0xf0;
 if((P1&0xf0)!=0xf0) break;
 }}
set()        //设置模式
{j=0;i=0;
count=1;
l=0;
lcd_com(0x01);   //清屏
	delay(2);
lcd_dis(table2,0x80);
lcd_dis(table3,0x86);
lcd_dis(no,0x83);
lcd_dis(table8,0xc0);

lcd_dis(table6,0xcd);
}

uchar key(void)    //键盘扫描
{uchar sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{delay1();
if((P1&0xf0)!=0xf0)
{delay(100);
if((P1&0xf0)==0xf0)l=1;
sccode=0xfe;
while((sccode&0x10)!=0)
{P1=sccode;
if((P1&0xf0)!=0xf0)
{recode=(P1&0xf0)|0x0f;
P1=0xf0;
return((~sccode)+(~recode));
    }
 else
 sccode=(sccode<<1)|0x01;
 }
     }
        }
P1=0xf0;
	return(0);
	}
sweep()
{uchar i;
i=key();
if(l==1)
{
switch(i)
{
case 0x11:select(1);break;  //表值对应
case 0x21:select(2);break;
case 0x41:select(3);break;
//case 0x81:check();  break;
case 0x12:select(4);break;
case 0x22:select(5);break;
case 0x42:select(6);break;
case 0x82:normal(); break;
case 0x14:select(7);break;
case 0x24:select(8);break;
case 0x44:select(9);break;
case 0x84:set();    break;
case 0x18:enter();  break;
case 0x28:select(0);break;
//case 0x48:warn();   break;
//case 0x88:broken(); break;
}
  
    }}










     









/****************************单片机初此化子函数*******************************/

init()
{uchar u;
TMOD=0x20;//串行口设置      //波特率2400
TL1=0xf3;
TH1=0xf3;
PCON=0x00;
SCON=0xd0;
TR1=1;
EA=1;ES=1;PS=1;
 delay(20);
	lcd_com(0x0f);   //显示开关控制,开显示,开光标,闪烁?
	lcd_com(0x38);   //8位数据总线,两行显示,5X7点阵
	lcd_com(0x01);   //清屏
	delay(2);
	lcd_com(0x06);   //AC自动加1,显示不动  
    u=P0&0x0f;
	no[0]=table1[(u/10)];
	no[1]=table1[(u%10)];
	no[2]=0x00;
    lcd_dis(table10,0x80);
	lcd_dis(table11,0xc3);
}






/****************************主函数******************************/
main()
{init();
   

  while(1)
  {sweep();}
  }

⌨️ 快捷键说明

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