#include "HT46C46E.h"
#define uchar unsigned char
#pragma vector isr_adc @0x0C
const uchar led_num[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar voltage_value,current_value;
//PB0电压,PB1电流
void isr_adc(void)
{
if(_acs0)
{
current_value=_adr;
}
else
{
voltage_value=_adr;
}
_acs0=~_acs0;
_start=0;
_start=1;
_start=0;
}
void display_av(uchar voltage)//显示电压值
{
uchar bai,shi,ge;
bai=voltage/100;
shi=voltage/10%10;
ge=voltage%10;
_pa=led_num[bai];
_pb2=1;//段锁存
_pb2=0;
_pa=0xff;//清PA上数据
_delay(5);
_pa=0xfb;
_pb3=1;//位锁存
_pb3=0;
_delay(20);
_pa=led_num[shi];
_pb2=1;
_pb2=0;
_pa=0xff;
_delay(5);
_pa=0xfc;
_pb3=1;
_pb3=0;
_delay(20);
_pa=led_num[ge];
_pb2=1;
_pb2=0;
_pa=0xff;
_delay(5);
_pa=0xfe;
_pb3=1;
_pb3=0;
_delay(20);
}
void display_ac(uchar current)//显示电流值
{
uchar bai,shi,ge;
bai=current/100;
shi=current/10%10;
ge=current%10;
_pa=led_num[bai];
_pb2=1;//段锁存
_pb2=0;
_pa=0xff;//清PA上数据
_delay(5);
_pa=0xdf;
_pb3=1;//位锁存
_pb3=0;
_delay(20);
_pa=led_num[shi];
_pb2=1;
_pb2=0;
_pa=0xff;
_delay(5);
_pa=0xef;
_pb3=1;
_pb3=0;
_delay(20);
_pa=led_num[ge];
_pb2=1;
_pb2=0;
_pa=0xff;
_delay(5);
_pa=0xf7;
_pb3=1;
_pb3=0;
_delay(20);
}
void init(void)
{
voltage_value=0;
current_value=0;
_emi=1;//开总中断
_eadi=1;//开AD中断
_pac=0;//pa口输出模式
_pbc=0x03;//pb口0,1输入,2,3输出模式
_acsr|=0x80;//32分频
_acs0=0;
_acs1=0;
_acs2=0;
_pcr0=0;
_pcr1=1;
_pcr2=0;
_start=0;
_delay(5);
_start=1;
_delay(5);
_start=0;
}
void main()
{
init();
//adcr应为00010001或00010000
while(1)
{
// _adcr=0x48;1001000
display_ac(current_value);
_delay(5);
// _adcr=0x51;
display_av(voltage_value);
_delay(5);
}
}