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

📄 main.c

📁 AVRMEG32编写的一个项目代码,里面包含一般应用的模块.
💻 C
字号:
#include "includes.h"
	
//T1、T2定时器重装值,clk/1024
#define T0OVF_RELOAD	0xb7		//定时10ms,实际值10ms
#define T1OVF_RELOAD	0xE3E0		//定时1000ms,实际值1000.00ms
#define T2OVF_RELOAD	0x13		//定时33ms,	实际值32.917ms
#define T1OVF_RELOAD1   0xfd35      //定时100ms,实际值100.00ms

//----- 函数原型(本地) ------------------------------------------------------
static void timersInit(void);
//static void extintInit(void);
static void ioInit(void);
static void initSystem(void);
//static u08 flag_input = 0; //165输入信号总告警标志,0无告警,1有告警
//extern u08 DAT1;
/*
//空开1跳匝标志
u08 flag_GAOJING_KK1 = 0;
//空开2跳匝标志
u08 flag_GAOJING_KK2 = 0;
//空开3跳匝标志
u08 flag_GAOJING_KK3 = 0;
//空开4跳匝标志
u08 flag_GAOJING_KK4 = 0;		
//空开5跳匝标志
u08 flag_GAOJING_KK5 = 0;
//空开6跳匝标志
u08 flag_GAOJING_KK6 = 0;		
//蓄电池跳匝标志
u08 flag_GAOJING_KK7_POWER = 0;
//防雷空开跳匝标志
u08 flag_GAOJING_KK8_FL = 0;
//列告警标志
u08 flag_GAOJING_LIE = 0;
//烟雾告警标志
u08 flag_GAOJING_YW	= 0;
//进水告警标志
u08 flag_GAOJING_JS = 0;
//电源仓门禁标志
u08 flag_GAOJING_MJ1 = 0;
//配线仓门禁标志
u08 flag_GAOJING_MJ2 = 0;
//电池仓门禁标志
u08 flag_GAOJING_MJ3 = 0;
*/
//----- 实现代码 --------------------------------------------------------------
//系统初始化
static void initSystem(void)
{
//	u16 ad_imidit;f
	DISABLE_INT(); 		            //关闭全局中断或cli();
	ioInit();						//IO口初始化
	uartInit(); 					//UART初始化
	rprintfInit(uartSendByte);		//设置rprintf输出函数指针
	uartSetBaudRate(9600);  		//设置UART通信波特率
//	stxetxInit(uartSendByte);		//STX/ETX包初始化:指向UART
//	extintInit();	//外部中断初始化
	timersInit();	//定时器初始化,先用查询
	a2dInit();      //初始化ADC
	a2dSetPrescaler(ADC_PRESCALE_DIV64); //设置ADC时钟分频数
	a2dSetReference(ADC_REFERENCE_AREF); //使用外部参考电压
    a2dSetChannel(ADC_CH_ADC0);//选择AD通道
	//空采集1次,避免误差
    a2dConvert10bit();
    a2dOff();//关AD
    ShtInit();
    Lcd_Init();//LCD初始化
    key_init();//键盘初始化
  	// ENABLE_INT(); 	//使能全局中断
	//看门狗使能, 预分频: OSC/512k
    //wdt_enable(WDTO_2S);
}

//外部中断int0初始化
//static void extintInit(void)
//{
//   outb(MCUCR,BV(ISC01)|(0<<ISC00));
//   GIFR = (1<<INTF0);
//   GICR = (1<<INT0);
//   GIFR = (1<<INTF0);
//}

//IO口初始化
static void ioInit(void)
{
	//模拟比较器关闭
	ACSR = 0x80;//省电
	//输入输出口初始化
	inputInit();
 	outputInit();
}

//定时器初始化
static void timersInit(void)
{
	//Timer/Counter0 Clock source: System Clock
	//Timer/Counter0 Clock value: 7.200kHz
	//Timer/Counter0 Mode: Normal
	//Timer/Counter0 Output: Disconnected
	TCNT0 = T0OVF_RELOAD;
	TCCR0 = 0X00   ;//0x05

	//Timer/Counter1 Clock source: System Clock
	//Timer/Counter1 Clock value: 7.200kHz
	//Timer/Counter1 Mode: Normal
	//Timer/Counter1 Output: A: Disconnected, B: Disconnected
	TCNT1 = T1OVF_RELOAD;
	TCCR1A = 0x00;
	TCCR1B = 0x00; //0X05

	//Timer/Counter2 Clock source: System Clock
	//Timer/Counter2 Clock value: 7.200kHz
	//Timer/Counter2 Mode: Normal
	//Timer/Counter2 Output: Disconnected
	TCNT2 = T2OVF_RELOAD;
	TCCR2 = 0X00; //0x07
	TIMSK = BV(TOIE0)|BV(TOIE1)|BV(TOIE2);
}

/*
SIGNAL(SIG_OVERFLOW0)
{
	TCNT0 = T0OVF_RELOAD; //重装定时器	
	//todo
}*/

/*
//165输入信息检测中断
SIGNAL(SIG_OVERFLOW1)
{
     TCCR1B = 0X00;//关定时器
	//判断165输入有无告警信息
    if((0xFFFF & inputReadWord()) == 0xFFFF)
    {
		//flag_input = 0;//无告警信息或告警信息全恢复
		//空开1跳匝标志
        flag_GAOJING_KK1 = 0;
        //空开2跳匝标志
        flag_GAOJING_KK2 = 0;
        //空开3跳匝标志
        flag_GAOJING_KK3 = 0;
        //空开4跳匝标志
        flag_GAOJING_KK4 = 0;
		//空开5跳匝标志
 		flag_GAOJING_KK5 = 0;
		//空开6跳匝标志
	    flag_GAOJING_KK6 = 0;
	    //蓄电池跳匝标志
 	    flag_GAOJING_KK7_POWER = 0;
	    //防雷空开跳匝标志
        flag_GAOJING_KK8_FL = 0;
        //列告警标志
        flag_GAOJING_LIE = 0;
        //烟雾告警标志
        flag_GAOJING_YW	= 0;
        //进水告警标志
	    flag_GAOJING_JS = 0;
		//电源仓门禁标志
	    flag_GAOJING_MJ1 = 0;
        //配线仓门禁标志
        flag_GAOJING_MJ2 = 0;
        //电池仓门禁标志
        flag_GAOJING_MJ3 = 0;
    }
    else
   	//	flag_input = 1;//有告警信息
   		happeninput(); //解析
   
//	TCNT1 = T1OVF_RELOAD;//重装定时器
//	TCCR1B = 0X05;//开定时器
}*/
/*
SIGNAL(SIG_OVERFLOW2)
{
	TCNT2 = T2OVF_RELOAD; //重装定时器	
	msgQueueIn(MSG_STXETX,0x00);
	return;
}*/

int main(void)
{
    u16 humidity[1];
//  u16 temperature[1];
//  u08 A_A_220; //220v电流值
//	u16 V_V_220; //220v电压值
	initSystem();
 	DisplayFace();//初始界面
    DELAY(1500000);//初始界面延时1.5s
//	TCCR1B = 0X05;  //启动1000ms定时
//	wdt_reset();
	Lcd_ClearAll();//清屏
    cleardor_FLAG();
    wenshidu_FLAG();
    a2dStartConvert();
	while(1)	
	{
	 key_pressed();
        //温湿度
        wenshidu_da();
 		key_pressed();
        DCAC_V_A();
#if 0
//AD转换电压电流
//选择48V电流
	    A_48();
		//启动转换函数
		a2dStartConvert();
		_nop_();
	    _nop_();
		//还原模拟量
        ad_result(do_a2d() ,  liangcheng_48_A );//滤波处理函数do_a2d();
#endif
#if 0
//选择48V电压
         V_48();
   		_nop_();
	    _nop_();
        ad_result(do_a2d() ,  liangcheng_48_V );
	 //   humidity[0]= ad_result(do_a2d() ,  liangcheng_48_V );
     //   rprintf("\r\nTest humidity  :%d",humidity[0]);
#endif
#if 0
//选择220V电流
        A_220();
		_nop_();
	    _nop_();
	    A_A_220 = (u08)( (ad_result(do_a2d() ,  liangcheng_220_A ))/10);
#endif
#if 0
//选择220V电压
        V_220();
       	_nop_();
	    _nop_();
       	V_V_220 = (ad_result(do_a2d() ,  liangcheng_220_V )/10);
		//关AD转换
        a2dOff();*/
#endif
//        temperature[0]=inputReadWord();
//		rprintf("\nTest temperature:%u",temperature[0]);
//	    ShtCalculate( temperature,  humidity);
//	    rprintf("\r\nTest humidity  :%d",humidity[0]);
//      switch(msgQueueOut())	//根据消息队列的取值进行处理
//		{
//			case MSG_UART_RX:	//若是串口已经收到包,则进行串口通信处理
//				uartRxProcess();
//				break;
//
//			case MSG_STXETX:	//是否收到STX/ETX包
//				if(stxetxProcess(uartGetRxBuffer()))
//					msgQueueIn(MSG_UART_RX,0x00);
//				break;
//			default:
//				wdt_reset();   //空闲时候,喂狗
//				break;
	//	}
dctype1_da();

           display_first_face();
	}
	return 0;//规范写法
}



⌨️ 快捷键说明

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