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

📄 blinky.c

📁 2138AD采样,DA输出,定时采样,由定时器器控制DA输出锯齿波,keil环境proteus仿真通过.
💻 C
字号:
#include  "lpc21xx.h"
#include <stdio.h>
#define Fpclk 11059200
#define UART_BPS 57600
#define uint32 unsigned int
#define uint16 unsigned short
#define uint8 unsigned char
/****************************************************************************
* 名    称:DelayNS()
* 功    能:长软件延时
****************************************************************************/
void  DelayNS(uint32  dly)
{   uint32  i;
    for(; dly>0; dly--) 
    {
        for(i=0; i<5000; i++);
    }
}
/****************************************************************************
* 名    称:UART0_Ini()
* 功    能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
****************************************************************************/
void  UART0_Init(void)
{   uint16 Fdiv;
    U0LCR = 0x83;						// DLAB = 1,可设置波特率
    Fdiv = (Fpclk / 16) / UART_BPS;		// 设置波特率
    U0DLM = Fdiv / 256;							
    U0DLL = Fdiv % 256;						
    U0LCR = 0x03;
}				
/****************************************************************************
* 名    称:UART0_SendByte()
* 功    能:向串口发送字节数据,并等待发送完毕。
****************************************************************************/
void  UART0_SendByte(uint8 data)
{  
    U0THR = data;				    	// 发送数据
    while( (U0LSR&0x40)==0 );	    	// 等待数据发送完毕
}
/****************************************************************************
* 名    称:UART0_SendStr()
* 功    能:向串口发送一字符串
****************************************************************************/
void  	UART0_SendStr(char *str)
{  
    while(1)
    {  
        if( *str == '\0' ) break;
        UART0_SendByte(*str++);	    	// 发送数据
    }
}
/*********************************AD转化初始化*******************************
* 名    称:ADC_Init()
* 功    能:AD转换初始化设置
****************************************************************************/
void  ADC_Init(void)
{
	PINSEL1 = 	PINSEL1|0x00400000;						// 设置P0.27连接到AIN0
    // 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) //
    ADCR = (1 << 0)                     |		// SEL = 1 ,选择通道0
           ((Fpclk / 1000000 - 1) << 8) | 		// CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
           (0 << 16)                    |		// BURST = 0 ,软件控制转换操作
           (0 << 17)                    | 		// CLKS = 0 ,使用11clock转换
           (1 << 21)                    | 		// PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)                    | 		// TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)                    | 		// START = 1 ,直接启动ADC转换
           (0 << 27);							// EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
}
/*********************************AD转化函数********************************
* 名    称:ADC_Funtion()
* 功    能:
****************************************************************************/
void  ADC_Funtion(void)
{  	char    str_1[20];
	uint32  ADC_Data;	
	ADCR = (ADCR&0x00FFFF00)|0x01|(1 << 24);	// 设置通道1,并进行第一次转换
    while( (ADDR&0x80000000)==0 );	            // 等待转换结束
    ADCR = ADCR | (1 << 24);					// 再次启运转换
    while( (ADDR&0x80000000)==0 );              // 等待转换结束
    ADC_Data = ADDR;							// 读取ADC结果
    ADC_Data = (ADC_Data>>6) & 0x3FF;           // 提取AD转换值
    ADC_Data = ADC_Data * 3300/1024;            // 数值转换
    sprintf(str_1, "VIN1=%dmV \r", ADC_Data);           
    UART0_SendStr(str_1); 
}
/*********************************DA转化初始化*******************************
* 名    称:DAC_Init()
* 功    能:
****************************************************************************/
void  DAC_Init(void)
{
	PINSEL1 = 	PINSEL1|0x00080000;			// 设置P0.25连接到Aout,其它不变
}
/*********************************DA转化函数********************************
* 名    称:DAC_Funtion()
* 功    能:
****************************************************************************/
void  DAC_Funtion  (uint16	V_Aout)
{	uint32  DACV_Data;
	DACV_Data=V_Aout;
	DACV_Data=DACV_Data*1024/3300;
 	DACR =((DACV_Data<<6)&0x0000FFC0);	
}
/*********************************DA转化函数********************************
* 名    称:Time0Init()
* 功    能:
****************************************************************************/
void Time0Init(void)
{
	T0TC=0;									    //定时器0开始计数时为0
	T0PR = 99;			    					// 设置定时器0分频为100分频,得110592Hz
	T0MCR = 0x03;		   						// 匹配通道0匹配中断并复位T0TC
	T0MR0 = 110592;	    						// 比较值(1S定时值)
	T0TCR = 0x03;		   						// 使能并复位T0TC
	T0TCR = 0x01; 								//使能T0TC
}


/****************************************************************************
* 名    称:main()
* 功    能:
****************************************************************************/
int  main(void)
{  
  	int i=0;

    PINSEL0 = 0x00000005;		    // 设置I/O连接到UART0
    UART0_Init();					//串口初始化
	ADC_Init();						//AD转化初始化
	DAC_Init();						//DA转化初始化
	Time0Init();					// 初始化定时器0
									 
    while(1)	
    {  
		while( T0IR&0x01== 0 );			    // 等待定时时间到
        T0IR = 0x01;							// 清除中断标志 

		{
		ADC_Funtion();
		i++;
		if(i<3300)	
			{
				DAC_Funtion (i);
			}	
		 	else
			i=0;
		}

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -