📄 ad转换.c
字号:
/*********************************************************
A/D转换应用程序,外部中断0用来开启一次新的转换,
每次中断结束,自动申请中断1,进行数据的采集和显示
*********************************************************/
#include <reg51.h>
#include <absacc.h>
#define DIGPOT XBYTE[0x200] //定义字位口
#define WORDPOT XBYTE[0x100] // 定义字型口
#define fosc 11.0592 //晶振频率
#define timer0 2000 //延时时间
unsigned char t; //计算延时临时变量
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
unsigned char wordbuf[4]; //字型码缓冲区
void rdp1(void);
unsigned int bcd_convt(unsigned char i);
void yanshi(void); //保留
void TIMEER_DELAY(void); //延时函数
void display(void); //显示函数
void main(void)
{
IT0=1; // 中断0下降沿触发
EA=1;
EX0=1; //中断0开中断
IT1=1;
EX1=1;
P1=0xff;
wordbuf[0]=0xbf;
wordbuf[1]=0x3f;
wordbuf[2]=0x3f;
wordbuf[3]=0x3f;
while(1)
{
display( );
}
}
void int0(void) interrupt 0
{
IT1=1;
EX1=1; // 中断1开中断
wordbuf[0]=0xbf;
wordbuf[1]=0x3f;
wordbuf[2]=0x3f;
wordbuf[3]=0x3f;
}
void int1(void) interrupt 2
{
rdp1(); // 读取转换结果
EX1=1; //中断1关
}
/***************读取转换结果*******************/
void rdp1(void)
{
unsigned char i;
P1=0xFF;
while(P14==0){};
while(P14==1) //等待选通信号DS1
{
if ( P10==0 && P13==0 ) wordbuf[0]=0x86; //读最高位
if (P10==0 && P13==1 ) wordbuf[0]=0xbf;
}
i=0;
while(P15==0){};
yanshi();
i=P1;
i=i&0x0f;
if (i<0x0a) wordbuf[1]= bcd_convt(i);
i=0;
while(P16==0){}; //等待选通信号DS3
yanshi();
i=P1;
i=i&0x0f;
if (i<0x0a) wordbuf[2]= bcd_convt(i);
i=0;
while(P17==0){}; //等待选通信号DS4
yanshi();
i=P1;
i=i&0x0f;
if (i<0x0a) wordbuf[3]=bcd_convt(i);
}
/******************BCD码和7段码转换**********************/
unsigned int bcd_convt(unsigned char i)
{
unsigned char p;
switch (i)
{
case 0: p=0x3f; break;
case 1: p=0x06; break;
case 2: p=0x5b; break;
case 3: p=0x4f; break;
case 4: p=0x66; break;
case 5: p=0x6d; break;
case 6: p=0x7D; break;
case 7: p=0x07; break;
case 8: p=0x7f; break;
case 9: p=0x6f; break;
default: p=0x76; break; //乱码显示H
}
return(p) ;
}
/***************2毫秒延时函数***************/
void TIMEER_DELAY(void)
{
TMOD=0x01;
t=65536-timer0*fosc/12;
TH0= (t/256);
TL0= (t%256);
TR0=1;
ET0=0;
while(TH0!=0 && TL0!=0){};
}
/*******************结果显示函数***********************/
void display(void)
{
WORDPOT=wordbuf[0];
DIGPOT=0x01;
TIMEER_DELAY();
DIGPOT=0x00;
WORDPOT=wordbuf[1];
DIGPOT=0x02;
TIMEER_DELAY();
DIGPOT=0x00;
WORDPOT=wordbuf[2];
DIGPOT=0x04;
TIMEER_DELAY();
DIGPOT=0x00;
WORDPOT=wordbuf[3];
DIGPOT=0x08;
TIMEER_DELAY();
DIGPOT=0x00;
}
void yanshi(void)
{
int j;
for(j=0;j++;j<1000){};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -