📄 main__.c
字号:
{
//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 + -