📄 iar-
字号:
/****************************************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 + -