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

📄 voltest.c

📁 用holtek单片机编写的A/D变换程序。
💻 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 + -