完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人新手,刚接触msp430 为什么一直显示 35呢?接ds18b20没啥反应
#include "msp430f5529.h" #include "HAL_Dogs102x6.h" #define uchar unsigned char #define uint unsigned int #define DQ BIT4 //P2.4-->DQ #define DQ1 P2OUT |= BIT4 //DS18B20接口为P2.4口 #define DQ0 P2OUT &= ~BIT4 #define DQIN P2DIR &= ~BIT4 #define DQOUT P2DIR |= BIT4 #define READ_DQ (P2IN&DQ)//读DQ电平 uint temp; uchar table1[10] = {'0','1','2','3','4','5','6','7','8','9'}; void delay1(uint a)//延时函数 { for(; a>0; a--) { _NOP(); } } void DS18B20_Init(void) //DS18B20初始化函数 { uchar x; DQOUT; DQ0; //拉低总线 __delay_cycles(4800); //精确延时 大于 480us DQ1; //释放总线 __delay_cycles(480); DQIN; if(READ_DQ) { x =1;//初始化失败 } else { x = 0;//初始化成功 } DQOUT; DQ1; __delay_cycles(3600); } void DS18B20_WriteData(uchar dat) //写一个字节 { uchar i; for(i=0;i<8;i++)//位计数值 { DQ0; //拉低总线产生写信号 __delay_cycles(48); if(dat&0x01) DQ1;//此位数据是否为高,是高则将单总线拉高 else DQ0;//是低则将单总线拉低 dat>>=1; //准备下一位数据的传送 __delay_cycles(400); DQ1; //释放总线,等待总线恢复 __delay_cycles(80); } } uchar DS18B20_ReadData(void) //读一个字节 { uchar i; uchar dat=0; for(i=0;i<8;i++)//位计数值 { dat>>=1;//右移,准备接受新的数据位 DQ0; //拉低总线产生读信号 __delay_cycles(48); DQ1; //释放总线准备读数据 __delay_cycles(72);//等待5微秒 DQIN;//配置为输入,开始读取数据位 _NOP(); if(READ_DQ)//该位是否为高 { dat|=0x80;//是就将此位置高 } __delay_cycles(400);//等待50微秒 DQOUT; DQ1; __delay_cycles(80); } return(dat);//将读到的一个字节返回 } uint Read_Temp(void) //读取温度 { uint temp_low,temp_high,d; float c; DS18B20_Init();//初始化,每次写命令都从初始化开始 DS18B20_WriteData(0xcc); //跳过ROM命令 DS18B20_WriteData(0x44); //温度转换命令 DS18B20_Init();//初始化,每次写命令都从初始化开始 DS18B20_WriteData(0xcc); //跳过ROM命令 DS18B20_WriteData(0xbe); // temp_low=DS18B20_ReadData();//读温度低字节 temp_high=DS18B20_ReadData(); //读温度高字节 temp_high<<=8; d=temp_high|temp_low; c=d*0.0625; d=(uint)(c*100); return(d); //返回16位变量 } int main(void) { WDTCTL = WDTPW + WDTHOLD;//停止看门狗 uint8_t contrast = *((unsigned char *)contrastSetpointAddress); //读取FLASH中对比度值 uint8_t brightness = *((unsigned char *)brightnessSetpointAddress); //读取FLASH中背光值 Dogs102x6_init(); Dogs102x6_backlightinit(); //Dogs102x6_disable(); __enable_interrupt(); Dogs102x6_setBacklight(11); //设置初始背光值 Dogs102x6_setContrast(11); //设置初始对比度值 Dogs102x6_clearScreen(); //清屏 // BCSCTL1 = CALBC1_8MHZ;//MCLK为DCO,8MHZ // DCOCTL = CALDCO_8MHZ; // P1DIR |=BIT0; TA0CCR0 = 5000; TA0CCTL0 = CCIE; TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR //return 0; __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts __no_operation(); } #pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) { temp=Read_Temp(); // delay1(1000); Dogs102x6_charDraw(2,18,table1[temp/10%10],0); Dogs102x6_charDraw(2,24,table1[ temp%10],0); // Dogs102x6_charDraw(2,30,table1[ temp/100],0); } |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
2938个成员聚集在这个小组
加入小组2682 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3005 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2274 浏览 1 评论
4704 浏览 1 评论
2485 浏览 1 评论
952浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3005浏览 2评论
2682浏览 1评论
1083浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 16:17 , Processed in 1.912585 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号