📄 init.h
字号:
/****************************************************************
调用的子程序及函数库包括
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 + -