📄 voltest.c
字号:
#include <ht46r62.h>
#pragma rambank0
unsigned char voladvalue;
unsigned int key_flag;
unsigned int pressdown;
unsigned int key_counter;
const char numshow[10]=
{0x05f,0x050,0x03d,0x79,0x72,0x6b,0x6f,0x51,0x7f,0x7b};
const unsigned char bat_data[110]=
{0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
0x98,0x97,0x97,0x96,0x94,0x92,0x91,0x89,0x88,0x87,
0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x78,0x77,0x76,
0x76,0x75,0x75,0x74,0x73,0x72,0x71,0x70,0x68,0x66,
0x64,0x62,0x60,0x58,0x56,0x54,0x52,0x50,0x48,0x46,
0x44,0x42,0x40,0x38,0x36,0x34,0x32,0x30,0x28,0x26,
0x25,0x24,0x23,0x22,0x21,0x20,0x19,0x18,0x17,0x16,
0x16,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x13,
0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x11,
0x11,0x10,0x10,0x10,0x09,0x09,0x09,0x08,0x08,0x08,
0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01
};
#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#pragma vector isr_c @ 0xc
#pragma vector isr_14 @ 0x14
//void isr_4(){} // external ISR
void isr_8(){} // timer/event 0
void isr_c(){} // timer/event 1
void isr_14(){_nop();
_nop();
_nop();}
void isr_4()
{_emi=0;
_eif0=0;
if(key_counter==0)
{
key_counter=0;
if(key_flag==0)
{pressdown=1;
key_flag=1;
_pa7=1;}
else
{pressdown=0;
key_flag=0;
_pa7=0;
}
}
else
{key_counter++;}
}
void io_init()
{
_pac=0x08;
_pa=0x0;
_pbc=0xff;
_pb=0xff;
_pdc=0x0ff;
// _pd=0x0;
}
void int_init()
{ _emi=1;
_eei0=1;
}
void timer_base_interrupt()
{_rtcc=0x0a;
_emi=1;
_erti=1;
_acsr=0x00;
}
char vol_ad_converter()
{
_adcr=0x023;
_start=0;
_start=1;
_start=0;
while(_eocb);
voladvalue=_adrh;
return voladvalue;
}
int full_charger_deal(unsigned char advoltage)
{unsigned char fullvoltage ;
fullvoltage=0x053;
if (advoltage<=fullvoltage)
{return 1 ;}
else
{return 0;}
}
int over_discharger(unsigned char advoltage)
{
unsigned char overdischarger;
overdischarger=0xbe;
if(advoltage>=overdischarger)
{return 1;}
else
{return 0;}
}
char rest_overdischarge_voltage()
{
unsigned char restvoltage;
restvoltage=0x0be;
return restvoltage;
}
char look_up_vol_table(unsigned char u)
{unsigned char i;
i=u-0x050;
_acc=i;
return bat_data[i];
}
void disp_voltage_100()
{unsigned char ast;
unsigned char i;
i=numshow[0];
ast=(i&0x0f);
_bp=0x01;
_mp1=0x49; //dispbuffer0
_iar1=ast;
_mp1=0x4b; //dispbuffer2
_iar1=ast;
_swap(&i);
ast=(i&0x0f);
_mp1=0x4a; //dispbuffer1
_iar1=ast;
_mp1=0x4c; //dispbuffer3
_iar1=(ast|0x80);
}
void disp_voltage_low (unsigned char data_val)
{unsigned char ast;
unsigned char low_data;
low_data=numshow[data_val];
_acc=low_data;
ast=(low_data&0x0f);
_acc=ast;
_bp=0x01;
_mp1=0x4b;
_iar1=ast;
_swap(&low_data);
ast=(low_data&0x0f);
_acc=ast;
_mp1=0x4c;
_iar1=ast;
if(pressdown==1)
{bat_flash();
//usb_flash();
}
else
{bat_stay();}
}
void disp_voltage_high(unsigned char data_val)
{
unsigned char ast;
unsigned char low_data;
low_data=numshow[data_val];
_acc=low_data;
ast=(low_data&0x0f);
_acc=ast;
_bp=0x01;
_mp1=0x49;
_iar1=ast;
_swap(&low_data);
ast=(low_data&0x0f);
_acc=ast;
_mp1=0x4a;
_iar1=ast;
}
void show_vol_lcd(unsigned char u )
{
unsigned char ast;
unsigned char low;
unsigned char high;
ast=u;
low=(ast&0x0f);
_swap(&ast);
high=(ast&0x0f);
disp_voltage_low(low);
disp_voltage_high(high);
}
void key_scan()
{
//_pa=0x00;
_pa3=1;
if(_pa3==0)
{_pa3=1;
_delay(150);
if(_pa3==0)
{if(key_counter==1)
{ key_counter=0;
if(key_flag==0)
{ key_flag=1;
_pa7=0;
}
else
{key_flag=0;
_pa7=1;
}
}
else
{key_counter++;}
}
}
}
void usb_flash()
{
unsigned int i;
_bp=0x01;
_mp1=0x051;
_iar1=0x08;
_mp1=0x4c;
_iar1=(_iar1|0x08);
//_delay(500000);
for(i=0;i<100;i++)
{
_delay(5000);
}
_mp1=0x051;
_iar1=0x00;
_mp1=0x4c;
_iar1=(_iar1&0x0f7);
//_delay(500000);
for(i=0;i<100;i++)
{
_delay(5000);
}
}
void bat_flash()
{ unsigned int i;
_bp=0x01;
_mp1=0x4c;
_iar1=(_iar1|0x08);
//_delay(100000);
for(i=0;i<50;i++)
{
_delay(5000);
}
_iar1=(_iar1&0x0f7);
for(i=0;i<50;i++)
{
_delay(5000);
}
}
void bat_stay()
{
_bp=0x01;
_mp1=0x4c;
_iar1=(_iar1|0x08);
}
void clr_screen()
{unsigned int i;
_bp=0x01;
_mp1=0x49;
for(i=0;i<10;i++)
{
#asm
mov a,0h
mov [02],a
#endasm
//_iar1=0x00;
_mp1=_mp1+0x1;
}
}
void key_scan_deal(int key)
{
if(key==1)
{_pa7=1;}
else
if(key==0)
{_pa7=0;}
}
void main()
{
unsigned int keyvalue;
unsigned char advoltage_value;
unsigned char get_show_number;
int k;
io_init();
int_init();
// timer_base_interrupt();
key_flag=0;
pressdown=0;
key_counter=0;
clr_screen();
_pa7=1;
_pa7=0;
while(1)
{
_halt();
advoltage_value=vol_ad_converter();
_acc=advoltage_value;
get_show_number=look_up_vol_table(advoltage_value);
_acc=get_show_number;
show_vol_lcd(get_show_number);
key_scan();
//key_scan_deal(k);
if(pressdown==1)
{bat_flash();
//usb_flash();
}
else
{bat_stay();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -