📄 example_ad.c
字号:
/************************************************************************************
* Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* Http: www.mlarm.com
* Email: mlarm@mlarm.com
*
* File name: Example_AD.c
*
* Project : ML-F020ICB
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: EagleC
* Version: 1.00
* Date: 2007.07.05
* Email:
*
* Description: AD测试程序文件;
*
* Others: none;
*
* Function List:
*
* History:
* 1. Author: Eagle Cao
* Version: 1.00
* Date: 2007.07.05
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "driver.h"
#include "api.h"
#include "ShowLCD.h"
/************************************************************************************/
/************************************************************************************/
// 常量及全局变量定义
#define AD_LINE 3
#define AD_COLUMN 8
/************************************************************************************/
extern unsigned int xdata DAC0_Buffer[DACO_TXBUF_SIZE]; // DAC0发送数据缓存
extern unsigned int xdata DAC1_Buffer[DAC1_TXBUF_SIZE]; // DAC1发送数据缓存
/*************************************************************************************/
//
// AD测试程序函数定义
//
/*************************************************************************************/
/***********************************************************************************
* Function: ADO_Proc;
*
* Description: AD测试程序;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void AD_Proc(void)
{
unsigned char cmd,j;
int buf[24];
long addbuf[8];
unsigned char nShow,i,k;
unsigned int kl;
unsigned char ad_flag; //是否进行显示
unsigned int nY;
unsigned char nX;
unsigned char *pItem;
unsigned char ain[7] = {0};
unsigned char nRet;
long vLong;
long n1;
ADC_Enable();
LCDB_ClearScreen(); // LCD清屏
Show_Title(); //显示大标题
LCDB_DispFWord(32,8*(20-3),"AD 监 测"); //显示小标题
vLong = 10000;
ain[6] = 0;
n1 = 0;
for (kl=0;kl<256;kl++)
DAC1_Buffer[kl] = DAC0_Buffer[kl] = n1;
DAC0_Enable();
DAC1_Enable();
ad_flag = 1;
Show_ClareX64();
Show_ADC();
nShow = 0;
while(1)
{
EWachdog_Clear();
cmd = Key_Read();
if(cmd != CH452_KEY_INVAL)
{
ALARM_Ctrl(1);
Delay_ms(100);
ALARM_Ctrl(0);
switch (cmd)
{
case 0x0C://ADC的显示界面
DAC0_Disable();
DAC1_Disable();
n1+=500;
if(n1>10000) n1 = 0;
for (kl=0;kl<256;kl++)
DAC1_Buffer[kl] = DAC0_Buffer[kl] = n1*0xfff/10000;
DAC0_Enable();
DAC1_Enable();
break;
case 0x0D://ADC的显示界面
ad_flag = 1;
nShow = 0;
Show_ClareX64();
Show_ADC();
break;
case 0x0E://显示说明文件
ad_flag = 0;
Show_ClareX64();
nX = 64;
pItem = "本测试程序主要监测24路AD采样数据,采样结果分3组并排显示,采样频率为24000Hz。";
LCDB_DispFWord(nX, 32,pItem);
pItem = "C:DA输出值累加500mV";
LCDB_DispFWord(nX+16*3, 56,pItem);
pItem = "D:确认";
LCDB_DispFWord(nX+16*4, 56,pItem);
pItem = "E:帮助";
LCDB_DispFWord(nX+16*5, 56,pItem);
pItem = "F:返回";
LCDB_DispFWord(nX+16*6, 56,pItem);
break;
case 0x0f:
ADC_Disable();
return;
}
}
if(ad_flag)
{
ADC_ClearFIFO(); // 清除ADC FIFO
for(i=0;i<8;i++) addbuf[i] = 0;
EWachdog_Clear();
for(k=0;k<16;)
{
while(1)
{
if(ADC_GetWordsRxBuf()>=24) break;
else Delay_us(1);
EWachdog_Clear();
}
if(ADC_Read((unsigned int *)buf,24))
{
for(i=0;i<8;i++) addbuf[i] += buf[nShow*8+i];
k++;
}
EWachdog_Clear();
}
switch(nShow)
{
case 0:
nY=ADC1_BEGIN_DATAY;
for (j=0,nX = ADC_BEGIN_X; j<8; j++,nX+=ADC_XSPACING)
{
ain[0]=' ';ain[1]=' ';ain[2]=' ';ain[3]=' ';ain[4]=' ';ain[5]=' ';
nRet = Format_I(addbuf[j]/16*10000/0xfff,ain,6,0,'0','h');
LCDB_DispFWord(nX,nY,ain);
EWachdog_Clear();
}
Delay_ms(450);
nShow = 1;
break;
case 1:
nY=ADC2_BEGIN_DATAY;
for (j=0,nX = ADC_BEGIN_X; j<8; j++,nX+=ADC_XSPACING)
{
ain[0]=' ';ain[1]=' ';ain[2]=' ';ain[3]=' ';ain[4]=' ';ain[5]=' ';
nRet = Format_I(addbuf[j]/16*10000/0xfff,ain,6,0,'0','h');
LCDB_DispFWord(nX,nY,ain);
EWachdog_Clear();
}
Delay_ms(450);
nShow = 2;
break;
case 2:
nY=ADC3_BEGIN_DATAY;
for (j=0,nX = ADC_BEGIN_X; j<8; j++,nX+=ADC_XSPACING)
{
ain[0]=' ';ain[1]=' ';ain[2]=' ';ain[3]=' ';ain[4]=' ';ain[5]=' ';
nRet = Format_I( (addbuf[j]/16-0x800)*10000/0x800,ain,6,0,'0','h');
LCDB_DispFWord(nX,nY,ain);
EWachdog_Clear();
}
Delay_ms(450);
nShow = 0;
break;
default:
nShow = 0;
break;
}
}
}
}
/***********************************************************************************/
// 文件结束
/***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -