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

📄 iar-

📁 IAR_example_EasyARM8962.zip
💻
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               lm75uart.c
** Last modified Date:      2007.09.22 
** Last Version:            v1.0
** Description:             Stellaris系列单片机I2C实现数字温度计
** 
**--------------------------------------------------------------------------------------------------------
** Created By:              Ni Likao 倪力考
** Created date:            2007.9.03 
** Version:                 v1.0
** Descriptions:            该示例程序演示了I2C通信实现对温度数据的读取及处理,数据结果送往上位机显示.
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             Kang qinhua
** Modified date:           2008.01.13
** Version:                 v1.1
** Description:
**
*********************************************************************************************************/
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "interrupt.h"
#include "sysctl.h"
#include "uart.h"
#include "I2CINT.H"
#include "uart.h"

#ifndef uchar 
#define uchar  unsigned char
#endif

/*********************************************************************************************************
  I2C引脚的定义
*********************************************************************************************************/
#define SDA      GPIO_PIN_3                                             /*  模拟I2C数据传送位           */
#define SCL      GPIO_PIN_2                                             /*  模拟I2C时钟控制位           */
#define TXD_LED  GPIO_PIN_6

/*********************************************************************************************************
** Function name:           ReadData	   
** Descriptions:            该函数实现MCU对LM75A温度的读取,并做一些简单的数据处理
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
** Created by:				Ni Likao 倪力考
** Created Date:			2007.9.03
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

int ReadData (void)
{
    uchar ucLM75A = 0X90;                                               /*  lm75A器件地址               */    
    uchar ucLM75ATEMP = 0x00;                                           /*  温度寄存器地址              */
    uchar ucbuf[2] = {0};                                               /*  数据缓冲区                  */
    int   iTemp = 0;                                                    /*  温度数据                    */
    IRcvStr(ucLM75A, ucLM75ATEMP, 1, ucbuf, 2);                         /*  读温度数据                  */ 
    iTemp = ucbuf[0];
    iTemp <<= 8;
    iTemp += ucbuf[1];
    return (iTemp);
}

/*********************************************************************************************************
** Function name:           main	   
** Descriptions:            该范例程序演示了如何使用I2C功能读取LM75A的温度数据,通过数据处理,
**                          将数据回送到上位机显示,温度每变化一次,LED会改变状态一次,再向上位                    
**                          机发送一次数据.
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
** Created by:				Ni Likao 倪力考
** Created Date:			2007.9.03
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

int main(void)
{
    int   __iTemp = 0;                                                  /*  温度数据                    */
    int   iFlag = 0;                                                    /*  温度符号                    */
    int   iTempFIFO = 0;                                                /*  温度保存单元                */
    uchar ucTempint = 0;                                                /*  温度整数部分                */
    uchar ucTempdec = 0;                                                /*  温度小数部分                */
    uchar ucIntdisph = 0;                                               /*  高位整数                    */
    uchar ucIntdispm = 0;                                               /*  中位整数                    */
    uchar ucIntdispl = 0;                                               /*  低位整数                    */                                                    
    uchar ucDecdisp1 = 0;                                               /*  小数位                      */
    uchar ucDecdisp2 = 0;                                               /*  小数位                      */
    uchar ucDecdisp3 = 0;                                               /*  小数位                      */
    uchar ucflagdisp = 0;                                               /*  符号位                      */  
    uchar ucTempdata[8] = {0};                                                                            
    uchar i;
    
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_6MHZ);                                   /*  设置系统时钟                */    
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);                        /*  使能I2C外设                 */
    GPIOPinTypeI2C(GPIO_PORTB_BASE, SCL | SDA);
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    GPIOPadConfigSet(GPIO_PORTB_BASE, TXD_LED, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
    GPIODirModeSet(GPIO_PORTB_BASE, TXD_LED, GPIO_DIR_MODE_OUT);
    GPIOPinWrite(GPIO_PORTB_BASE, TXD_LED, 0);       
                                                
    UARTConfigSet(UART0_BASE, 9600, (UART_CONFIG_WLEN_8 |
                                     UART_CONFIG_STOP_ONE |
                                     UART_CONFIG_PAR_NONE));               
                                                                        /*  配置UART的波特率及串口参数  */                              
    I2CInit(100000, 1);                                                 /*  初始化I2C驱动               */
    while (1) {
        __iTemp = ReadData();                                           /*  读温度                      */  
        iFlag = __iTemp&0X8000;                                         /*  取符号位                    */  
        /*
         *  温度数据计算  
         */
        if (!iFlag) {                                                   /*  符号位判断                  */
    
            ucflagdisp = '+';
            ucTempint = (uchar)((__iTemp >> 8) & 0x007F);               /*  取整数位                    */                          
            ucTempdec = (uchar)((__iTemp >> 5) & 0x0007);               /*  取小数位                    */
        } else {
            ucflagdisp = '-';
            ucTempint = (uchar)((((~(__iTemp >> 5)) + 1) >> 3) & 0x00FF);
                                                                        /*  取整数位                    */                          
            ucTempdec = (uchar)((~(__iTemp >> 5) + 1) & 0x0007);        /*  取小数位                    */
        }
        ucIntdisph = ucTempint / 100;                                   /*  取高位整数                  */
        ucIntdispm = ucTempint / 10 % 10;                               /*  取中位整数                  */
        ucIntdispl = ucTempint % 10;                                    /*  取低位整数                  */
        
        /*                                                              
         *  取小数位  
         */
        switch (ucTempdec) {          
        case 7 :
            ucDecdisp1 = 0x08;
            ucDecdisp2 = 0x07;
            ucDecdisp3 = 0x05;
            break;
        case 6 :
            ucDecdisp1 = 0x07;
            ucDecdisp2 = 0x05;
            ucDecdisp3 = 0x00;
            break;
        case 5 :
            ucDecdisp1 = 0x06;
            ucDecdisp2 = 0x02;
            ucDecdisp3 = 0x05;
            break;
        case 4 :
            ucDecdisp1 = 0x05;
            ucDecdisp2 = 0x00;
            ucDecdisp3 = 0x00;
            break;
        case 3 :
            ucDecdisp1 = 0x03;
            ucDecdisp2 = 0x07;
            ucDecdisp3 = 0x05;
            break;
        case 2 :
            ucDecdisp1 = 0x02;
            ucDecdisp2 = 0x05;
            ucDecdisp3 = 0x00;
            break;
        case 1 :
            ucDecdisp1 = 0x01;
            ucDecdisp2 = 0x02;
            ucDecdisp3 = 0x05;
            break;
        case 0 :
            ucDecdisp1 = 0x00;
            ucDecdisp2 = 0x00;
            ucDecdisp3 = 0x00;
            break;  
        default:
            break;    
        }        
        Delays(1);
        /* 
         *  温度显示
         */
        ucTempdata[0] = ucflagdisp;
        ucTempdata[1] = ucIntdisph + '0';
        ucTempdata[2] = ucIntdispm + '0';
        ucTempdata[3] = ucIntdispl + '0';
        ucTempdata[4] = '.';
        ucTempdata[5] = ucDecdisp1 + '0';
        ucTempdata[6] = ucDecdisp2 + '0';
        ucTempdata[7] = ucDecdisp3 + '0';         
        /*
         *   温度变化一次,数据发送一次,LED改变状态。  
         */
        if (iTempFIFO != __iTemp) {                                     /*  与前一次采集的温度是否一样  */
            iTempFIFO = __iTemp;            
            for (i = 0; i < 8; i++) {        
            UARTCharPut(UART0_BASE, ucTempdata[i]);                     /*  串口发送温度数据            */
            }
            GPIOPinWrite(GPIO_PORTB_BASE, TXD_LED,
                         ~GPIOPinRead(GPIO_PORTB_BASE, TXD_LED));       /*  LED状态改变一次             */
            UARTCharPut(UART0_BASE, '\n');                              /*  换行                        */
            UARTCharPut(UART0_BASE, '\r');                              /*  回车                        */
        }
    }
}

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

⌨️ 快捷键说明

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