📄 main.c
字号:
/*******************************************************************************/
/*E2rom 读写改过,可以直接调用,不需控制I/O口状态 */
/*延时程序修改过,使延时更准确 */
/*E2rom中存小数的地址改过,为0x0000~0x01DF(大小为:SPACE) */
/*日期 2008-10-22 */
/*有脉冲是的软件滤波改过 */
/*时间的函数从原来在定时器中调用改到主程序中调用 */
/*日期 2008-10-24 */
/*E2rom中存小数的地址改过,为0x0000~0x0ff(大小为:SPACE) */
/*日期 2008-10-29 */
/*******************************************************************************/
#include<msp430x41x.h>
#include"harddef.h"
#include"variableset.h"
#include"i2c.c"
#include"lcd.c"
#include"lib.c"
#include"uart4800.c"
void main(void)
{
init();
while(1)
{
if(POWER)//上电检测
{
WDTCTL=WDT_ARST_1000;
RX_NBYTE();
/*如果uart_mode=0x55 用水量每走过10L 向TCB发送一个数据*/
if(uart_mode==0x55)
{
if(RX!=(wt_who[3]&0x0f))
{
read_data_verify_res();
RX=wt_who[3]&0x0f;
RX_BYTE();//准备接收串口数据
}
}
}
while(int_sum)//脉冲处理
{
WDTCTL=WDT_ARST_1000;
int_sum--;//脉冲数减1
if((constant[0]|constant[1]|constant[2])==0)//constant=0 wt_who+10000.00ml/impulse
{save_who=_BCD4INC(wt_who);}
/************************************************/
else
{save_who=_BCD6ADD(wt_who,constant);}
/*保存数据*/
if(save_who)
{
save_who=0;
wt_who[7]+=4;
WRNBYTE_I2C(PEG1,addr_who,wt_who+4,4);//写整数+小数地址
}
WRNBYTE_I2C(VAL_PEG,wt_who[7],wt_who,4);//写小数
if(lcd_show==0x55)
{
LCD_OUT(wt_who);
if(dir_cnt<5){dir_cnt++;} else {dir_cnt=0;}
LCDMEM[1]&=0xf0;
LCDMEM[1]|=(dir[dir_cnt]&0x0f);
LCDMEM[0]=dir[dir_cnt]|0x0f;
}
}
if(time_t>=TIME1S)
{
time_t-=TIME1S;
_TimeInc(time);
}
WDTCTL=WDTPW+WDTHOLD;//关定时器,进入低功耗,等待脉冲
_BIS_SR(LPM3_bits + GIE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -