亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main__.c

?? 智能充電參考程序 可以控制整個充電過程希望對大家有幫助
?? C
?? 第 1 頁 / 共 5 頁
字號:
#if TX_BUFFER_SIZE<256
    INT8U tx_wr_index,tx_rd_index,tx_counter;
#else
    INT16U tx_wr_index,tx_rd_index,tx_counter;
#endif

/*********************************************************************************************************
** 函數名稱: usart_tx_isr
** 功能描述: USART Transmitter interrupt service routine
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
interrupt [USART_TXC] void usart_tx_isr(void)
{
    if (tx_counter)
    {
        --tx_counter;
        UDR = tx_buffer[tx_rd_index];
        if (++tx_rd_index == TX_BUFFER_SIZE)
        {
            tx_rd_index = 0;
        }
    };
}

#ifndef _DEBUG_TERMINAL_IO_
#define _ALTERNATE_PUTCHAR_
#pragma used+
/*********************************************************************************************************
** 函數名稱: putchar
** 功能描述: Write a character to the USART Transmitter buffer ,
**           發送采用查詢方式
** 輸入參數: INT8S c: 要發送的字節
** 輸出參數: 無
********************************************************************************************************/
void putchar(INT8S c)
{
    while( !(UCSRA & (1<<UDRE)) );
    UDR = c;
}

/*********************************************************************************************************
** 函數名稱: putchar
** 功能描述: Write a character to the USART Transmitter buffer ,
**           發送采用查詢方式
** 輸入參數: INT8S c: 要發送的字節
** 輸出參數: 無
********************************************************************************************************/
/*
void putchar(INT8S c)
{
    while (tx_counter == TX_BUFFER_SIZE);
    Disable();     // 關中斷
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
    {
        tx_buffer[tx_wr_index] = c;
        if (++tx_wr_index == TX_BUFFER_SIZE)
        {
            tx_wr_index = 0;
        }
        ++tx_counter;
    }
    else
    {
        UDR = c;
    }
    Enable();      // 開中斷
}
*/
#pragma used-
#endif



/**************************************************************************************×*****************
**                                 END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
**                              智 能 充 電 器 開 發 小 組
**                                     OurAVR 論壇
**                                   QQ 群: 26052247
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: ADC.c
**創   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: AD轉換的底層函數  FOR AVR MCU / Mega16
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: Trinove
** 版  本: v0.03
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: martin7wind 楓仔
** 日 期: 2008年03月01日
** 描 述: For 智能充電器
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 呂海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,歸檔
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
	#ifndef __SLEEP_DEFINED__
	#define __SLEEP_DEFINED__
	.EQU __se_bit=0x40
	.EQU __sm_mask=0xB0
	.EQU __sm_powerdown=0x20
	.EQU __sm_powersave=0x30
	.EQU __sm_standby=0xA0
	.EQU __sm_ext_standby=0xB0
	.EQU __sm_adc_noise_red=0x10
	.SET power_ctrl_reg=mcucr
	#endif
#include "ADC.h"

// ADCSR
#define    ADEN     7
#define    ADSC     6
#define    ADATE    5
#define    ADFR     5
#define    ADIF     4
#define    ADIE     3
#define    ADPS2    2
#define    ADPS1    1
#define    ADPS0    0

// 模擬量處理相關的全局變量的定義(僅在模塊內被調用)


/*********************************************************************************************************
** 函數名稱: s_analog_init
** 功能描述: ADC 初始化,查詢模式,預分頻128,轉換時間104us,右對齊
** 輸入參數: 無
** 輸出參數: 無
********************************************************************************************************/
void s_analog_init(void)
{
    // adc轉換初始化
    ADCSRA = 0x00;  // 禁止 AD 轉換
    ADMUX = 0x00;
    SFIOR |= 0x00;
    ACSR = 0x80;    // 禁止模擬比較器
    ADCSRA = 0xE7;
    //ADCSRA |= BIT(ADSC);
}

/*********************************************************************************************************
** 函數名稱: s_analog
** 功能描述: 模擬量采集函數,用以一次采集某個關鍵模擬量
** 輸入參數: 無
** 輸出參數: INT16U result: ADC data
********************************************************************************************************/
INT16U s_analog(void)
{
    INT32U value = 0;  // 聲明為long,否則在后續計算中會溢出
    INT16U result = 0;
    Disable();

    ADCSRA |= BIT(ADSC); // ADSR 置位,ADC開始

    while(!(ADCSRA & BIT(ADIF))) // ADSR被清0代表轉換完成
    {
        // 計算實際電壓
        value = ADCL; // 首先讀低位
        value |= (INT16S)ADCH << 8; // 然后讀高位
        result = (value * VREF_VOL) >> 10; // 10 Bit ADC 計算出采樣到的電壓值
        Enable();
        break;
    }

    return result;
}

/*********************************************************************************************************
** 函數名稱: vol_to_bat_vol
** 功能描述: ADC 測量電壓向電池實際模擬量轉化函數
** 輸入參數: INT16U vol: 電壓采樣電路上面 AD 采樣出的值
** 輸出參數: INT16U result:
********************************************************************************************************/
INT16U vol_to_bat_vol(INT16U vol)
{
    INT16U temp = 0;
    INT32U temp1 = 0;
    temp1 = (vol * ((INT8U)(VOL_AMP * 10))) / 10;
    temp = (INT16U) temp1;
    return temp;
}

/*********************************************************************************************************
** 函數名稱: vol_to_bat_cur
** 功能描述: 放電的時候,電壓是負值
**           采樣電阻0.1歐.
**           放電電流2A
**           充電電流2A
**           放大倍數為1+100/8.2=13.2
**           放大后電壓為0.1*2*13.2=+/-2.64
**           放大器后偏置電壓VREF=3.75
**           最后的電壓為1.11~6.39V
**           最后的電壓為(1.11~6.39V) / 2 = 0.555 V ~ 3.195 V
**
**           ( Vcur * 13.2 + 3.75 ) / 2 = Vadc
**       =>   6.6 * Vcur = Vadc - 0x01FF / 2
**       =>   CUR_AMP * Vcur = Vadc - 0xFF
**
** 輸入參數: INT16U vol: 電流采樣電路上面 AD 采樣出的值
** 輸出參數: INT16S temp: 實際電流 mA
********************************************************************************************************/
INT16S vol_to_bat_cur(INT16U vol)
{
    INT32S temp;

    temp = vol - (VREF_VOL / 2);
    temp = (INT16S)(temp * 100 / (INT8U)(CUR_AMP * 10));

    return temp;
}

/*********************************************************************************************************
** 函數名稱: vol_to_temp
** 功能描述:
** 輸入參數: INT16U vol:
** 輸出參數: INT16U vol:
********************************************************************************************************/
INT16U vol_to_temp(INT16U vol)
{
    return vol;
}


/*********************************************************************************************************
** 函數名稱: filter_adc
** 功能描述: 多通道數值濾波處理,用全局變量做為緩沖區
**           均值法濾波
** 輸入參數: INT8U channel:
** 輸出參數: 0
********************************************************************************************************/
INT8U filter_adc(INT8U channel)
{
    INT32U temp1 = 0;
    INT16U result = 0;

    ADMUX = (ADMUX & 0xF8) | channel;   // 選擇對應的通道

    delay_us(300);

    s_analog();  // 舍去第一次值
    result = s_analog();


    //將測量數據存入全局數據表
    switch(channel)
    {
        case BAT_0_VOL_CH:
            temp1 = (((INT16U)Bat0_Vol_H) << 8) + Bat0_Vol_L;
            temp1 = temp1 * 0.75 + vol_to_bat_vol(result) * 0.25;
            Bat0_Vol_H = (INT8U)(temp1 >> 8);
            Bat0_Vol_L = (INT8U) (temp1 & 0xff);
            break;

        case BAT_0_CUR_CH:
            if((result > (VREF_VOL / 2 - 100)) && (result < (VREF_VOL / 2 + 100)))
            {
                result = VREF_VOL / 2;
            }
            temp1 = ((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L;
            temp1 = temp1 * 0.75 + vol_to_bat_cur(result) * 0.25;
            Bat0_Cur_H = (INT8U)(temp1 >> 8);
            Bat0_Cur_L = (INT8U) (temp1 & 0xff);
          break;

        case BAT_0_TEMP_CH:
            temp1 = ((INT16U)Bat0_Temp_H << 8) + Bat0_Temp_L;
            temp1 = temp1 * 0.75 + vol_to_temp(result) * 0.25;
            Bat0_Temp_H = (INT8U)(temp1 >> 8);
            Bat0_Temp_L = (INT8U) (temp1 & 0xff);
            break;

        case BAT_1_VOL_CH:
            temp1 = (((INT16U)Bat1_Vol_H) << 8) + Bat1_Vol_L;
            temp1 = temp1 * 0.75 + vol_to_bat_vol(result) * 0.25;
            Bat1_Vol_H = (INT8U)(temp1 >> 8);
            Bat1_Vol_L = (INT8U) (temp1 & 0xff);
            break;

        case BAT_1_CUR_CH:
            if((result > (VREF_VOL / 2 - 100)) && (result < (VREF_VOL / 2 + 100)))
            {
                result = VREF_VOL / 2;
            }
            temp1 = ((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L;
            temp1 = temp1 * 0.75 + vol_to_bat_cur(result) * 0.25;
            Bat1_Cur_H = (INT8U)(temp1 >> 8);
            Bat1_Cur_L = (INT8U) (temp1 & 0xff);
            break;

        case BAT_1_TEMP_CH:
            temp1 = ((INT16U)Bat1_Temp_H << 8) + Bat1_Temp_L;
            temp1 = temp1 * 0.75 + vol_to_temp(result) * 0.25;
            Bat1_Temp_H = (INT8U)(temp1 >> 8);
            Bat1_Temp_L = (INT8U) (temp1 & 0xff);
            break;

        default:
            break;     // 異常處理為空
    }

    return 0;
}

/*********************************************************************************************************
** 函數名稱: ReadBatterySTAT
** 功能描述: 察看電池狀態
** 輸入參數: INT8U channel: 第幾路電池
** 輸出參數: 0
********************************************************************************************************/
void ReadBatterySTAT(INT8U channel)
{
    INT8U Key = NO_KEY;
    INT8U i;

    if(channel == BATTERY0)
    {
        lcd_locate(0,0);
        lcd_print_stringF("BAT0:       mV  ");
        lcd_locate(0,1);
        lcd_print_stringF("            mA  ");
    }
    else if (channel == BATTERY1)
    {
        lcd_locate(0,0);
        lcd_print_stringF("BAT1:       mV  ");
        lcd_locate(0,1);
        lcd_print_stringF("            mA  ");
    }

    else if (channel == BATTERY_BOTH)
    {
        lcd_cls();  // 清屏
        lcd_locate(5,0);
        lcd_print_stringF("mV");
         lcd_locate(14,0);
        lcd_print_stringF("mV");
        lcd_locate(5,1);
        lcd_print_stringF("mA");
         lcd_locate(14,1);
        lcd_print_stringF("mA");
    }

    while (Key != BT_CANCEL)
    {
        LED1 = 1;
        LED2 = !LED2;
        for(i=0; i<7; i++)
        {
            filter_adc(i);
        }

        if(channel == BATTERY0)
        {
            lcd_locate(7,0);
            lcd_print_number((((INT16U)Bat0_Vol_H << 8) + Bat0_Vol_L),4,0);
            lcd_locate(7,1);
            lcd_print_number((((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L),4,0);
        }
        else if (channel == BATTERY1)
        {
            lcd_locate(7,0);
            lcd_print_number((((INT16U)Bat1_Vol_H << 8) + Bat1_Vol_L),4,0);
            lcd_locate(7,1);
            lcd_print_number((((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L),4,0);
        }

        else if (channel == BATTERY_BOTH)
        {
            lcd_locate(0,0);
            lcd_print_number((((INT16U)Bat0_Vol_H << 8) + Bat0_Vol_L),4,0);
            lcd_locate(0,1);
            lcd_print_number((((INT16U)Bat0_Cur_H << 8) + Bat0_Cur_L),4,0);

            lcd_locate(9,0);
            lcd_print_number((((INT16U)Bat1_Vol_H << 8) + Bat1_Vol_L),4,0);
            lcd_locate(9,1);
            lcd_print_number((((INT16U)Bat1_Cur_H << 8) + Bat1_Cur_L),4,0);
        }

        Key = read_keycode();
    }

}

/**************************************************************************************×*****************
**                                 END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
**                              智 能 充 電 器 開 發 小 組
**                                     OurAVR 論壇
**                                   QQ 群: 26052247
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: LCD1206.c
**創   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: LCD1602字符型液晶的底層函數  FOR AVR MCU / Mega16
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 呂海安
** 版  本: v1.0
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------歷史版本信息------------------------------------------------------------------------------
** 修改人: martin7wind
** 日 期: 2008年02月03日

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 亚洲一区二区三区爽爽爽爽爽| 婷婷中文字幕综合| 欧美人xxxx| 老司机精品视频线观看86| 久久天堂av综合合色蜜桃网| 成人免费高清在线观看| 亚洲精品国产精品乱码不99| 日韩一区二区三区四区| 国产91精品免费| 丝袜诱惑亚洲看片| 国产精品国产自产拍高清av王其| 欧美日韩在线一区二区| 国产精品一色哟哟哟| 偷拍一区二区三区| 一区二区不卡在线播放 | 亚洲国产精品一区二区www | 欧美日韩卡一卡二| 国产在线不卡一卡二卡三卡四卡| 亚洲欧美日韩中文播放| 精品人伦一区二区色婷婷| 欧美日韩三级在线| 99国产精品久久久久久久久久久| 在线观看网站黄不卡| 国产精品素人一区二区| 精品欧美乱码久久久久久| 91麻豆精品国产91久久久资源速度 | 国产精品丝袜一区| 国产午夜精品一区二区三区嫩草 | 精品一区二区免费| 亚洲欧美日韩久久精品| 久久人人97超碰com| 精品福利在线导航| 国产精品视频yy9299一区| 国产区在线观看成人精品| 2021国产精品久久精品| 中文乱码免费一区二区| 成人欧美一区二区三区小说 | av色综合久久天堂av综合| 狠狠久久亚洲欧美| 91蜜桃在线免费视频| 91丨九色丨尤物| 777久久久精品| 久久精品视频一区二区| 亚洲日本护士毛茸茸| 一区二区三区美女视频| 丝袜亚洲另类欧美| 国产91丝袜在线播放0| 日本大香伊一区二区三区| 91精品欧美久久久久久动漫| 久久久综合精品| 亚洲一区二区三区爽爽爽爽爽 | 五月婷婷激情综合网| 韩国成人在线视频| 欧美日韩国产综合久久| 国产精品美女久久久久高潮| 日韩 欧美一区二区三区| jlzzjlzz亚洲女人18| 日韩欧美中文字幕制服| 亚洲精品美腿丝袜| 国产成人精品免费视频网站| 欧美剧情片在线观看| 亚洲特黄一级片| 成人av网站大全| 亚洲国产精品成人久久综合一区| 蜜桃视频在线一区| 日韩美女视频在线| 日韩福利电影在线| 91精品国产综合久久蜜臀| 一区二区三区在线看| 在线亚洲一区二区| 一区二区久久久久| 欧美性大战久久久久久久蜜臀 | 国产免费久久精品| 成人丝袜视频网| 樱花草国产18久久久久| 在线亚洲高清视频| 丝袜美腿亚洲综合| 欧美一区二区福利在线| 美女爽到高潮91| 国产精品嫩草久久久久| 欧美日韩精品欧美日韩精品一综合| 欧美色视频一区| 日韩高清中文字幕一区| 久久亚洲精品小早川怜子| 极品瑜伽女神91| 1024亚洲合集| 91精品国产综合久久久蜜臀图片 | 26uuu久久天堂性欧美| 国产福利一区二区三区在线视频| 国产欧美日韩综合| 欧美精品第一页| av一本久道久久综合久久鬼色| 一区二区在线电影| 久久婷婷国产综合国色天香| 色综合中文字幕国产 | 欧美日韩夫妻久久| 久久国产尿小便嘘嘘尿| 亚洲欧洲综合另类| 国产人久久人人人人爽| 8v天堂国产在线一区二区| 国产成人8x视频一区二区| 日本在线不卡一区| 一区二区三区在线免费视频| 欧美理论电影在线| 色哟哟日韩精品| 成人国产精品视频| 国产精品99久久久久久有的能看 | 色老综合老女人久久久| 国产jizzjizz一区二区| 国产自产视频一区二区三区| 蜜臀久久久久久久| 日韩精品久久理论片| 亚洲成人自拍一区| 午夜精品久久久久| 亚洲 欧美综合在线网络| 亚洲一区二区成人在线观看| 亚洲欧美综合色| 亚洲国产日韩a在线播放性色| 一区二区三区小说| 亚洲国产综合在线| 极品少妇一区二区三区精品视频| 水野朝阳av一区二区三区| 丝袜美腿高跟呻吟高潮一区| 亚洲123区在线观看| 丝袜亚洲另类丝袜在线| 麻豆成人久久精品二区三区红 | 欧美一区二区三区四区久久| 欧美日韩国产不卡| 久久精品免视看| 亚洲国产精品精华液网站| 国产一区二三区好的| 99久久婷婷国产综合精品电影| 色婷婷av一区二区三区之一色屋| 欧美精选一区二区| 中文字幕免费在线观看视频一区| 亚洲午夜私人影院| 国产精品一二三四五| 欧美在线一区二区三区| 精品国产亚洲一区二区三区在线观看| 久久久久高清精品| 免费在线观看精品| 色婷婷综合在线| 中文字幕精品一区二区三区精品| 亚洲一线二线三线视频| www.亚洲色图.com| 国产清纯白嫩初高生在线观看91 | 精品一区二区三区日韩| 欧美在线免费播放| 亚洲色图视频网站| 成人黄色a**站在线观看| 久久久久久97三级| 蜜桃在线一区二区三区| 欧美区视频在线观看| 亚洲乱码国产乱码精品精98午夜| 国产不卡视频一区| 日本一区二区电影| 91丨九色丨蝌蚪丨老版| 国产亚洲女人久久久久毛片| 91精品综合久久久久久| 久久久av毛片精品| 懂色av中文字幕一区二区三区| www久久精品| av电影天堂一区二区在线观看| 亚洲欧美综合网| 欧美在线不卡视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产亚洲婷婷免费| 99这里只有久久精品视频| 亚洲天堂2016| 91精品国产欧美日韩| 国产伦精品一区二区三区免费迷 | 自拍偷拍欧美精品| 欧美日韩成人一区| 国产精品123| 日韩高清在线电影| 国产精品久久久久一区| 日韩一区二区三区在线观看| 成人黄色小视频| 美女一区二区三区在线观看| 国产精品久久久久久久久图文区| 欧美在线一二三| 色综合久久久久综合体| 美女视频一区在线观看| 亚洲电影一区二区三区| 亚洲欧洲韩国日本视频 | 久久精品视频在线看| 欧美蜜桃一区二区三区| 91在线观看一区二区| 久久精品国产久精国产爱| 亚洲综合一区二区三区| 国产精品国产a| 国产精品视频线看| 国产欧美视频一区二区三区| 欧美α欧美αv大片| 制服丝袜亚洲色图| 欧美日韩中文国产| 色综合天天综合狠狠| 91麻豆国产精品久久| 视频在线观看一区|