完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
众所周知:目前在市面的一些传感器,一般是引脚是(VCC,GND,DO,AO)还有的是(VCC GND,OUT)这些类型的,其中OUT类一般都是用来输出的,今天中在4个引脚的传感器: 大家应该都知道DO:数字量,AO:模拟量,所以有有两种方式去读引脚的值,我个人认为用DO是最简单的一种方式,这一期附上的代码是用ADC转换的也就是AO模拟量的方式: #include "ioCC2530.h" #include "string.h" typedef unsigned char uchar; typedef unsigned int uint; typedef signed short int16; typedef unsigned short uint16; char TxBuf[5]; uint16 GasData; uint16 ReadGasData( void ); /**************************************************************************** * 名 称: InitUart() * 功 能: 串口初始化函数 * 入口参数: 无 * 出口参数: 无 ****************************************************************************/ void InitUart(void) { PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1 P0SEL = 0x0c; //P0_2,P0_3用作串口(外设功能) P2DIR &= ~0XC0; //P0优先作为UART0 U0CSR |= 0x80; //设置为UART方式 U0GCR |= 8; U0BAUD |= 59; //波特率设为9600 UTX0IF = 0; //UART0 TX中断标志初始置位0 } /**************************************************************************** * 名 称: UartSendString() * 功 能: 串口发送函数 * 入口参数: Data:发送缓冲区 len:发送长度 * 出口参数: 无 ****************************************************************************/ void UartSendString(char *Data, int len) { uint i; for(i=0; i U0DBUF = *Data++; while(UTX0IF == 0); UTX0IF = 0; } } /**************************************************************************** * 名 称: DelayMS() * 功 能: 以毫秒为单位延时 16M时约为535,32M时要调整,系统时钟不修改默认为16M * 入口参数: msec 延时参数,值越大延时越久 * 出口参数: 无 ****************************************************************************/ void DelayMS(uint msec) { uint i,j; for (i=0; i } /*********************************************************************************************************************************************** 传感器的接法: VCC-3.3v或5V GND-GND AO-P06 */ uint16 ReadGasData( void ) { uint16 reading = 0; /* Enable channel */ ADCCFG |= 0x40; /* writing to this register starts the extra conversion */ ADCCON3 = 0x86;// AVDD5 引脚 00: 64 抽取率(7 位ENOB) 0110: AIN6 /* Wait for the conversion to be done */ while (!(ADCCON1 & 0x80)); /* Disable channel after done conversion */ ADCCFG &= (0x40 ^ 0xFF); //按位异或。如1010^1111=0101(二进制) /* Read the result */ reading = ADCL; reading |= (int16) (ADCH << 8); reading >>= 8; return (reading); } void main(void) { CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定为32M CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ InitUart(); //调置串口相关寄存器 while(1) { GasData = ReadGasData(); //读取烟雾传感器引脚上的ad转换值,并没有换算成能表示烟雾浓度的值 //演示如何使用2530芯片的AD功能,更具体在组网中给出 //读取到的数值转换成字符串,供串口函数输出 UartSendString("moniliang :rn",sizeof("moniliang :rn")); TxBuf[0] = GasData / 100 + '0'; TxBuf[1] = GasData / 10%10 + '0'; TxBuf[2] = GasData % 10 + '0'; TxBuf[3] = 'r'; TxBuf[4] = 'n'; UartSendString(TxBuf, 5); //想串口助手送出数据,波特率是115200 DelayMS(2000); //延时函数 } } 串口输出的值为: |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:06 , Processed in 1.181218 second(s), Total 81, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号