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

📄 example_ad.c

📁 C8051F020单片机开发板演示程序
💻 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 + -