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

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http:// www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:          user.c
** Last modified Date: 2007.08.24
** Last Version:       V1.0
** Description:        Stellaris系列单片机处理器触发A/D转换
**                     通过ADC0、ADC1分别采样W1、W2的电压值,并输出到串口显示
**                     通过内部温度传感器采样芯片温度值,并输出到串口显示
** 
**--------------------------------------------------------------------------------------------------------
** Created By:         Kang qinhua
** Created date:       2007.10.10
** Version:            V1.0
** Descriptions:       The original version 初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by:        Kang qinhua
** Modified date:      2008.01.13
** Version:            v1.1
** Description:
**
*********************************************************************************************************/
#include "includes.h"
#include "uart_send.h"
#include "adc.h"

static const unsigned char g_channel0[] = "通道0使用第一个数据采样点,采样电压是";
static const unsigned char g_channel1[] = "通道1使用第二个数据采样点,采样电压是";
static const unsigned char g_channel2[] = "第三个数据采样点,使用内部温度传感器,采样电压是";
static const unsigned char g_channel3[] = "第三个数据采样点,使用内部温度传感器,采样温度是";
static const unsigned char tempunint[]  = "摄氏度";

/*********************************************************************************************************
** Function name:      Test_ADC
** Descriptions:       通过PC5产生一个方波,与PB4(模拟比较器C-输入端)连接,在方波的下降沿触发AD
** input parameters:   n: 产生的方波的周期
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void Test_ADC (uint32  n)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);                        /*  使能GPIO PC口               */
    GPIODirModeSet(GPIO_PORTC_BASE, PC5, GPIO_DIR_MODE_OUT); 	        /*  设置 PC5 为输出             */

    GPIOPadConfigSet(GPIO_PORTC_BASE, PC5,
                     GPIO_STRENGTH_4MA,
                     GPIO_PIN_TYPE_STD);   

    GPIOPinWrite(GPIO_PORTC_BASE, PC5, ~ PC5);
    delay(n);
    GPIOPinWrite(GPIO_PORTC_BASE, PC5, PC5); 
    delay(n);
}

/*********************************************************************************************************
** Function name:      delay
** Descriptions:       延时一段时间
** input parameters:   n: 延时参数
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void delay (uint32  n)
{
    uint32 i;
    for (i = 0; i < n; i++);
}

/*********************************************************************************************************
** Function name:      Led_init
** Descriptions:       LED初始化
** input parameters:   无
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void Led_init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);                        /*  使能GPIOA口                 */
    GPIODirModeSet(GPIO_PORTA_BASE, PA4 | PA5, GPIO_DIR_MODE_OUT);      /*  设置PA4|PA5为输出           */               

    GPIOPadConfigSet(GPIO_PORTA_BASE, PA4 | PA5,                        /*  配置输出模式                */
                     GPIO_STRENGTH_4MA,
                     GPIO_PIN_TYPE_STD);

    GPIOPinWrite(GPIO_PORTA_BASE, PA4, ~PA4);                           /*  点亮LED                     */
    GPIOPinWrite(GPIO_PORTA_BASE, PA5, ~PA5);
}

/*********************************************************************************************************
** Function name:      mux_n
** Descriptions:       计算10的n次幂,n要大于等于0
** input parameters:   n: 10的n次幂
** output parameters:  sum: 返回运算后的结果
** Returned value:     无   
*********************************************************************************************************/
uint32 mux_n (uint8  n)
{
    uint8  i;
    uint32 sum = 10;
    for (i = 1; i < n; i++) {
        sum = sum * 10;
    }
    if (n == 0) {
        sum = 1;
    }
    return sum;
}

/*********************************************************************************************************
** Function name:      Data_ASICC
** Descriptions:       将一个最大值四位的数转换位ASICC码通过串口打印出来
** input parameters:   charge_data: 要转换的3位整数
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void Data_ASICC (uint16  charge_data)
{
    uint8  i;
    uint16 ulchar, temp;
    for (i = 0; i < 4; i++) {
        ulchar = charge_data / (mux_n(3 - i)) % 10 + '0';               /*  取出最高位                  */
        UARTCharPut(UART0_BASE, ulchar);
        if (i == 0) {																	   
            UARTCharPut(UART0_BASE, '.');                               /*  打印小数点                  */
        }
        ulchar  = (ulchar - '0');                                       /*  下面四条语句是将最高位消除,
                                                                            为下次再取一个最高位做准备  */                
        temp    = (mux_n(3 - i));
        ulchar  = ulchar * temp;
        charge_data = charge_data - ulchar;
    }
    UARTCharPut(UART0_BASE, 'V');                                       /*  打印电压单位V               */
    UARTCharPut(UART0_BASE, '\r');                                      /*  换行                        */
    UARTCharPut(UART0_BASE, '\n');                                      /*  光标回到起始位置            */
}

/*********************************************************************************************************
** Function name:      Get_temp
** Descriptions:       取出采样温度值并输出到串口
** input parameters:   charge_data: 内部温度传感器的采样电压值
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void Get_temp (uint16  charge_data)
{
    uint8  i;
    uint16 ulchar, temp1, temp2, sbuf1, sbuf2;

    charge_data = (2700 - charge_data) * 75 - 55000;
    sbuf1 = charge_data / 1000;
    sbuf2 = charge_data % 1000;

    for (i = 0; i < 2; i++) {
        ulchar = sbuf1 / (mux_n(1 - i)) % 10 + '0';	                    /*  取出最高位                  */
        UARTCharPut(UART0_BASE, ulchar);
	 							                                        /*  下面四条语句是将最高位消除,
                                                                            为下次再取一个最高位做准备  */
        ulchar = (ulchar - '0');                                                           
        temp1  = (mux_n(1 - i));
        ulchar = ulchar * temp1;
        sbuf1  = sbuf1 - ulchar;
    }

    UARTCharPut(UART0_BASE, '.');                                       /*  打印小数点                  */

    for (i = 0; i < 3; i++) {
        ulchar = sbuf2 / (mux_n(2 - i)) % 10 + '0';                     /*  取出最高位                  */
        UARTCharPut(UART0_BASE, ulchar);
                                                                        /*  下面四条语句是将最高位消除,
                                                                            为下次再取一个最高位做准备  */
        ulchar = (ulchar - '0');                  
        temp2  = (mux_n(2 - i));
        ulchar = ulchar * temp2;
        sbuf2  = sbuf2 - ulchar;
    }
    UARTSend(tempunint, sizeof(tempunint));                             /*  发送温度单位文字            */	
    UARTCharPut(UART0_BASE, '\r');                                      /*  换行                        */
    UARTCharPut(UART0_BASE, '\n');                                      /*  光标回到起始位置            */
}

/*********************************************************************************************************
** Function name:      Send_ADC_Data
** Descriptions:       通过超级终端发送采样数据
** input parameters:   无
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
void Send_ADC_Data(void)
{
    uint16 temp;

    UARTSend(g_channel0, sizeof(g_channel0));                           /*  发送通道0采样提示           */
    Data_ASICC(Charge_Val[0]);                                          /*  发送通道0采样电压           */								
    
    UARTSend(g_channel1, sizeof(g_channel1));                           /*  发送通道1采样提示           */
    Data_ASICC(Charge_Val[1]);                                          /*  发送通道1采样电压           */
    
    UARTSend(g_channel2, sizeof(g_channel2));                           /*  发送内部温度采样提示        */
    Data_ASICC(Charge_Val[2]);	                                        /*  发送内部温度测量到的电压    */
    temp=Charge_Val[2];                              
    
    UARTSend(g_channel3, sizeof(g_channel3));        
    Get_temp(temp);                                                     /*  把电压转换成温度发送        */
  
    flag_ADC_finish = 0;                                                /*  清采样完成标志位            */
    UARTCharPut(UART0_BASE, '\r');                                      /*  换行                        */
    UARTCharPut(UART0_BASE, '\n');                                      /*  光标回到起始位置            */
    delay(500000);
}

/*********************************************************************************************************
** Function name:      main
** Descriptions:       通过串口USRT0对A/D的采样电压进行测试,串口调试软件建议使用Windows自带的超级终端。
** input parameters:   无
** output parameters:  无
** Returned value:     无   
*********************************************************************************************************/
int main(void)
{
    ADC_Init();                                                         /*  初始化ADC,对ADC0和ADC1进行
                                                                            采样                        */
    usart_init();                                                       /*  初始化串口,使用COM1,配置UART
                                                                            为 9600波特率, 8-N-1模式发
                                                                            送数据                      */
    Led_init();
    delay(3000);                                                        /*  延时一段时间                */
    while(1) {
	    Test_ADC(300000);
        if (flag_ADC_finish) {
            GPIOPinWrite(GPIO_PORTA_BASE, PA4, ~PA4);                   /*  点亮LED                     */
            GPIOPinWrite(GPIO_PORTA_BASE, PA5, ~PA5);
            Send_ADC_Data();
        }
        GPIOPinWrite(GPIO_PORTA_BASE, PA4, PA4);                        /*  熄灭LED                     */
        GPIOPinWrite(GPIO_PORTA_BASE, PA5, PA5);
        delay(100000);
    }
    /*  return 0;  */
}

/*********************************************************************************************************
 END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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