📄 sio.i
字号:
** 日 期: 2007年01月13日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: For 智能充电器 FOR AVR MCU / Mega16
**
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 村长 aleyn.wu
** 日 期: 2008年3月3日
** 描 述: 修改了一些BUG,使本项目能在CVAVR下编译通过
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
// UCSRA
// UCSRB
// UCSRC
extern void putchar(char c);
extern void debug_usart_init(void);
extern void usart_init(void);
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
** 智 能 充 电 器 开 发 小 组
** OurAVR 论坛
** QQ 群: 26052247
**
** http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: LCD1602.h
**创 建 人: 吕海安
**最后修改日期: 2008年03月02日
**描 述: LCD1602 的底层函数头文件 FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版 本: v1.0
** 日 期: 2008年03月02日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,归档
**
**------------------------------------------------------------------------------------------------------
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 村长 aleyn.wu
** 日 期: 2008年3月3日
** 描 述: 修改了一些BUG,使本项目能在CVAVR下编译通过
** 增加了一个函数
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern void delay_1us(void);
extern void delay_xus(unsigned char t);
extern void lcd_write_cmd(unsigned char cmd);
extern void lcd_write_byte(unsigned char byte, unsigned char type);
extern void lcd_cls();
extern void lcd_init();
extern void lcd_write_char(unsigned char lcd_x, unsigned char lcd_y, unsigned char data);
extern void lcd_locate(unsigned char lcd_x, unsigned char lcd_y);
extern void lcd_print_string(char *pstring);
extern void lcd_print_stringF(flash char *pstring);
extern void lcd_print_number(int number , unsigned char ca , unsigned char cb);
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
** 智 能 充 电 器 开 发 小 组
** OurAVR 论坛
** QQ 群: 26052247
**
** http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: ADC.h
**创 建 人: 吕海安
**最后修改日期: 2008年03月02日
**描 述: AD转换的底层函数头文件 FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版 本: v0.03
** 日 期: 2008年03月02日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,归档
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
// 电压放大倍数 3.1
// 电流放大倍数 6.6
/*According to the Trinove's memory Planning
26 AD电池1 电压
27 AD电池1 电压
28 AD电池1 电流
29 AD电池1 电流
30 AD电池1 温度
31 AD电池1 温度
32 AD电池2 电压
33 AD电池2 电压
35 AD电池2 电流
34 AD电池2 电流
36 AD电池2 温度
37 AD电池2 温度
*/
/* ADC Channel Definition
ADC0-- BAT_0_VOL
ADC1-- BAT_1_VOL
ADC2-- BAT_0_CUR
ADC3-- BAT_1_CUR
ADC4-- BAT_0_TEMP
ADC5-- BAT_1_TEMP
ADC6-- Key
*/
//#define KEY_CH 6
extern void s_analog_init();
extern unsigned int s_analog();
extern unsigned int vol_to_bat_vol(unsigned int vol);
extern int vol_to_bat_cur(unsigned int vol);
extern unsigned int vol_to_temp(unsigned int vol);
extern unsigned char filter_adc(unsigned char channel);
extern void ReadBatterySTAT(unsigned char channel);
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
** 智 能 充 电 器 开 发 小 组
** OurAVR 论坛
** QQ 群: 26052247
**
** http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: PWM.h
**创 建 人: 吕海安
**最后修改日期: 2008年03月02日
**描 述: PWM 的底层函数头文件 FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版 本: v1.0
** 日 期: 2008年03月02日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,归档
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
extern void pwm_init();
extern void bat_discharge(unsigned char bat_no,unsigned int discharge_value);
extern void bat_charge_set(unsigned char bat_no, unsigned char cur_or_vol,unsigned int charge_data_set);
extern int cell_pid0(void);
extern int cell_pid1(void);
extern void cell_output(void);
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
//#include "Menu.h" // 菜单 functions
//#define Memory_Char_to_Int(x) (((INT16U)memory[x]<<8) | ((INT16U)memory[x+1]))
//#define Memory_Char_To_Long(x) (((unsigned long)memory[x])<<24|((unsigned long)memory[x+1])<<16|((unsigned long)memory[x+2])<<8|((unsigned long)memory[x+3]))
//#define Memory_Long_add(x) memory[x]=((Memory_Char_To_Long(x)+1)>>24);memory[x+1]=((Memory_Char_To_Long(x)+1)>>16);memory[x+2]=((Memory_Char_To_Long(x)+1)>>8);memory[x+3]=Memory_Char_To_Long(x)+1
typedef struct // 定义一个位段结构,用于处理输入的各个位
{
unsigned char bit0 :1;
unsigned char bit1 :1;
unsigned char bit2 :1;
unsigned char bit3 :1;
unsigned char bit4 :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
}BITTYPE;
typedef union datatype // 定义一个联合位段
{
unsigned char bbyte;
BITTYPE bbit;
}COMMBYTE;
extern unsigned int t0flag;
extern unsigned char para[230];
extern void ShowMenu(void); // 菜单函数
/*
#include "SIO.c" // Keyboard functions
#include "UART.c" // UART functions
#include "LCD1602.c" // LCD functions
#include "ADC.c" // ADC functions
#include "PWM.c" // PWM functions
*/
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
/****************************************Copyright (c)**************************************************
** 智 能 充 电 器 开 发 小 组
** OurAVR 论坛
** QQ 群: 26052247
**
** http://www.ouravr.com/bbs
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: SIO.h
**创 建 人: 吕海安
**最后修改日期: 2008年03月02日
**描 述: 按键的底层函数头文件 FOR AVR MCU / Mega16
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版 本: v0.01
** 日 期: 2008年03月02日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 吕海安
** 日 期: 2008年03月02日
** 描 述: 修改格式,归档
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/**************************************************************************************×*****************
** END OF FILE
********************************************************************************************************/
/***************************************************
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
***************************************************/
/*******************************************************************************************************
** 函数名称: KEY_init
** 功能描述: 74HC166 通信端口设置
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void KEY_init(void)
{
// SLOAD SCK 输出,SDO 输入
DDRB |= (1 << 2)|(1 << 1);
DDRB &=~ (1 << 0);
// SLOAD = 1
// SCK = 0
// SDO上拉电阻启用
(PORTB |= (1 << 2));
(PORTB &=~ (1 << 1));
PORTB |= (1 << 0);
}
/*******************************************************************************************************
** 函数名称: SCK_low_to_high
** 功能描述: 时钟产生
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void SCK_low_to_high(void)
{
(PORTB &=~ (1 << 1));
(PORTB |= (1 << 1));
(PORTB &=~ (1 << 1));
}
/*******************************************************************************************************
** 函数名称: read_keycode
** 功能描述: 键值读取函数
** 输入参数: 无
** 输出参数: 键值
********************************************************************************************************/
unsigned char read_keycode(void)
{
unsigned char key_code = 0,i;
(PORTB |= (1 << 2));
(PORTB &=~ (1 << 2)); // 允许并行数据 <----> Parallel enable input (active LOW)
SCK_low_to_high(); // 时钟信号,上升沿锁存数据并移出最高位 BIT7,非常重要
(PORTB |= (1 << 2)); // 并行锁存结束,非常重要
// 先读取 BIT7,非常重要
for(i = 8; i > 0; i--)
{
if((PINB & (1 << 0)))
{
key_code |= (1 << 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)
{
unsigned char i;
i = read_keycode();
if(i != 63)
{
lcd_locate(14,0);
lcd_print_number(i,2,0);
}
}
/**********************************************************************************************************
** END OF FILE
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -