📄 ad.c
字号:
#include<reg51.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define adch XBYTE[0x8000] //电路图中用的通道0 ,XINH输入电压
//为什么把adch定义在片外0x8000区域?
//要不要操作RD和WR ?
sbit dula=P2^7;
sbit wela=P2^6;
sbit HBEN=P3^0;
sbit INT=P2^2;
//sbit CS=P2^5;
//sbit WR=P3^6; //在WR为低电平期间把控制字节写进去
//sbit RD=P3^7;
uchar code tabledu[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1};
uchar code tablewe[]={
0xf1,0xf2,0xf4,0xf8}; //为1选中
void readtemp(void);
unsigned int Data_process(void);
void display();
void delay(uint x);
uint read_data,c,a,b;
uchar datal,datah,qian,bai,shi,ge,num;
void main()
{
//CS=0;
adch=0x40; //adch是定义在XBYTE区的变量,对它赋值就是对片外器件进行写的操作,此时WR信号为低电平,有效
//相反,如果要读片外器件,就将adch赋给某一个量,如;P0=adch,此时RD为低电平,有效
//控制字节0x40:通道0,0~5v输入电压,内部时钟模式
//控制字中设定的通道号要与具体电路中采用的通道一致,这里都是0
//DAS芯片操作方式与其它AD芯片类同,都是先进行相关的设置,再启动工作
while(1)
{
read_data=Data_process();
c=read_data;
qian=c/1000;
bai=c%1000/100;
shi=c%1000%100/10;
ge=c%1000%100%10;
display();
}
}
void readtemp(void)
{
//adch=0x40;
while(INT!=0)//INT=0转换结束
{
HBEN=0;
}
//delay(10);
datal=adch;//HBEN=0读的是低8位
HBEN=1;
datah=adch; //HBEN=1读的是高4位,先读高4位或先读低8位没区分
HBEN=0;
}
unsigned int Data_process(void)
{
unsigned int data_temp;
readtemp();
data_temp=datah*256+datal;
data_temp*=1.2207; //?
return(data_temp);
}
void display()
{
dula=1;
P0=tabledu[qian];
dula=0;
P0=tablewe[0];
wela=1;
wela=0;
delay(6);
dula=1;
P0=tabledu[bai];
dula=0;
P0=tablewe[1];
wela=1;
wela=0;
delay(6);
dula=1;
P0=tabledu[shi];
dula=0;
P0=tablewe[2];
wela=1;
wela=0;
delay(6);
dula=1;
P0=tabledu[ge];
dula=0;
P0=tablewe[3];
wela=1;
wela=0;
delay(6);
}
void delay(uint x)
{
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -