📄 fjv14.c
字号:
}
if (temp[0]>temp[2])
{
a=temp[2];
temp[2]=temp[0];
temp[0]=a;
}
if (temp[1]>temp[2])
{
a=temp[2];
temp[2]=temp[1];
temp[1]=a;
}
outdata=temp[1];
return outdata;
}
/*******************************************************************
函数功能:AD采集,10位精度。
入口参数:无
出口参数:无
说明:
*******************************************************/
void ADC_Start(void)
{
asm("NOP");//给通道切换留一点时间。
asm("NOP");
MCUCR =(1<<SE);//开启ADC休眠模式
asm("SLEEP");
MCUCR =(0<<SE);//关闭ADC休眠模式,关闭SE位
}
/*******************************************************************
函数功能:DA传送数据,10位精度。固定通道A。
入口参数:dac_data8位数据。
出口参数:无
说明:
*******************************************************/
void DAC_5617_10(unsigned char dac_dataH,unsigned char dac_dataL,unsigned char dac_channel)
{
unsigned char TempL,TempH;
if(dac_channel==0x01) //使用通道A。(即out1)
{
set_cs;
TempH=0xc0;
TempL=0x00;
TempH|=(dac_dataH<<2)|(dac_dataL>>6);
TempL|=(dac_dataL<<2);
clr_cs;
SPI_Transmit(TempH);
SPI_Transmit(TempL);
set_cs;
}
else if (dac_channel==0x02) //使用通道B。(即out2)
{
set_cs;
TempH=0x40;
TempL=0x00;
TempH|=(dac_dataH<<2)|(dac_dataL>>6);
TempL|=(dac_dataL<<2);
clr_cs;
SPI_Transmit(TempH);
SPI_Transmit(TempL);
set_cs;
}
else
{
asm("NOP");
}
}
/*****************************************************************/
//初始化spi
void SPI_Transmit(unsigned char dac_data)
{
unsigned char i;
SPCR=0x58; //SPI使能?此句是不是必须的?
SPDR=dac_data; //送值到SPDR
while(!SPSR&(1<<SPIF))
;
for (i=0;i<3;i++)//保留足够的发送时间!!!
{;}
}
/******************************************************************
函数功能:IO输出数据。首先确定输出数据。然后给定输出通道。
入口参数:IO_data输出数据。IO_channel输出通道。
出口参数:无
说明:
*******************************************************/
void IO_out(unsigned char IO_data,unsigned char IO_channel)
{
switch (IO_channel)
{
case IO_PB0: //启动PB0通道
if (IO_data==0x00)
{
DDRB |= (1<<DDB0);
PORTB &= 0b11111110;//PB0置0,其他位不变
}
else if (IO_data==0x01)
{
DDRB |= (1<<DDB0);
PORTB |= (1<<PB0);//PB0置1,其他位不变
}
else
{
asm("NOP");
}
break;
case IO_PB1:
if (IO_data==0x00)
{
DDRB |= (1<<DDB1);
PORTB &= 0b11111101;//输出0
}
else if (IO_data==0x01)
{
DDRB |= (1<<DDB1);
PORTB |= (1<<PB1);//输出1
}
else
{
asm("NOP");
}
break;
case IO_PB4:
if (IO_data==0x00)
{
DDRB |= (1<<DDB4);
PORTB &= 0b11101111;;//输出0
}
else if (IO_data==0x01)
{
DDRB |= (1<<DDB4);
PORTB |= (1<<PB4);//输出1
}
else
{
asm("NOP");
}
break;
case IO_PD5:
if (IO_data==0x00)
{
DDRD |= (1<<DDD5);
PORTD &= 0b11011111;//输出0
}
else if (IO_data==0x01)
{
DDRD |= (1<<DDD5);
PORTD |= (1<<PD5);//输出1
}
else
{
asm("NOP");
}
break;
case IO_PD6:
if (IO_data==0x00)
{
DDRD |= (1<<DDD6);
PORTD &= 0b10111111;//输出0
}
else if (IO_data==0x01)
{
DDRD |= (1<<DDD6);
PORTD |= (1<<PD6);//输出1
}
else
{
asm("NOP");
}
break;
case IO_PD7: //如果为00则启动CH1通道
if (IO_data==0x00)
{
DDRD |= (1<<DDD7);
PORTD &= 0b01111111;//输出0
}
else if (IO_data==0x01)
{
DDRD |= (1<<DDD7);
PORTD |= (1<<PD7);//输出1
}
else
{
asm("NOP");
}
break;
default:break;
}
}
/*****************************************************************/
unsigned char IO_in(unsigned char IO_channel)
{
unsigned char temp;
temp=0;
switch (IO_channel)
{
case IO_PB0: //启动PB0通道
{
DDRB &= 0b11111110;
PORTB |= (1<<PB0);//输入、带上拉
asm("NOP");//留出读写转换的时间。
temp = PINB;//读取PB0通道的值。
temp = temp & 0x01;
}
break;
case IO_PB1:
{
DDRB &= 0b11111101;
PORTB |= (1<<PB1);//输入、带上拉
asm("NOP");
temp = PINB;
temp=(temp>>1)& 0x01;//提取位值。
}
break;
case IO_PB4:
{
DDRB &= 0b11101111;
PORTB |= (1<<PB4);//输入、带上拉
asm("NOP");
temp = PINB;
temp=(temp>>4)& 0x01;
}
break;
case IO_PD5:
{
DDRD &= 0b11011111;
PORTD |= (1<<PD5);//输入、带上拉
asm("NOP");
temp = PIND;
temp=(temp>>5)& 0x01;
}
break;
case IO_PD6:
{
DDRD &= 0b10111111;
PORTD |= (1<<PD6);//输入、带上拉
asm("NOP");
temp = PIND;
temp=(temp>>6)& 0x01;
}
break;
case IO_PD7:
{
DDRD &= 0b01111111;
PORTD |= (1<<PD7);//输入、带上拉
asm("NOP");
temp = PIND;
temp=(temp>>7)& 0x01;
}
break;
default:break;
}
return temp;
}
/*******************************************************************/
//1ms延时函数
void delay_1ms(void)
{
unsigned int i;
for (i=0;i<150;i++)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -