📄 voltage_c52.c
字号:
#include "AT89X52.h"
#define AD977_DATACLK P1_0
#define AD977_DATA P1_1
#define AD977_R_nC P1_2
#define AD977_nBUSY P1_3
#define SEG p2
#define COM P3
signed int read_ad(void);
void convert_display(signed int read_ad_data);
void display_negative(void);
void display_one_BCD(unsigned char bit_num , unsigned char d, bit s);
void main(void)
{
signed int data read_ad_data=0,i;
P0=0xff;
P1=0xff;
P2=0xff;
while(1)
{
P3=0xff;
read_ad_data = read_ad();
//read_ad_data = 0x7fff;
for (i=0;i<100;i++)
convert_display(read_ad_data);
}
}
signed int read_ad(void)
{
signed int data temp=0;
signed char i=16;
AD977_DATACLK = 0;
temp=0;
AD977_R_nC=0;
// while(AD977_nBUSY==0);
AD977_R_nC=1;
while(AD977_nBUSY==1);
AD977_DATACLK=1;
AD977_DATACLK=0;
while(i--)
{
AD977_DATACLK=1;
temp = (temp<<1)|AD977_DATA;
AD977_DATACLK=0;
}
return(temp);
}
void convert_display(signed int read_ad_data)
{
bit s = ( (read_ad_data&0x8000) == 0x8000) ;
unsigned char data d,int_num=0;
signed char data bit_num=7;
// bit dot = 0;
float voltage;
if(s==1)
{
display_negative();
read_ad_data=(read_ad_data^0xffff)+1;
//read_ad_data=read_ad_data&0x7fff;
bit_num=6;
}
// convert ad read data to voltage
voltage=20.0*((unsigned int )read_ad_data)/65536.0;
// if(voltage>=1.0) int_num=1;
// else int_num=0;
while(voltage >= 10.0)
{
voltage=voltage/10.0;
int_num++;
}
while(bit_num>=0)
{
d=(int)voltage;
voltage=(voltage-d)*10.0;
if(int_num==0)
{
display_one_BCD(bit_num,d,1);
}
else
{
display_one_BCD(bit_num,d,0);
}
bit_num--;
int_num--;
}
}
void display_negative(void)
{
P3=0xff;
P2=~0X40;
P3_7=0;
}
void display_one_BCD(unsigned char bit_num , unsigned char d, bit s)
{
P3=0xff;
switch(d)
{
case 0:
if(s==1)
P2=~0x0bf;
else
P2=~0x03f;
break;
case 1:
if(s==1)
P2=~0x86;
else
P2=~0x06;
break;
case 2:
if(s==1)
P2=~0x0db;
else
P2=~0x05b;
break;
case 3:
if(s==1)
P2=~0x0cf;
else
P2=~0x04f;
break;
case 4:
if(s==1)
P2=~0x0e6;
else
P2=~0x066;
break;
case 5:
if(s==1)
P2=~0x0ed;
else
P2=~0x06d;
break;
case 6:
if(s==1)
P2=~0x0fd;
else
P2=~0x07d;
break;
case 7:
if(s==1)
P2=~0x087;
else
P2=~0x007;
break;
case 8:
if(s==1)
P2=~0x0ff;
else
P2=~0x07f;
break;
case 9:
if(s==1)
P2=~0x0e7;
else
P2=~0x067;
}
switch(bit_num)
{
case 0:
P3_0=0;
break;
case 1:
P3_1=0;
break;
case 2:
P3_2=0;
break;
case 3:
P3_3=0;
break;
case 4:
P3_4=0;
break;
case 5:
P3_5=0;
break;
case 6:
P3_6=0;
break;
case 7:
P3_7=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -