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

📄 11.c

📁 一个水闸水位控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
          dispdataK[2]=dispdataK[2]|0x80;
	  else
	  dispdataK[1]=dispdataK[1]|0x80;
	  max7219_input_8_bit(0x0,0x0);
	  max7219_input_8_bit(i+1,dispdataK[i]);
	  MAX7219_LOAD=1; }  
}
  
 
   MAX7219_LOAD=0;
   max7219_input_8_bit(0x0,0x0); 
   max7219_input_8_bit(LEDBIT1,ledbyte1); 
   MAX7219_LOAD=1;
 
  
  
  }
          
  endless: warn7=1;JDQ=warnbyte;delay(8);warn7=0;JDQ=warnbyte;delay(100);
 }
/*按键处理模块结束++++++++++++++++++++++++++++++++++++++++++++++++++*/
void warn()
{
   if(chiefdata>=var[0])
      {warn0=1;ledb1=1;}
 else 
      {warn0=0;ledb1=0;}			
 
 if(chiefdata>=var[1])
      {warn1=1;ledc1=1;}
 else 
      {warn1=0;ledc1=0;}
      			
 if(chiefdata<=var[2])
      {warn2=1;ledd1=1;}
 else 
      {warn2=0;ledd1=0;}	
 

if(chiefdataA>=var[3])
      {warn3=1;lede1=1;}
 else {warn3=0;lede1=0;}  
  
 if(chiefdataA>=var[4])
      {warn4=1;ledf1=1;}  
 else 
      {warn4=0;ledf1=0;} 
   
 warn7=(warn0|warn1|warn2|warn3|warn4)&press;          	/*声报警*/
 leda1=1;  /*运行灯*/
 MAX7219_LOAD=0;
 max7219_input_8_bit(0x0,0x0); 
 max7219_input_8_bit(LEDBIT1,ledbyte1); 
 MAX7219_LOAD=1;
 
 JDQ=warnbyte;delay(10);X25045_CS=0;delay(1);X25045_CS=1;
}
 


/*MAX7219模块开始+++++++++++++++++++++++++++++++++++++++++++++++++++*/
void max7219_input_8_bit(char inputaddress,char inputdata)
{char i;
	for (i=0;i<8;i++)
	{	MAX7219_CLK=0;
		MAX7219_DIN=inputaddress & 0x80;
		inputaddress=inputaddress<<1;
		MAX7219_CLK=1;
	}
	for (i=0;i<8;i++)
	{	MAX7219_CLK=0;
		MAX7219_DIN=inputdata & 0x80;
		inputdata=inputdata<<1;
		MAX7219_CLK=1;
	}
}

void max7219_init()	/*max7219的初始化*/
  {					
	MAX7219_LOAD=0;
	max7219_input_8_bit(0x0f,0x00);	/*01--测试  00--正常*/
	max7219_input_8_bit(0x0f,0x00);	/*01--测试  00--正常*/
	MAX7219_LOAD=1;
	
	MAX7219_LOAD=0;
	max7219_input_8_bit(0x0b,0x07);	/*0-7 对应  显示0到7个位*/
	max7219_input_8_bit(0x0b,0x07);	/*0-7 对应  显示0到7个位*/
	MAX7219_LOAD=1;
	
	MAX7219_LOAD=0;
	max7219_input_8_bit(0x0a,0x08);	/*0-f 对应 1/32--31/32*/
	max7219_input_8_bit(0x0a,0x08);	/*0-f 对应 1/32--31/32*/
	MAX7219_LOAD=1;
	
	MAX7219_LOAD=0;
	max7219_input_8_bit(0x09,0xff);
	max7219_input_8_bit(0x09,0x1f);		/*D7-D0 对应7-0位为译码方式*/		                        /*1--译码  0--非译码*/
	MAX7219_LOAD=1;
	
	MAX7219_LOAD=0;                                /*关断模式选择(地址0x0c)*/	
	max7219_input_8_bit(0x0c,0x01);	/*00--关断 01--正常*/	
	max7219_input_8_bit(0x0c,0x01);	/*00--关断 01--正常*/					
	MAX7219_LOAD=1;
}

/*MAX7219模块结束+++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*X25045模块开始++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void x25045_outb(char outdata)
{char i;
  for(i=1;i<=8;i++)
    {X25045_SCK=0;
     outdata=outdata<<1;
     X25045_SI=CY;
     X25045_SCK=1;
     }
  X25045_SI=0;
}

char x25045_inb()
{
  char i,j,k=0;
    for (i=1;i<=8;i++)
      {X25045_SCK=1;
       X25045_SCK=0;
       j=(X25045_SO==1)?1:0;
       k=(k<<1)|j; 
      }
  return(k);
}

char x25045_rdsr()
{char i;
 X25045_SCK=0;
 X25045_CS=0;
 x25045_outb(0x05);
 i=x25045_inb();
 X25045_SCK=0;
 X25045_CS=1;
 return i;
}

void x25045_wipp()
{char i;
 char j;
 for (i=1;i<=99;i++)
 {
  j=x25045_rdsr();
  if ((j&0x01)==0) /*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到99次*/ 
    {break;}	  
 }
}


void x25045_wren()
{	X25045_SCK=0;
	X25045_CS =0;
	x25045_outb(0X06);
	X25045_SCK=0;
	X25045_CS=1;
}

void x25045_wrdi()
{	X25045_SCK=0;
	X25045_CS =0;
	x25045_outb(0X04);
	X25045_SCK=0;
	X25045_CS=1;
}

void x25045_wrsr()
{	X25045_SCK=0;
	X25045_CS =0;
	x25045_outb(0x01);
	x25045_outb(0x00);	/*看门狗时间设置*/
	X25045_SCK=0;
	X25045_CS=1;
	x25045_wipp();
}

void x25045_wrbt(int address,char indata)
{
 X25045_SCK=0;
 X25045_CS=0;
 //x25045_outb((((uchar)(address-0XFF))<<3)|0x02);/* Send WRITE instruction including MSB of address */
 x25045_outb(((char)(address>>5)&0x08)|0x02);
 /*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
 x25045_outb((char)(address));
 /*输出低位地址到25045*/
 x25045_outb(indata);
 /*写入数据到25045的对应单元*/
 X25045_SCK=0;
 X25045_CS=1;
 x25045_wipp();
 /*检测是否写完*/
}


void x25045_write_word(int address,int indata)
{union word_bytes tb1;
tb1.word=indata;
x25045_wren();
x25045_wrbt(address,tb1.bytes.b0);
x25045_wren();
x25045_wrbt(address+1,tb1.bytes.b1);
x25045_wrdi();
}

uchar x25045_rdbt(uint address)
{uchar outdata;
 X25045_SCK=0;
 X25045_CS=0;
// x25045_outb((((uchar)(address-0XFF))<<3)|0x03);/* Send WRITE instruction including MSB of address */
x25045_outb(((uchar)(address>>5)&0x08)|0x03);
 /*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
 x25045_outb((uchar)(address));
 /*输出低位地址到25045*/
 outdata=x25045_inb();
 /*写入数据到25045的对应单元*/
 X25045_SCK=0;
 X25045_CS=1;
 return(outdata);
}


uint x25045_read_word(uint address)
{union word_bytes tb1;
tb1.bytes.b0=x25045_rdbt(address);
tb1.bytes.b1=x25045_rdbt(address+1);
return(tb1.word);
}

void x25045_init()
{
x25045_wren();
x25045_wrsr();
x25045_wrdi();
}
/*X25045模块结束++++++++++++++++++++++++++++++++++++++++++++++++++++*/

/*AD420模块开始+++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void ad420_outb(uchar outdata)
{
uchar i,k;
k=outdata;
for(i=1;i<=8;i++)
{
AD420_CLK=0;
k=k<<1;
AD420_DIN=CY;
AD420_CLK=1;
}
}

void ad420_out()
{
AD420_LATCH=0;
//ad420_outb(adout[5]);
//ad420_outb(adout[4]);
//AD420_CLK=0;
ad420_outb(adout[3]);
ad420_outb(adout[2]);
AD420_CLK=0;
ad420_outb(adout[1]);
ad420_outb(adout[0]);
AD420_CLK=0;
AD420_LATCH=1;
}
/*AD420模块结束+++++++++++++++++++++++++++++++++++++++++++++++++++++*/

 /*AD7705取数程序开始+++++++++++++++++++++++++++++++++++++++++++++++*/
void ad7705_inb(uchar indata)
{uchar i;
 AD7705_CS=0;
 for(i=1;i<=8;i++)
    {AD7705_SCLK=0;
     indata=indata<<1;
     AD7705_DIN=CY;
     AD7705_SCLK=1;
     }
 AD7705_CS=1;
}
uint ad7705_outb()
{uchar i,j,k,l;
AD7705_CS=0;
k=0;
l=0;
for (i=1;i<=8;i++)
	{AD7705_SCLK=0;
	j=(AD7705_DOUT==1)?1:0;
	k=(k<<1)|j;
	AD7705_SCLK=1;
	}
for (i=1;i<=8;i++)
	{AD7705_SCLK=0;
	j=(AD7705_DOUT==1)?1:0;
	l=(l<<1)|j;
	AD7705_SCLK=1;
	}
AD7705_CS=1;
return(k*256+l);
}

void ad7705_in()
{uchar i;
 uint j;
 uchar l=0;
 X25045_CS=0;delay(1);X25045_CS=1;			/*喂狗*/

 ad7705_inb(0x20);	/*写通信寄存器为20H 决定下一次为写时钟寄存器*/
 ad7705_inb(0x09);	/*写时钟寄存器为 参见数据手册P16*/
 ad7705_inb(0x10);	/*写通信寄存器为10H 决定下一次为写设置寄存器 */
 ad7705_inb(0x46);	/*写设置寄存器为?? 工作模式为自校准*/
 
 do
 {ad7705_inb(0x08);	/*写通信寄存器为08H 决定下一次为读通信寄存器*/
 l=l+1;
 delay(1);
 if(l>100) goto tcA;
 j=ad7705_outb();}
 while((j&0x8000)==0x8000);
 
 ad7705_inb(0x38);	/*写通信寄存器为38H 决定下一次为读数据寄存器*/
 j=ad7705_outb();
 
 for(i=0;i<(AVERAGENUMBER-1);i++)
 {adbufferA[i]=adbufferA[i+1];
 }
 adbufferA[AVERAGENUMBER-1]=j;
 
 tcA:;
 
 l=0;
 ad7705_inb(0x21);	/*写通信寄存器为20H 决定下一次为写时钟寄存器*/
 ad7705_inb(0x09);	/*写时钟寄存器为 参见数据手册P16*/
 ad7705_inb(0x11);	/*写通信寄存器为10H 决定下一次为写设置寄存器 */
 ad7705_inb(0x46);	/*写设置寄存器为?? 工作模式为自校准*/
 
 do
 {ad7705_inb(0x09);	/*写通信寄存器为08H 决定下一次为读通信寄存器*/
 l=l+1;
 delay(1);
 if(l>100) goto tcB;
 j=ad7705_outb();}
 while((j&0x8000)==0x8000);
 
 ad7705_inb(0x39);	/*写通信寄存器为38H 决定下一次为读数据寄存器*/
 j=ad7705_outb();
 
 for(i=0;i<(AVERAGENUMBER-1);i++)
 {adbufferB[i]=adbufferB[i+1];
 }
 adbufferB[AVERAGENUMBER-1]=j;
 
 tcB:;
 }

/*AD7705取数程序结束+++++++++++++++++++++++++++++++++++++++++++++++*/

/*接触编码器0模块开始++++++++++++++++++++++++++++++++++++++++++++++++*/
char gtoe(uchar indata) /*格雷码(6、7、8位)转为二进制子程序*/
{uchar i,transferdata;		     /*indata为需转换的数据*/
transferdata=_crol_(indata,1);
for(i=1;i<=7;i++)
  {ACC=transferdata;
   A7=A7^A0;
   ACC=_crol_(ACC,1);
   transferdata=ACC;
  }
return(transferdata);
}

int coder_jb3()	/*传统三型传感器译码*/	
{uchar i,j,coderlow,codermid,coderhigh;
uint k;
bit bit0;
i=~CGL;j=~CGH;
coderhigh=(gtoe(j&0x0F)+13)&0x0f;
bit0=coderhigh&0x01;
if(bit0) codermid=(i>>4)|0x10;
  else codermid=(i>>4);
  codermid=(gtoe(codermid)+13)&0x0f;
bit0=codermid&0x01;
if(bit0) coderlow=i&0x0f|0x10;
  else coderlow=i&0x0f;
coderlow=(gtoe(coderlow)+13)&0x0f;
k=coderhigh*100+codermid*10+coderlow;
return(k);
}

int coder_jb4()	/*变型码4095传感器译码*/	
{char i,j,coderlow,coderhigh;
 int k;
bit bit0;
i=~CGL;j=~CGH;
bit0=i&0x20;
coderlow=i&0X3F;
coderhigh=((j<<2)&0x7C)|(_crol_(i,2)&0x03);
coderlow=gtoe(coderlow);
coderhigh=gtoe(coderhigh);
if(bit0) coderhigh=(coderhigh+0x7F)&0x7F;
k=coderhigh;
k=(k>>1<<6)|coderlow;
return(k);
}

int coder_jb5()	/*变型码8191传感器译码*/	
{char i,j,coderlow,coderhigh;
 int k;
bit bit0;
i=~CGL;j=~CGH;
bit0=i&0x40;
coderlow=i&0X7F;
coderhigh=((j<<1)&0x7E)|(_crol_(i,1)&0x01);  
coderlow=gtoe(coderlow);
coderhigh=gtoe(coderhigh);
if(bit0) coderhigh=(coderhigh+0x7F)&0x7F;
k=coderhigh;
k=(k>>1<<7)|coderlow;
return(k);
}

int coder_jb6()	/*变型码16383传感器译码*/	
{char i,j,coderlow,coderhigh;
 int k;
bit bit0;
i=~CGL;j=~CGH;
bit0=i&0x80;
coderlow=i;
coderhigh=j&0x7F;
coderlow=gtoe(coderlow);
coderhigh=gtoe(coderhigh);
if(bit0) coderhigh=(coderhigh+0x7F)&0x7F;
k=coderhigh;
k=(k>>1<<8)|coderlow;
return(k);
}

int coder_in(char coderstyle)
{int i;
  switch (coderstyle)
   {case 1:
      i=coder_jb3();break;		/*三型传统编码器*/
    case 2:
      i=coder_jb4();break;		/*四型变型码编码器*/  
    case 3:
      i=coder_jb5();break;		/*五型变型码编码器*/
    case 4:
      i=coder_jb6();break;		/*六型变型码编码器*/
    default:
      i=coder_jb3();break;		/*默认为三型传统编码器*/
   }
  return(i);
}

⌨️ 快捷键说明

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