www.pudn.com > PRMCharger_V0.04.rar > Menu.i, change:2008-03-09,size:34368b


/****************************************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 智能充电器 
** 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
/****************************************Copyright (c)************************************************** 
**                              智 能 充 电 器 开 发 小 组 
**                                     OurAVR 论坛 
**                                   QQ 群: 26052247  
** 
**                               http://www.ouravr.com/bbs 
** 
**--------------文件信息-------------------------------------------------------------------------------- 
**文   件   名: config.h 
**创   建   人: 吕海安 
**最后修改日期: 2008年03月02日 
**描        述: 程序的数据结构配置头文件 
**               
**--------------历史版本信息---------------------------------------------------------------------------- 
** 创建人: 吕海安 
** 版  本: v1.0 
** 日 期: 2008年03月02日 
** 描 述: 原始版本 
** 
**--------------当前版本修订------------------------------------------------------------------------------ 
** 修改人: 村长 aleyn.wu 
** 日 期: 2008年3月3日 
** 描 述: 使本项目能在CVAVR下编译通过 
** 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
  // CodeVisionAVR C Compiler 
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L. 
 // I/O registers definitions for the ATmega16 
  #pragma used+ 
sfrb TWBR=0; 
sfrb TWSR=1; 
sfrb TWAR=2; 
sfrb TWDR=3; 
sfrb ADCL=4; 
sfrb ADCH=5; 
sfrw ADCW=4;      // 16 bit access 
sfrb ADCSRA=6; 
sfrb ADMUX=7; 
sfrb ACSR=8; 
sfrb UBRRL=9; 
sfrb UCSRB=0xa; 
sfrb UCSRA=0xb; 
sfrb UDR=0xc; 
sfrb SPCR=0xd; 
sfrb SPSR=0xe; 
sfrb SPDR=0xf; 
sfrb PIND=0x10; 
sfrb DDRD=0x11; 
sfrb PORTD=0x12; 
sfrb PINC=0x13; 
sfrb DDRC=0x14; 
sfrb PORTC=0x15; 
sfrb PINB=0x16; 
sfrb DDRB=0x17; 
sfrb PORTB=0x18; 
sfrb PINA=0x19; 
sfrb DDRA=0x1a; 
sfrb PORTA=0x1b; 
sfrb EECR=0x1c; 
sfrb EEDR=0x1d; 
sfrb EEARL=0x1e; 
sfrb EEARH=0x1f; 
sfrw EEAR=0x1e;   // 16 bit access 
sfrb UBRRH=0x20; 
sfrb UCSRC=0X20; 
sfrb WDTCR=0x21; 
sfrb ASSR=0x22; 
sfrb OCR2=0x23; 
sfrb TCNT2=0x24; 
sfrb TCCR2=0x25; 
sfrb ICR1L=0x26; 
sfrb ICR1H=0x27; 
sfrb OCR1BL=0x28; 
sfrb OCR1BH=0x29; 
sfrw OCR1B=0x28;  // 16 bit access 
sfrb OCR1AL=0x2a; 
sfrb OCR1AH=0x2b; 
sfrw OCR1A=0x2a;  // 16 bit access 
sfrb TCNT1L=0x2c; 
sfrb TCNT1H=0x2d; 
sfrw TCNT1=0x2c;  // 16 bit access 
sfrb TCCR1B=0x2e; 
sfrb TCCR1A=0x2f; 
sfrb SFIOR=0x30; 
sfrb OSCCAL=0x31; 
sfrb OCDR=0x31; 
sfrb TCNT0=0x32; 
sfrb TCCR0=0x33; 
sfrb MCUCSR=0x34; 
sfrb MCUCR=0x35; 
sfrb TWCR=0x36; 
sfrb SPMCR=0x37; 
sfrb TIFR=0x38; 
sfrb TIMSK=0x39; 
sfrb GIFR=0x3a; 
sfrb GICR=0x3b; 
sfrb OCR0=0X3c; 
sfrb SPL=0x3d; 
sfrb SPH=0x3e; 
sfrb SREG=0x3f; 
#pragma used- 
 // Interrupt vectors definitions 
  // Needed by the power management functions (sleep.h) 
//#define __SLEEP_SUPPORTED__ 
#asm 
	#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 
#endasm 
  // CodeVisionAVR C Compiler 
// (C) 1998-2006 Pavel Haiduc, HP InfoTech S.R.L. 
 // Prototypes for standard I/O functions 
  // CodeVisionAVR C Compiler 
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L. 
 // Variable length argument list macros 
   typedef char *va_list; 
     #pragma used+ 
 char getchar(void); 
void putchar(char c); 
void puts(char *str); 
void putsf(char flash *str); 
 char *gets(char *str,unsigned int len); 
 void printf(char flash *fmtstr,...); 
void sprintf(char *str, char flash *fmtstr,...); 
void snprintf(char *str, unsigned int size, char flash *fmtstr,...); 
void vprintf (char flash * fmtstr, va_list argptr); 
void vsprintf (char *str, char flash * fmtstr, va_list argptr); 
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr); 
signed char scanf(char flash *fmtstr,...); 
signed char sscanf(char *str, char flash *fmtstr,...); 
                                                        #pragma used- 
 #pragma library stdio.lib 
  // CodeVisionAVR C Compiler 
// (C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L. 
 // Prototypes for string functions 
   #pragma used+ 
 char *strcat(char *str1,char *str2); 
char *strcatf(char *str1,char flash *str2); 
char *strchr(char *str,char c); 
signed char strcmp(char *str1,char *str2); 
signed char strcmpf(char *str1,char flash *str2); 
char *strcpy(char *dest,char *src); 
char *strcpyf(char *dest,char flash *src); 
unsigned int strlenf(char flash *str); 
char *strncat(char *str1,char *str2,unsigned char n); 
char *strncatf(char *str1,char flash *str2,unsigned char n); 
signed char strncmp(char *str1,char *str2,unsigned char n); 
signed char strncmpf(char *str1,char flash *str2,unsigned char n); 
char *strncpy(char *dest,char *src,unsigned char n); 
char *strncpyf(char *dest,char flash *src,unsigned char n); 
char *strpbrk(char *str,char *set); 
char *strpbrkf(char *str,char flash *set); 
char *strrchr(char *str,char c); 
char *strrpbrk(char *str,char *set); 
char *strrpbrkf(char *str,char flash *set); 
char *strstr(char *str1,char *str2); 
char *strstrf(char *str1,char flash *str2); 
char *strtok(char *str1,char flash *str2); 
  unsigned int strlen(char *str); 
void *memccpy(void *dest,void *src,char c,unsigned n); 
void *memchr(void *buf,unsigned char c,unsigned n); 
signed char memcmp(void *buf1,void *buf2,unsigned n); 
signed char memcmpf(void *buf1,void flash *buf2,unsigned n); 
void *memcpy(void *dest,void *src,unsigned n); 
void *memcpyf(void *dest,void flash *src,unsigned n); 
void *memmove(void *dest,void *src,unsigned n); 
void *memset(void *buf,unsigned char c,unsigned n); 
unsigned int strcspn(char *str,char *set); 
unsigned int strcspnf(char *str,char flash *set); 
int strpos(char *str,char c); 
int strrpos(char *str,char c); 
unsigned int strspn(char *str,char *set); 
unsigned int strspnf(char *str,char flash *set); 
 #pragma used- 
#pragma library string.lib 
  // CodeVisionAVR C Compiler 
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L. 
  #pragma used+ 
 void delay_us(unsigned int n); 
void delay_ms(unsigned int n); 
 #pragma used- 
 /* 
  CodeVisionAVR C Compiler 
  (C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L. 
  Prototypes for power management functions 
*/ 
  // CodeVisionAVR C Compiler 
// (C) 1998-2007 Pavel Haiduc, HP InfoTech S.R.L. 
 // I/O registers definitions 
  // CodeVisionAVR C Compiler 
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L. 
 // I/O registers definitions for the ATmega16 
     											     #pragma used+ 
#pragma used+ 
void sleep_enable(void); 
void sleep_disable(void); 
void idle(void); 
 void powerdown(void); 
 void powersave(void); 
  void standby(void); 
 void extended_standby(void); 
#pragma used- 
 #pragma library sleep.lib 
    // PORTA 
 // PORTB 
 // PORTC 
 // PORTD 
    /****************************************Copyright (c)************************************************** 
**                              智 能 充 电 器 开 发 小 组 
**                                     OurAVR 论坛 
**                                   QQ 群: 26052247  
** 
**                               http://www.ouravr.com/bbs 
** 
**--------------文件信息-------------------------------------------------------------------------------- 
**文   件   名: Para.h 
**创   建   人: 吕海安 
**最后修改日期: 2008年03月08日 
**描        述: 内存参数配置头文件 
**               
**--------------历史版本信息---------------------------------------------------------------------------- 
** 创建人: 吕海安 
** 版  本: v0.01 
** 日 期: 2008年03月08日 
** 描 述: 原始版本 
** 
**--------------当前版本修订------------------------------------------------------------------------------ 
** 修改人:  
** 日 期:  
** 描 述:  
** 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
          /**************************************************************************************×***************** 
**                                 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日 
** 描 述: 修改格式,归档 
** 
**------------------------------------------------------------------------------------------------------ 
********************************************************************************************************/ 
       extern void KEY_init(void); 
extern unsigned char read_keycode(void); 
extern void s_keyboard(void);  
  /**************************************************************************************×***************** 
**                                 END OF FILE 
********************************************************************************************************/ 
/****************************************Copyright (c)************************************************** 
**                              智 能 充 电 器 开 发 小 组 
**                                     OurAVR 论坛 
**                                   QQ 群: 26052247  
** 
**                               http://www.ouravr.com/bbs 
** 
**--------------文件信息-------------------------------------------------------------------------------- 
**文   件   名: UART.h 
**创   建   人: 吕海安 
**最后修改日期: 2007年01月13日 
**描        述: UART的底层函数  FOR AVR MCU / Mega8 
**               
**--------------历史版本信息---------------------------------------------------------------------------- 
** 创建人: 吕海安 
** 版  本: v1.0 
** 日 期: 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 
********************************************************************************************************/ 
/*************************************/ 
/*     AVR Menu v1.0                 */ 
/*              Designed by aleyn.wu */ 
/*************************************/ 
   /*OPTION CPL:16*/ 
     flash unsigned char  Menu[]={ 
/*MENU  ST:7, PD:00, ID:01*/ "Function Sel    ", 6+1, 
/*MENU  ST:7, PD:00, ID:02*/ "Para Setting    ", 6+2,/*DEF PARA_SETTING*/ 
/*MENU  ST:7, PD:00, ID:03*/ "Bettery Stat    ", 6+12,/*DEF BATTERY_STATE*/ 
/*MENU  ST:7, PD:00, ID:04*/ "COM Setting     ", 6+13,/*DEF COM_SETTING*/ 
/*MENU  ST:7, PD:00, ID:05*/ "Version         ", 6+16,/*DEF VERSION*/ 
 /*MENU  ST:2, PD:01, ID:06*/ "Normal Charger  ", 1, 
/*MENU  ST:2, PD:01, ID:07*/ "Test Battery Sta", 1, 
/*MENU  ST:2, PD:01, ID:08*/ "Test Bettery own", 1, 
/*MENU  ST:2, PD:01, ID:09*/ "Repair Battery  ", 1, 
/*MENU  ST:2, PD:01, ID:10*/ "Normal Discharge", 1, 
/*MENU  ST:2, PD:01, ID:11*/ "Battery Test Cir", 1, 
 /*MENU  ST:7, PD:08, ID:12*/ "Battery 0       ", 6+3, 
/*MENU  ST:7, PD:08, ID:13*/ "Battery 1       ", 6+4, 
/*MENU  ST:7, PD:08, ID:14*/ "Copy Function   ", 6+5, 
/*MENU  ST:7, PD:08, ID:15*/ "Default         ", 6+6, 
/*MENU  ST:7, PD:08, ID:16*/ "Custom Setting  ", 6+7, 
 /*MENU  ST:2, PD:09, ID:17*/ "F1              ", 1, 
/*MENU  ST:2, PD:09, ID:18*/ "F2              ", 1, 
/*MENU  ST:2, PD:09, ID:19*/ "F3              ", 1, 
/*MENU  ST:2, PD:09, ID:20*/ "F4              ", 1, 
/*MENU  ST:2, PD:09, ID:21*/ "F5              ", 1, 
 /*MENU  ST:2, PD:15, ID:22*/ "F1              ", 1, 
/*MENU  ST:2, PD:15, ID:23*/ "F2              ", 1, 
/*MENU  ST:2, PD:15, ID:24*/ "F3              ", 1, 
/*MENU  ST:2, PD:15, ID:25*/ "F4              ", 1, 
/*MENU  ST:2, PD:15, ID:26*/ "F5              ", 1, 
 /*MENU  ST:2, PD:21, ID:27*/ "Copy B1 to B2   ", 1, 
/*MENU  ST:2, PD:21, ID:28*/ "Copy B2 to B1   ", 1, 
 /*MENU  ST:2, PD:24, ID:29*/ "Reset Default   ", 1, 
 /*MENU  ST:7, PD:26, ID:30*/ "Custom1         ", 6+8, 
/*MENU  ST:7, PD:26, ID:31*/ "Custom2         ", 6+9, 
/*MENU  ST:7, PD:26, ID:32*/ "Custom3         ", 6+10, 
/*MENU  ST:7, PD:26, ID:33*/ "Custom4         ", 6+11, 
 /*MENU  ST:2, PD:27, ID:34*/ "Load B0         ", 1, 
/*MENU  ST:2, PD:27, ID:35*/ "Load B1         ", 1, 
/*MENU  ST:2, PD:27, ID:36*/ "Save B0         ", 1, 
/*MENU  ST:2, PD:27, ID:37*/ "Save B1         ", 1, 
 /*MENU  ST:2, PD:32, ID:38*/ "Load B0         ", 1, 
/*MENU  ST:2, PD:32, ID:39*/ "Load B1         ", 1, 
/*MENU  ST:2, PD:32, ID:40*/ "Save B0         ", 1, 
/*MENU  ST:2, PD:32, ID:41*/ "Save B1         ", 1, 
 /*MENU  ST:2, PD:37, ID:42*/ "Load B0         ", 1, 
/*MENU  ST:2, PD:37, ID:43*/ "Load B1         ", 1, 
/*MENU  ST:2, PD:37, ID:44*/ "Save B0         ", 1, 
/*MENU  ST:2, PD:37, ID:45*/ "Save B1         ", 1, 
 /*MENU  ST:2, PD:42, ID:46*/ "Load B0         ", 1, 
/*MENU  ST:2, PD:42, ID:47*/ "Load B1         ", 1, 
/*MENU  ST:2, PD:42, ID:48*/ "Save B0         ", 1, 
/*MENU  ST:2, PD:42, ID:49*/ "Save B1         ", 1, 
 /*MENU  ST:3, PD:47, ID:50*/ "Bettery0        ", 2,/*DEF STAT_BATTERY0*/ 
/*MENU  ST:3, PD:47, ID:51*/ "Bettery1        ", 2,/*DEF STAT_BATTERY1*/ 
/*MENU  ST:3, PD:47, ID:52*/ "Both B0 & B1    ", 2,/*DEF STAT_BATTERY_BOTH*/ 
 /*MENU  ST:7, PD:51, ID:53*/ "BaudRate        ", 6+14, 
/*MENU  ST:7, PD:51, ID:54*/ "COM Setting     ", 6+15, 
 /*MENU  ST:2, PD:52, ID:55*/ "9600            ", 1, 
/*MENU  ST:2, PD:52, ID:56*/ "38400           ", 1, 
 /*MENU  ST:2, PD:55, ID:57*/ "Cycle           ", 1, 
/*MENU  ST:2, PD:55, ID:58*/ "Interrupt       ", 1, 
 /*MENU  ST:2, PD:58, ID:59*/ "Hardware: V0.3  ", 1, 
/*MENU  ST:2, PD:58, ID:60*/ "Software: V0.03 ", 1, 
 0 
}; 
  flash unsigned char SubMenuDefine[]={ 
/*SUBMENU of ID:00 */ 1, 5, 
/*SUBMENU of ID:01 */ 6, 6, 
/*SUBMENU of ID:02 */ 12, 5, 
/*SUBMENU of ID:12 */ 17, 5, 
/*SUBMENU of ID:13 */ 22, 5, 
/*SUBMENU of ID:14 */ 27, 2, 
/*SUBMENU of ID:15 */ 29, 1, 
/*SUBMENU of ID:16 */ 30, 4, 
/*SUBMENU of ID:30 */ 34, 4, 
/*SUBMENU of ID:31 */ 38, 4, 
/*SUBMENU of ID:32 */ 42, 4, 
/*SUBMENU of ID:33 */ 46, 4, 
/*SUBMENU of ID:03 */ 50, 3, 
/*SUBMENU of ID:04 */ 53, 2, 
/*SUBMENU of ID:53 */ 55, 2, 
/*SUBMENU of ID:54 */ 57, 2, 
/*SUBMENU of ID:05 */ 59, 2, 
0 
}; 
 void ExecuteMenu(unsigned char MenuID); 
   /******************************************************************************************************* 
** 函数名称: ExecuteMenu 
** 功能描述: 菜单显示程序,每 100 mS 调用一次即可 
** 输入参数: 无 
** 输出参数: 无 
********************************************************************************************************/ 
void ExecuteMenu(unsigned char MenuID) 
{ 
	 	if (MenuID == 50) 
	{ 
		ReadBatterySTAT(1); 
	} 
	else if (MenuID == 51) 
	{ 
		ReadBatterySTAT(2); 
	} 
	 	else if (MenuID == 52) 
	{ 
		ReadBatterySTAT(3);		 
	} 
	 } 
 /******************************************************************************************************* 
** 函数名称: MenuNo 
** 功能描述: 菜单序号 
** 输入参数: INT8U No: 
** 输出参数:  
********************************************************************************************************/ 
unsigned char MenuNo(unsigned char 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; 
            } 
            delay_ms(10) 
        } 
    } 
}  
*/ 
 /******************************************************************************************************* 
** 函数名称: ShowMenu 
** 功能描述: 菜单显示程序,每 100 mS 调用一次即可 
** 输入参数: 无 
** 输出参数: 无 
********************************************************************************************************/ 
void ShowMenu(void) 
{ 
    static flash unsigned char *pMenu; 
    static flash unsigned char *pDefine; 
    static flash unsigned char *Caption;   
    static unsigned int TopMenuItem = 0; 
    static unsigned int CurrentMenuItem = 0; 
    static unsigned char Stack[3][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  
    static unsigned char StackIndex = 0; 
    static unsigned char DrawMenuItem[6]={0x80,0xC0,1,0,0,1}; 
    static unsigned char MenuCount; 
    static unsigned char FlagMenuInit = 1;   // 显示菜单框架 
    static unsigned char Key = 0 ;     // 第一次显示菜单 
    unsigned char i = 0; 
    unsigned char j = 0;  
     if(FlagMenuInit) 
    { 
        FlagMenuInit = 0;  // 清第一次标志  
          lcd_cls();  //清屏     
        pMenu = Menu;   
        pDefine = SubMenuDefine; 
        MenuCount = SubMenuDefine[1];  
                 //WriteCGRAM(0x80,0,0);     // 写入特殊字符  
        //WriteCGRAM(0x81,1,0);     // 写入特殊字符   
    }   
         if (Key != 63) 
    {         
        for (j=0; j<2; j++) 
        { 
            lcd_write_byte(DrawMenuItem[0 + j], 0); 
                         if (DrawMenuItem[(unsigned char)(j + 4)] < MenuCount) 
            { 
                Caption = Menu + (16 + 2) * (TopMenuItem + DrawMenuItem[(unsigned char)(j + 4)]); 
                                 if (DrawMenuItem[(unsigned char)(j + 2)]) 
                {                 
                    lcd_write_byte(0, 1); 
                    lcd_write_byte(MenuNo(DrawMenuItem[(unsigned char)(j + 4)] + 1), 1); 
                    lcd_write_byte('.', 1); 
                    lcd_print_stringF(Caption); 
                } 
                else 
                {    
                    lcd_print_stringF(" "); 
                    lcd_write_byte(MenuNo(DrawMenuItem[(unsigned char)(j + 4)] + 1), 1); 
                    lcd_write_byte('.', 1); 
                    lcd_print_stringF(Caption); 
                } 
            } 
            else 
            { 
                for (i=0; i<16; i++)  
                { 
                    lcd_write_byte(' ', 1); 
                } 
            }        
        } 
    } 
         Key = read_keycode();  
         if (Key != 63) 
    { 
        if (Key == 62) 
        { 
            if (DrawMenuItem[3]) 
            { 
                DrawMenuItem[2]=1; 
                DrawMenuItem[3]=0; 
            }  
            else if (DrawMenuItem[4]>0) 
            { 
                DrawMenuItem[4]--; 
                DrawMenuItem[5]--; 
            } 
        } 
        else if (Key == 61) 
        {    
            if (DrawMenuItem[2]) 
            { 
                DrawMenuItem[2]=0; 
                DrawMenuItem[3]=1; 
            } 
            else if (DrawMenuItem[5]<MenuCount-1) 
            { 
                DrawMenuItem[4]++; 
                DrawMenuItem[5]++; 
            } 
        } 
        else if ((Key == 47) || (Key == 55)) 
        { 
                         if (DrawMenuItem[2]) 
            { 
                CurrentMenuItem = TopMenuItem + DrawMenuItem[4]; 
            } 
            else 
            { 
                CurrentMenuItem = TopMenuItem + DrawMenuItem[5]; 
            } 
                         if (CurrentMenuItem < 60) 
            { 
                pMenu = Menu + ((16 + 2) * CurrentMenuItem) + 16 + 1; 
                if (*pMenu > 6) 
                { 
                    Stack[0][StackIndex] = pDefine-SubMenuDefine; 
                    Stack[1][StackIndex] = DrawMenuItem[2]; 
                    Stack[2][StackIndex] = DrawMenuItem[4]; 
                    StackIndex ++; 
                                         pDefine = SubMenuDefine + ((unsigned int)(*pMenu - 6) * 2); 
                    TopMenuItem =* pDefine - 1; 
                    MenuCount = pDefine[1]; 
                    DrawMenuItem[2] = 1; 
                    DrawMenuItem[3] = 0; 
                    DrawMenuItem[4] = 0; 
                    DrawMenuItem[5] = 1; 
                } 
                else if (*pMenu <= 6) 
                { 
                    ExecuteMenu(CurrentMenuItem + 1); 
                } 
                             } 
        } 
        else if ((Key == 31) || (Key == 59)) 
        { 
            if (StackIndex > 0) 
            { 
                StackIndex --; 
                pDefine=SubMenuDefine + (unsigned int)(Stack[0][StackIndex]); 
                TopMenuItem=*pDefine - 1; 
                MenuCount=pDefine[1]; 
                DrawMenuItem[2] = Stack[1][StackIndex]; 
                DrawMenuItem[3] = 1 - Stack[1][StackIndex]; 
                DrawMenuItem[4] = Stack[2][StackIndex]; 
                DrawMenuItem[5] = Stack[2][StackIndex] + 1; 
            } 
        } 
         }               
     } 
    /******************************************************************************************************** 
**                                 END OF FILE 
********************************************************************************************************/ 
 

送体验金的网站