基于msp430温度数码管显示.docx
- 文档编号:26522726
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:16
- 大小:17KB
基于msp430温度数码管显示.docx
《基于msp430温度数码管显示.docx》由会员分享,可在线阅读,更多相关《基于msp430温度数码管显示.docx(16页珍藏版)》请在冰豆网上搜索。
基于msp430温度数码管显示
/*************************************************
程序功能:
用DS18B20测量室温并在数码管上显示。
-------------------------------------------------
测试说明:
观察显示温度数值。
*************************************************/
#include
#include"DS18B20.h"
#include"DS18B20.c"
#definewei_hP5OUT|=BIT5
#definewei_lP5OUT&=~BIT5
#defineduan_lP6OUT&=~BIT6
#defineduan_hP6OUT|=BIT6
//要显示的6位温度数字
uchardN[6];
//数码管七段码;0--f
ucharscandata[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//数码管位选变量
ucharcnt=0;
voidDisp_Numb(uinttemper);
/****************主函数****************/
voidmain(void)
{
/*下面六行程序关闭所有的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< wei_h; wei_l; cnt++; if(cnt==6)cnt=0; } /******************************************* 函数名称: Disp_Numb 功能: 将从DS18B20读取的11bit温度数据转换 成数码管显示的温度数字 参数: temper--11bit温度数据 返回值: 无 ********************************************/ voidDisp_Numb(uinttemper) { uchari; 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; } if(temper&BIT2) { dN[2]+=5; dN[3]+=2; if(dN[2]>=10) { dN[2]-=10; dN[3]+=1; } } if(temper&BIT3) { dN[3]+=5; } if(temper&BIT4) { dN[4]+=1; } if(temper&BIT5) { dN[4]+=2; } if(temper&BIT6) { dN[4]+=4; } if(temper&BIT7) { dN[4]+=8; if(dN[4]>=10) { dN[4]-=10; dN[5]+=1; } } if(temper&BIT8) { dN[4]+=6; dN[5]+=1; if(dN[4]>=10) { dN[4]-=10; dN[5]+=1; } } if(temper&BIT9) { dN[4]+=2; dN[5]+=3; if(dN[4]>=10) { dN[4]-=10; dN[5]+=1; } } if(temper&BITA) { dN[4]+=4; dN[5]+=6; if(dN[4]>=10) { dN[4]-=10; dN[5]+=1; } if(dN[5]>=10) { dN[5]-=10; } } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////**********18b20.C******************///////////////////////////////////////// #include typedefunsignedcharuchar; typedefunsignedintuint; #defineDQ1P1OUT|=BIT6 #defineDQ0P1OUT&=~BIT6 #defineDQ_inP1DIR&=~BIT6 #defineDQ_outP1DIR|=BIT6 #defineDQ_val(P1IN&BIT6) /******************************************* 函数名称: DelayNus 功能: 实现N个微秒的延时 参数: n--延时长度 返回值: 无 说明: 定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精确的 us级延时 ********************************************/ voidDelayNus(uintn) { CCR0=n; TACTL|=MC_1;//增计数到CCR0 while(! (TACTL&BIT0));//等待 TACTL&=~MC_1;//停止计数 TACTL&=~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;//初始化成功 } DQ_out;//设为输出 DQ1;//拉高 _EINT();//中断使能 DelayNus(400); returnError; } /******************************************* 函数名称: Write_18B20 功能: 向DS18B20写入一个字节的数据 参数: wdata--写入的数据 返回值: 无 ********************************************/ voidWrite_18B20(ucharwdata) { uchari; _DINT(); for(i=0;i<8;i++) { DQ0; DelayNus(6);//延时6us if(wdata&0X01)DQ1; elseDQ0; wdata>>=1; DelayNus(50);//延时50us DQ1; DelayNus(10);//延时10us } _EINT(); } /******************************************* 函数名称: Read_18B20 功能: 从DS18B20读取一个字节的数据 参数: 无 返回值: 读出的一个字节数据 ********************************************/ ucharRead_18B20(void) { uchari; uchartemp=0; _DINT(); for(i=0;i<8;i++) { temp>>=1; DQ0; DelayNus(6);//延时6us DQ1; DelayNus(8);//延时9us DQ_in; _NOP(); if(DQ_val)temp|=0x80; DelayNus(45);//延时45us DQ_out; DQ1; DelayNus(10);//延时10us } _EINT(); 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; returntemp;//读取的温度数值 } /******************************************* 函数名称: ReadTemp 功能: 控制DS18B20完成一次温度转换 参数: 无 返回值: 测量的温度数值 ********************************************/ uintDo1Convert(void) { uchari; do { i=Init_18B20(); } while(i);//初始化是否完成 Skip();//送跳过读取产品ID号命令 Convert();//发送温度转换命令 for(i=20;i>0;i--) DelayNus(60000);//延时800ms以上 do { i=Init_18B20(); } while(i); Skip(); 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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 msp430 温度 数码管 显示