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

📄 ad.c

📁 AD MAX197 PROGRAM SCM
💻 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 + -