📄 11.c
字号:
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 + -