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

📄 main__.c

📁 智能充电参考程序 可以控制整个充电过程希望对大家有帮助
💻 C
📖 第 1 页 / 共 5 页
字号:
            {
                //put_c(97);
                if(pwm_value != 0x0000)
                {
                    pwm_value--;
                }
                OCR1AH = (INT8U)(pwm_value >> 8);

                OCR1AL = (INT8U)(pwm_value & 0x00ff);
            }
            else if(memory[BAT0_PWM_STATUS - 1] == DisCHARGE)
            {
                if(OCR0 != 0xfe)
                {
                    OCR0 ++;
                }
            }
        }
        else
        {
            //put_c(97);

            if(memory[BAT0_PWM_STATUS - 1] == CHARGE)
            {
                if(pwm_value != 0xFFFF)
                pwm_value++;

                OCR1AH = (INT8U)(pwm_value >> 8);

                OCR1AL = (INT8U)(pwm_value & 0x00ff);
            }
            else if(memory[BAT0_PWM_STATUS - 1] == DisCHARGE)
            {
                if(OCR2 != 0x01)
                {
                    OCR0 --;
                }
            }

        }

    }*/

}

/**************************************************************************************×*****************
**                                 END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
**                              智 能 充 电 器 开 发 小 组
**                                     OurAVR 论坛
**                                   QQ 群: 26052247
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: SIO.c
**创   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: 按键的底层函数  FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: Trinove
** 版  本: v0.01
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: mowin , martin7wind
** 日 期: 2008年02月03日
** 描 述: For 智能充电器
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,归档
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 村长 aleyn.wu
** 日 期: 2008年3月3日
** 描 述: 修改了一些BUG,使本项目能在CVAVR下编译通过
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#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 "SIO.h"


/***************************************************
 74HC166并入串出

 连线如下
 KEY_SDO   = PB0
 KEY_CLK   = PB1
 KEY_SLOAD = PB2

 KEY_1 = A (UP)     62
 KEY_2 = B (DOWN)   61
 KEY_3 = C (LEFT)   59
 KEY_4 = D (RIGHT)  55
 KEY_5 = E (ENTER)  47
 KEY_6 = F (CANCEL) 31
***************************************************/

#define KEY_ADR  10

#define KEY_DDR  DDRB
#define KEY_PORT PORTB
#define KEY_PIN  PINB

#define SDO      PB0
#define SCK      PB1
#define SLOAD    PB2

#define _BV(a)          (1 << a)
#define SCK_high()      (KEY_PORT |= _BV(SCK))
#define SLOAD_high()    (KEY_PORT |= _BV(SLOAD))

#define SCK_low()       (KEY_PORT &=~ _BV(SCK))
#define SLOAD_low()     (KEY_PORT &=~ _BV(SLOAD))
#define read_SDO()      (KEY_PIN & _BV(SDO))


/*******************************************************************************************************
** 函数名称: KEY_init
** 功能描述: 74HC166 通信端口设置
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void KEY_init(void)
{
    // SLOAD SCK 输出,SDO 输入
    KEY_DDR |= _BV(SLOAD)|_BV(SCK);
    KEY_DDR &=~ _BV(SDO);

    // SLOAD = 1
    // SCK = 0
    // SDO上拉电阻启用
    SLOAD_high();
    SCK_low();
    KEY_PORT |= _BV(SDO);
}

/*******************************************************************************************************
** 函数名称: SCK_low_to_high
** 功能描述: 时钟产生
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void SCK_low_to_high(void)
{
    SCK_low();
    SCK_high();
    SCK_low();
}

/*******************************************************************************************************
** 函数名称: read_keycode
** 功能描述: 键值读取函数
** 输入参数: 无
** 输出参数: 键值
********************************************************************************************************/
INT8U read_keycode(void)
{
    INT8U key_code = 0,i;

    SLOAD_high();
    SLOAD_low();        // 允许并行数据 <----> Parallel enable input (active LOW)

    SCK_low_to_high();  // 时钟信号,上升沿锁存数据并移出最高位 BIT7,非常重要

    SLOAD_high();       // 并行锁存结束,非常重要

    // 先读取 BIT7,非常重要
    for(i = 8; i > 0; i--)
    {
        if(read_SDO())
        {
            key_code |= _BV(i-1);
        }

        //产生下一个时钟信号
        SCK_low_to_high();
    }

    //返回键值,六个按键,只要低六位,高两位未用
    return (key_code & 0x3f);
}


/*******************************************************************************************************
** 函数名称: read_keycode
** 功能描述:  连接并接收键盘信号,并进行持续按键判断
**            键盘按键值和持续按键标志 均直接写入内存数据表
**            键盘内存分配一个单元 INT8U
**            前2位代表状态,后6位对应每一个按键
**            最多存储三个按键状态,多余将被忽略
**            状态: 1 1 --- 前两次结果未处理,等待
**                  1 0 --- 上次按键结果未处理,等待
**                  0 1 --- 正常按下,等待处理
**                  0 0 --- 空闲 忽略,不处理
**            普通按键位1代表正常,0代表按下
** 输入参数: 无
** 输出参数: 键值
********************************************************************************************************/
void s_keyboard(void)
{
    INT8U i;
    i = read_keycode();
    if(i != NO_KEY)
    {
        lcd_locate(14,0);
        lcd_print_number(i,2,0);
    }


}


/**********************************************************************************************************
**                                 END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
**                              智 能 充 电 器 开 发 小 组
**                                     OurAVR 论坛
**                                   QQ 群: 26052247
**
**                               http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: SIO.c
**创   建   人: Trinove
**最后修改日期: 2008年01月13日
**描        述: 菜单的底层函数  FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: aleyn.wu
** 版  本: V1.0
** 日 期: 2008年01月13日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月09日
** 描 述: For 智能充电器
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#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 "Menu.h"


#define MENU_LINE 2

/*******************************************************************************************************
** 函数名称: ExecuteMenu
** 功能描述: 菜单显示程序,每 100 mS 调用一次即可
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void ExecuteMenu(INT8U MenuID)
{

	if (MenuID == MN_STAT_BATTERY0)
	{
		ReadBatterySTAT(BATTERY0);
	}
	else if (MenuID == MN_STAT_BATTERY1)
	{
		ReadBatterySTAT(BATTERY1);
	}

	else if (MenuID == MN_STAT_BATTERY_BOTH)
	{
		ReadBatterySTAT(BATTERY_BOTH);
	}

}

/*******************************************************************************************************
** 函数名称: MenuNo
** 功能描述: 菜单序号
** 输入参数: INT8U No:
** 输出参数:
********************************************************************************************************/
INT8U MenuNo(INT8U No)
{
    if ((No >= 0) && (No <= 9))
    {
        return No + '0';
    }
    else if ((No >= 10) && (No <= 36))
    {
        return No - 10 + 'A';
    }
    else
    {
        return '?';
    }
}


/*******************************************************************************************************
** 函数名称: ChooseRadioMenu
** 功能描述: 选择单选菜单
** 输入参数: INT8U ParamCaptionID:
**           INT8U MenuDefineID:
**           INT8U *Value
** 输出参数: 无
********************************************************************************************************/
/*
void ChooseRadioMenu(INT8U ParamCaptionID, INT8U MenuDefineID, INT8U *Value)
{
    flash INT8U *Caption;
    flash INT8U *pDefine;
    INT8U Key;
    INT8U Pos;
    INT16U TopMenuItem;
    INT16U CurrentMenuItem;
    //INT8U i;
    INT8U MenuCount;

    delay_ms(10);

    //LCD_WriteCaption(ParamCaptionID, 0);
    //Pos = LCD_Position() - 1;

     lcd_locate(0,0);

    //WriteCGRAM(0x82,1,0);
    //WriteCGRAM(0x83,2,0);
    //WriteCGRAM(0x84,3,0);

    pDefine = SubMenuDefine + (INT16U)2 * (INT16U)MenuDefineID;
    MenuCount = pDefine[1];
    TopMenuItem = pDefine[0];
    CurrentMenuItem = *Value;
    if (CurrentMenuItem > MenuCount - 1)
    {
        CurrentMenuItem=MenuCount - 1;
    }


    Key = INIT_KEY;
    while (Key != BT_APPLY)
    {
        if (Key != NO_KEY)
        {
            lcd_write_byte((0x80 | Pos), CMD);

            Caption = Menu + (CAPTION_LENGTH + 2) * (TopMenuItem + CurrentMenuItem - 1);

            if (CurrentMenuItem == 0)
            {
                lcd_write_byte(3, DATA);
            }
            else if (CurrentMenuItem == MenuCount - 1)
            {
                lcd_write_byte(1, DATA);
            }
            else
            {
                lcd_write_byte(2, DATA);
            }

            //LCD_Write(MenuNo(CurrentMenuItem));
            lcd_write_byte(' ', DATA);
            lcd_write_byte('=', DATA);
            lcd_print_stringF(Caption);
        }

        Key = read_keycode();

        if (Key != NO_KEY)
        {
            if (Key == BT_UP)
            {
                if (CurrentMenuItem > 0)
                {
                    CurrentMenuItem --;
                }
            }
            else if (Key == BT_DOWN)
            {
                if (CurrentMenuItem < MenuCount - 1)
                {
                    CurrentMenuItem ++;
                }
            }
            else if (Key == BT_APPLY)
            {
                *Value = CurrentMenuItem;
            }
            else if (Key == BT_LEFT)
            {
                Key = BT_APPLY;
            }

          

⌨️ 快捷键说明

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