📄 main.c
字号:
#include "main.h"
#include "reg52.h"
#include "absacc.h"
#define uchar unsigned char
#define uint unsigned int
#define AdL8 XBYTE[0xFEFF] // 低8位
#define AdH4 XBYTE[0xFDFF] // 高4位
sbit LDAC = P1^0; // MAX527装载DAC寄存器控制脚LDAC
sbit A0 = P1^1; // DAC通道选择脚A0
sbit A1 = P1^2; // DAC通道选择脚A1
unsigned char Channel_Msb;
unsigned char Channel_Lsb;
unsigned char Buffer_Key;
unsigned int DA_Input;
float DA_Output;
/********功能:定时中断程序定时对外部电压进行数据采集并进行数据处理**********/
void Timer0(void) interrupt 1 using 1
{
TR0 = 0;
Collection_Data();
Process_Data();
TL0 = 0x00; //定时65535us
TH0 = 0x00;
TR0 = 1;
}
/****************初始化程序对51单片机初始化******************/
void Timer0_Initial()
{
TMOD = 0x01; //使用定时器0,工作方式1
EA = 1;
ET0 = 1; //边缘触发方式
TL0 = 0x00; //定时65535us
TH0 = 0x00;
TR0 = 1;
}
/*************数据处理完成采集的数据的十六进制转换为十进制的形式*************/
void Process_Data()
{
uint Digit_Data;
DA_Input=AdH4<<8+AdL8;
Digit_Data =((Channel_Msb&0x0f)<<8) + Channel_Lsb;
DA_Output=(Digit_Data / 4096.0)*2.5;
}
/*************定时采集对197进行控制,向197的控制字寄存器中写入控制字,对外围电压信号进行采集*************/
void Collection_Data()
{
uchar i;
if(136==Buffer_Key) /* 选择A输入寄存器,即选择A通道 */
{
A0 = 0;
A1 = 0;
}
if(132==Buffer_Key) /* 选择B输入寄存器,即选择B通道 */
{
A0 = 0;
A1 = 1;
}
if(130==Buffer_Key) /* 选择C输入寄存器,即选择C通道 */
{
A0 = 1;
A1 = 0;
}
if(129==Buffer_Key) /* 选择D输入寄存器,即选择D通道 */
{
A0 = 1;
A1 = 1;
}
LDAC = 1; // 将LDAC置高
Channel_Lsb=AdL8; // 低8位数据装入
for (i=0;i<250;i++) // 适当延时
i=i;
Channel_Msb=AdH4; // 高4位数据装入
LDAC = 0; /* 将LDAC置低,输入寄存器数据转入DAC寄存器,模拟输出端VOUTA输出模拟信号*/
}
/***************************主程序开始**************************/
void main()
{
DISPInitial();
Timer0_Initial();
while(1)
{ Buffer_Key=Key_Scan();
DisplayLCD();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -