📄 main.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 + -