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

📄 init.h

📁 一个AVR单片机常用的子程序库
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************************************
调用的子程序及函数库包括
void BuzzerLongON(void)
void BuzzerShortON(void)
void Port_init(void)
void WDT_ON(void)
void WDT_OFF(void)  ///关看门狗
void Delay(void)//延时
void DelayWDR(void)//看门狗打开的延时


void delay_nms(unsigned int n)//延时n毫秒
void delay_1ms(void)//1ms延时函数

void ADC_Init(void)ADC初始设置
#pragma interrupt_handler adc_isr:iv_ADC     //ADC完成中断
void adc_isr(void)

****************************************************************/
#define uchar unsigned char
#define uint unsigned int

#define Red_LedON PORTA&=(~(1<<PA5))    
#define Red_LedOFF PORTA|=(1<<PA5)      
#define Green_LedON PORTA&=(~(1<<PA4))
#define Green_LedOFF PORTA|=(1<<PA4)

#define D01ON PORTB&=(~(1<<PB3))    //打开LED D1   与的方式置0
#define D01OFF PORTB|=(1<<PB3)      //关闭LED D1   或的方式置1
#define D02ON PORTB&=(~(1<<PB2))
#define D02OFF PORTB|=(1<<PB2)
#define D03ON PORTB&=(~(1<<PB1))
#define D03OFF PORTB|=(1<<PB1)
#define D04ON PORTB&=(~(1<<PB0))
#define D04OFF PORTB|=(1<<PB0)

#define LED1 D01ON;D02OFF;D03OFF;D04OFF;delay_nms(100);
#define LED12 D01ON;D02ON;D03OFF;D04OFF;delay_nms(100);
#define LED14 D01ON;D02OFF;D03ON;D04OFF;delay_nms(100);
#define LED13 D01ON;D02OFF;D03OFF;D04ON;delay_nms(100);

#define LED2 D02ON;D01OFF;D03OFF;D04OFF;delay_nms(100);
#define LED21 D02ON;D01ON;D03OFF;D04OFF;delay_nms(100);
#define LED24 D02ON;D01OFF;D03ON;D04OFF;delay_nms(100);
#define LED23 D02ON;D01OFF;D03OFF;D04ON;delay_nms(100);

#define LED4 D03ON;D02OFF;D01OFF;D04OFF;delay_nms(100);
#define LED41 D03ON;D02OFF;D01ON;D04OFF;delay_nms(100);
#define LED42 D03ON;D02ON;D01OFF;D04OFF;delay_nms(100);
#define LED43 D03ON;D02OFF;D01OFF;D04ON;delay_nms(100);

#define LED3 D04ON;D02OFF;D03OFF;D01OFF;delay_nms(100);
#define LED31 D04ON;D02OFF;D03OFF;D01ON;delay_nms(100);
#define LED32 D04ON;D02ON;D03OFF;D01OFF;delay_nms(100);
#define LED34 D04ON;D02OFF;D03ON;D01OFF;delay_nms(100);

#define LED44 D01ON;D02ON;D03ON;D04ON;delay_nms(100);     ///全亮
#define LED00 D01OFF;D02OFF;D03OFF;D04OFF;delay_nms(100); //全灭



#define BuzzerON  PORTC|=(1<<PC6)
#define BuzzerOFF PORTC&=(~(1<<PC6))
//比#define BuzzerOFF PORTC=0x00全修改方式相对好,仅修改个别位
#define BuzzerLongON  BuzzerON;Delay();Delay();Delay();BuzzerOFF;
#define BuzzerShortON BuzzerON;Delay();BuzzerOFF;

extern void send_byte(uchar x);
extern void disp_led(uchar buffer,uchar control);
extern void delay_1ms(void); 
extern void delay_nms(unsigned int n);
extern void Disp_led(uchar chanel);
extern void LED_Run(void);
extern void USART_Init_M16( uchar Fosc,uchar baud );
extern void LED_Texting_ISP(void);
extern void LED_Wait_ISP(void);
extern void USART_InitM1681( unsigned int baud );
extern void USART_InitM1682( unsigned int baud );

/******************************************************************************
功能:初始化端口
函数:void Port_init(void)
返回值:无
备注:

******************************************************************************/
void Port_init(void)
{PORTA = 0x00;DDRA  = 0x00;  PORTB = 0xff;DDRB  = 0xff;
 PORTC = 0x00;DDRC  = 0xff;  PORTD = 0x00;DDRD  = 0x00;
}
//只有DDRxn=0即管脚定义为输入状态,并且PORTxn=1,而且UPD设置为0时,上拉电阻才生效。



/******************************************************************************
功能:看门狗打开
函数:void WDT_ON(void)
返回值:无
备注:


******************************************************************************/
void WDT_ON(void)
 {
   WDR(); //this prevents a timout on enabling
   WDTCR|=(1<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x1F; //特别注意这一条不是ICC生成的,是后来加上的。
   WDTCR&=(~(1<<WDTOE))|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
 }

 
 
 
/******************************************************************************
功能:关看门狗
函数:void WDT_OFF(void)
返回值:无
备注:



******************************************************************************/ 
void WDT_OFF(void)  ///关看门狗
{
  WDR();
  WDTCR|=(1<<WDTOE)|(1<<WDE);
  WDTCR=0x00;
}




/******************************************************************************
功能:看门狗打开的延时
函数:void DelayWDR(void)
返回值:无
备注:



******************************************************************************/
void DelayWDR(void)//看门狗打开的延时
{
   unsigned char i,j;
   for(i=250;i>0;i--){ for(j=250;j>0;j--) asm("nop");
   WDR(); 
   }
}



/******************************************************************************
功能:延时
函数:void Delay(void)
返回值:无
备注:



******************************************************************************/
void Delay(void)//延时
{  unsigned char i,j;
   for(i=250;i>0;i--){ for(j=250;j>0;j--) asm("nop");
   WDR(); 
   }
}



/******************************************************************************
功能:ADC初始设置
函数:void ADC_Init(void)
返回值:无
备注:



******************************************************************************/
void ADC_Init(void)
{   CLI();
	ADCSRA = 0x00; 
    ADMUX = (1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
    ADCSRA= (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
	SEI();
}

/******************************************************************************
功能://ADC完成中断
函数:void adc_isr(void)
返回值:无
备注:



******************************************************************************/
/*
#pragma interrupt_handler adc_isr:iv_ADC     
void adc_isr(void)
{
 ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
 ADCSRA|=(1<<ADSC);//启动AD转换
}

#pragma interrupt_handler adc_isr:15     
void adc_isr(void)
{
 ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
 ADCSRA|=(1<<ADSC);//启动AD转换
}
*/

/******************************************************************************
功能:1ms延时函数
函数:void delay_1ms(void)
返回值:无
备注:



******************************************************************************/
void delay_1ms(void)//1ms延时函数
{
  unsigned int i;
  for (i=0;i<150;i++)
  WDR();  
}


/******************************************************************************
功能:延时n毫秒
函数:void delay_nms(unsigned int n)
返回值:无
备注:



******************************************************************************/
void delay_nms(unsigned int n)//延时n毫秒
{
  unsigned int i;
  for (i=0;i<n;i++)//执行n次1毫秒延时
      {
	     delay_1ms(); 
      }
  WDR(); 
}



/******************************************************************************
功能:模拟串口发送数据
函数:void send_byte(uchar x)
返回值:无
备注:



******************************************************************************/
void send_byte(uchar x)
{
	uchar i;
 	for(i=0;i<8;i++)
 	{
 		PORTC=0<<5;
		if((x&(1<<(7-i))))
		PORTC=1<<4;
		else
		PORTC=0<<4;
		PORTC=1<<5;
	}
}

/******************************************************************************
功能:ADC转换
函数:uint ADCConvert_3()
返回值:无
备注:



******************************************************************************/
uint ADCConvert_3(void)
{
	uint temp1,Voltage;
	//uint number[3],
	temp1=(uint)ADCL;
	Voltage=(uint)ADCH;
	Voltage=(Voltage<<8)+temp1;
	return(Voltage);
	//第一位整数
/*	number[0]=Voltage/1023;
	Voltage=Voltage%1023;
	Voltage=Voltage*10;
	//第一位小数
	number[1]=Voltage/1023;
	Voltage=Voltage%1023;
	Voltage=Voltage*10;
	//第二位小数
	number[2]=Voltage/1023;*/
}

/******************************************************************************
功能:LED灯闪动

⌨️ 快捷键说明

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