根据msp430温度数码管显示Word文档下载推荐.docx

上传人:b****6 文档编号:17518206 上传时间:2022-12-07 格式:DOCX 页数:14 大小:16.81KB
下载 相关 举报
根据msp430温度数码管显示Word文档下载推荐.docx_第1页
第1页 / 共14页
根据msp430温度数码管显示Word文档下载推荐.docx_第2页
第2页 / 共14页
根据msp430温度数码管显示Word文档下载推荐.docx_第3页
第3页 / 共14页
根据msp430温度数码管显示Word文档下载推荐.docx_第4页
第4页 / 共14页
根据msp430温度数码管显示Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

根据msp430温度数码管显示Word文档下载推荐.docx

《根据msp430温度数码管显示Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《根据msp430温度数码管显示Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

根据msp430温度数码管显示Word文档下载推荐.docx

{

/*下面六行程序关闭所有的IO口*/

P5DIR=0xff;

P5OUT=0xff;

P1DIR=0XFF;

P1OUT=0XFF;

P2DIR=0XFF;

P2OUT=0XFF;

P3DIR=0XFF;

P3OUT=0XFF;

P4DIR=0XFF;

P4OUT=0XFF;

P5DIR=0XFF;

P5OUT=0XFF;

P6DIR=0XFF;

P6OUT=0XFF;

uchari;

WDTCTL=WDTPW+WDTHOLD;

/*------选择系统主时钟为8MHz-------*/

BCSCTL1&

=~XT2OFF;

//打开XT2高频晶体振荡器

do

{

IFG1&

=~OFIFG;

//清除晶振失败标志

for(i=0xFF;

i>

0;

i--);

//等待8MHz晶体起振

}

while((IFG1&

OFIFG));

//晶振失效标志仍然存在?

BCSCTL2|=SELM_2+SELS;

//MCLK和SMCLK选择高频晶振

P6DIR|=BIT6;

P6OUT|=BIT6;

//关闭电平转换

P5DIR|=BIT5;

P5OUT|=BIT5;

P6DIR|=BIT7;

P6OUT|=BIT7;

//关闭蜂鸣器

//设置看门狗定时器,初始化控制数码管的IO

WDTCTL=WDT_ADLY_1_9;

IE1|=WDTIE;

//P4DIR=0xff;

//P5DIR=0xFF;

//P5OUT=0xff;

//P4OUT=0xff;

//P6DIR=0xff;

//P6OUT=0xFF;

//计数时钟选择SMLK=8MHz,1/8分频后为1MHz

TACTL|=TASSEL_2+ID_3;

//打开全局中断

_EINT();

//循环读数显示

while

(1)

Disp_Numb(Do1Convert());

//不停地转换显示

}

/*******************************************

函数名称:

watchdog_timer

功能:

看门狗定时器中断服务函数,进行数码

管动态扫描

参数:

返回值:

********************************************/

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

{

//P4OUT=0xFF;

//wei_h;

//wei_l;

P4OUT=scandata[dN[5-cnt]];

if(cnt==1)P4OUT|=BIT7;

//在第二位显示小数点

duan_h;

duan_l;

P4OUT=~(1<

<

cnt);

wei_h;

wei_l;

cnt++;

if(cnt==6)cnt=0;

Disp_Numb

将从DS18B20读取的11bit温度数据转换

成数码管显示的温度数字

temper--11bit温度数据

voidDisp_Numb(uinttemper)

for(i=0;

i<

6;

i++)dN[i]=0;

//初始化显示变量

//数值转换

if(temper&

BIT0)

dN[0]=5;

dN[1]=2;

dN[2]=6;

if(temper&

BIT1)

dN[1]+=5;

dN[2]+=2;

dN[3]+=1;

BIT2)

dN[2]+=5;

dN[3]+=2;

if(dN[2]>

=10)

dN[2]-=10;

BIT3)

dN[3]+=5;

BIT4)

dN[4]+=1;

BIT5)

dN[4]+=2;

BIT6)

dN[4]+=4;

BIT7)

dN[4]+=8;

if(dN[4]>

dN[4]-=10;

dN[5]+=1;

BIT8)

dN[4]+=6;

BIT9)

dN[5]+=3;

BITA)

dN[5]+=6;

if(dN[5]>

dN[5]-=10;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////**********18b20.C******************/////////////////////////////////////////

typedefunsignedcharuchar;

typedefunsignedintuint;

#defineDQ1P1OUT|=BIT6

#defineDQ0P1OUT&

#defineDQ_inP1DIR&

#defineDQ_outP1DIR|=BIT6

#defineDQ_val(P1IN&

DelayNus

实现N个微秒的延时

n--延时长度

说明:

定时器A的计数时钟是1MHz,CPU主频8MHz

所以通过定时器延时能够得到极为精确的

us级延时

voidDelayNus(uintn)

CCR0=n;

TACTL|=MC_1;

//增计数到CCR0

while(!

(TACTL&

BIT0));

//等待

TACTL&

=~MC_1;

//停止计数

=~BIT0;

//清除中断标志

Init_18B20

对DS18B20进行复位操作

初始化状态标志:

1--失败,0--成功

ucharInit_18B20(void)

ucharError;

DQ_out;

//拉高

_DINT();

//关闭中断

DQ0;

//拉低

DelayNus(500);

DQ1;

DelayNus(55);

DQ_in;

//方向设置输入

_NOP();

if(DQ_val)//输入值为1

Error=1;

//初始化失败

else//输入值为0

Error=0;

//初始化成功

//设为输出

//中断使能

DelayNus(400);

returnError;

Write_18B20

向DS18B20写入一个字节的数据

wdata--写入的数据

voidWrite_18B20(ucharwdata)

i<

8;

i++)

DelayNus(6);

//延时6us

if(wdata&

0X01)DQ1;

elseDQ0;

wdata>

>

=1;

DelayNus(50);

//延时50us

DelayNus(10);

//延时10us

Read_18B20

从DS18B20读取一个字节的数据

读出的一个字节数据

ucharRead_18B20(void)

uchartemp=0;

temp>

DelayNus(8);

//延时9us

if(DQ_val)temp|=0x80;

DelayNus(45);

//延时45us

returntemp;

//读到的一个字节

Skip

发送跳过读取产品ID号命令

voidSkip(void)

Write_18B20(0xcc);

Convert

发送温度转换命令

voidConvert(void)

Write_18B20(0x44);

Read_SP

发送读ScratchPad命令

voidRead_SP(void)

Write_18B20(0xbe);

ReadTemp

从DS18B20的ScratchPad读取温度转换结果

读取的温度数值

uintReadTemp(void)

uchartemp_low;

uinttemp;

temp_low=Read_18B20();

//读低位

temp=Read_18B20();

//读高位

temp=(temp<

8)|temp_low;

//读取的温度数值

控制DS18B20完成一次温度转换

测量的温度数值

uintDo1Convert(void)

i=Init_18B20();

while(i);

//初始化是否完成

Skip();

//送跳过读取产品ID号命令

Convert();

//发送温度转换命令

for(i=20;

i>

i--)

DelayNus(60000);

//延时800ms以上

Read_SP();

//发送读ScratchPad命令

returnReadTemp();

////////////////**********************************************///////////////////

/***************18b20.h***************************/

voidDelayNus(unsignedintn);

unsignedcharInit_18B20(void);

voidWrite_18B20(unsignedcharwdata);

unsignedcharRead_18B20(void);

voidSkip(void);

voidConvert(void);

voidRead_SP(void);

unsignedintReadTemp(void);

unsignedintDo1Convert(void);

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1