📄 max1293_1.c
字号:
/*******************************************************
电压采集(使用MAX1293)液晶(1602)显示
MAX1293驱动程序
********************************************************/
/********************************************************
MAX1293驱动程序
********************************************************/
/********************************************************
MAX1293信息:
1.使用内部基准(2.5V)
2.使用单极输入
3.内部时钟
MAX1293接口信息:
MAX1293_HBEN---->
MAX1293_INT----->
MAX1293_RD------>
MAX1293_WR------>
MAX1293_CS------>
MAX1293_IO------>
*********************************************************/
#include<AT89X51.H>
unsigned char code ram1[]="MAX1293 Convert ";
unsigned char code ram2[]=" ";
#define _1602DATAS_
#include <1602Drive.H>
//MAX1293接口信息:
sbit MAX1293_HBEN =P1^4;
sbit MAX1293_INT =P3^2;
sbit MAX1293_RD =P1^2;
sbit MAX1293_WR =P1^1;
sbit MAX1293_CS =P1^0;
#define MAX1293_IO P0
//函数声明表
void MAX1293_Initial(void);
void MAX1293_Delay(unsigned char d);
void MAX1293_Write(unsigned char a);
void MAX1293_Read(void);
void System_Initial(void);
void MAX1293_Disp(void);
bit bdata int_flag,read_flag,time_flag;
unsigned char data lowdata,highdata;
/*********************************************************************
函数名称: main
函数功能: 主函数
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void main(void)
{
System_Initial();
LCDInitial();
WriteDatas();
ClrLCD();
MAX1293_Initial(); //动作:上电延时,并设置MAX1293控制字为01000000 ??
MAX1293_Write(0x99); //使用内部时钟,单端单极输入,通道为CH1
while(1)
{
if(time_flag==1) //50ms启动一次转换
{
time_flag=0;
MAX1293_Write(0x99);
}
MAX1293_Read();
MAX1293_Disp();
}
}
/*********************************************************************
函数名称: MAX1293_Initial
函数功能: 初始化MAX1293
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void MAX1293_Initial(void)
{
MAX1293_Delay(20); //MAX1293上电复位,至少500us
MAX1293_Write(0x40); //MAX1293处于待机模式,时钟关闭0100 0000
}
/*********************************************************************
函数名称: MAX1293_Delay
函数功能: MAX1293延时,延时时间为 2*25*d us
输入参数: d(延时调节变量)
输出参数: 无
返回值: 无
*********************************************************************/
void MAX1293_Delay(unsigned char d)
{
unsigned char data t;
for(;d>0;d--)
{
for(t=25;t>0;t--)
{
;
}
}
}
/*********************************************************************
函数名称: MAX1293_Write
函数功能: 写控制字给MAX1293
输入参数: a(控制代码)
输出参数: 无
返回值: 无
*********************************************************************/
void MAX1293_Write(unsigned char a)
{
MAX1293_CS=0;
MAX1293_Delay(1); //延时50us
MAX1293_WR=0;
MAX1293_Delay(1); //延时50us
MAX1293_IO=a;
MAX1293_Delay(1); //延时50us
MAX1293_WR=1; //当4个内部时钟下降沿后,开始转换
MAX1293_CS=1;
}
/*********************************************************************
函数名称: MAX1293_Read
函数功能: 读出MAX1293的转换结果
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void MAX1293_Read(void)
{
if(int_flag==1)
{
int_flag=0;
MAX1293_HBEN=0;
MAX1293_CS=0;
MAX1293_Delay(1); //延时50us
MAX1293_RD=0;
MAX1293_Delay(1); //延时50us
lowdata=MAX1293_IO;
MAX1293_HBEN=1;
MAX1293_Delay(1); //延时50us
highdata=MAX1293_IO;
MAX1293_Delay(1); //延时50us
MAX1293_RD=1;
MAX1293_CS=1;
read_flag=1;
lowdata=0x00;
highdata=0xf0;
}
}
/*********************************************************************
函数名称: MAX1293_Interrupt
函数功能: 检测转换状况,并给予标志
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void MAX1293_Interrupt(void) interrupt 0 using 1
{
int_flag=1;
}
void MAX1293_timer(void) interrupt 1 using 2
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time_flag=1;
}
/*********************************************************************
函数名称: System_Initial
函数功能: 系统初始化
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
void System_Initial(void)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=0x01;
ET0=1;
EX0=1;
EA=1;
TR0=1;
int_flag=0;
read_flag=0;
time_flag=0;
}
/*********************************************************************
函数名称: MAX1293_Disp
函数功能: 将转换结果显示到1602中
输入参数: 无
输出参数: 无
返回值: 无
*********************************************************************/
unsigned char code address1[]={0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85};
unsigned char code address2[]={0x83,0x82,0x81,0x80};
void MAX1293_Disp(void)
{
unsigned char i,addr,dat;
if(read_flag==1)
{
read_flag=0;
for(i=0;i<8;i++)
{
dat=((lowdata>>i)&0x01)+0x30;
addr=address1[i];
Writeonedata(addr,dat);
}
for(i=0;i<4;i++)
{
dat=((highdata>>i)&0x01)+0x30;
addr=address2[i];
Writeonedata(addr,dat);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -