基于msp430温度数码管显示

上传人:p** 文档编号:45972243 上传时间:2021-12-09 格式:DOC 页数:10 大小:34.50KB
收藏 版权申诉 举报 下载
基于msp430温度数码管显示_第1页
第1页 / 共10页
基于msp430温度数码管显示_第2页
第2页 / 共10页
基于msp430温度数码管显示_第3页
第3页 / 共10页
资源描述:

《基于msp430温度数码管显示》由会员分享,可在线阅读,更多相关《基于msp430温度数码管显示(10页珍藏版)》请在装配图网上搜索。

1、/*程序功能:用DS18B20测量室温并在数码管上显示。-测试说明:观察显示温度数值。*/#include msp430x14x.h>#include "DS18B20.h”include "DS18B20。c"#define wei_h P5OUT= BIT5#define wei_l P5OUT&= BIT5#define duan_l P6OUT = BIT6define duan_h P6OUT |= BIT6/要显示的6位温度数字uchar dN6; /数码管七段码;0-fuchar scandata16 = 0x3f,0x06,0x5b,

2、0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/数码管位选变量uchar cnt = 0; void Disp_Numb(uint temper);/*主函数*/void main(void) /下面六行程序关闭所有的IO口/ P5DIR = 0xff; P5OUT = 0xff;P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR =

3、0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; uchar i; 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 |=

4、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; /打开全局中断

5、_EINT(); /循环读数显示 while(1) Disp_Numb(Do1Convert(); /不停地转换显示 /*函数名称:watchdog_timer功 能:看门狗定时器中断服务函数,进行数码 管动态扫描参 数:无返回值 :无*/#pragma vector = WDT_VECTOR_interrupt void watchdog_timer(void) / P4OUT = 0xFF; / wei_h; / wei_l; P4OUT = scandatadN5cnt; if(cnt=1) P4OUT = BIT7; /在第二位显示小数点 duan_h; duan_l; P4OUT =

6、 (1<cnt); wei_h; wei_l; cnt+; if(cnt = 6) cnt = 0; /*函数名称:Disp_Numb功 能:将从DS18B20读取的11bit温度数据转换 成数码管显示的温度数字参 数:temper-11bit温度数据返回值 :无*/void Disp_Numb(uint temper) uchar i; for(i = 0;i < 6;i+) dNi = 0; /初始化显示变量 /数值转换 if(temper BIT0) dN0 = 5; dN1 = 2; dN2 = 6; if(temperBIT1) dN1 += 5; dN2 += 2; d

7、N3 += 1; if(temper & BIT2) dN2 += 5; dN3 += 2; if(dN2 >= 10) dN2 = 10; dN3 += 1; if(temperBIT3) dN3 += 5; if(temper BIT4) dN4 += 1; if(temper & BIT5) dN4 += 2; if(temper BIT6) dN4 += 4; if(temper BIT7) dN4 += 8; if(dN4 = 10) dN4 = 10; dN5 += 1; if(temper BIT8) dN4 += 6; dN5 += 1; if(dN4 =

8、 10) dN4 = 10; dN5 += 1; if(temper & BIT9) dN4 += 2; dN5 += 3; if(dN4 >= 10) dN4 = 10; dN5 += 1; if(temper & BITA) dN4 += 4; dN5 += 6; if(dN4 >= 10) dN4 -= 10; dN5 += 1; if(dN5 = 10) dN5 -= 10; /*18b20。C*/#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uin

9、t;define DQ1 P1OUT = BIT6define DQ0 P1OUT &= BIT6define DQ_in P1DIR = BIT6define DQ_out P1DIR = BIT6#define DQ_val (P1IN & BIT6)/*函数名称:DelayNus功 能:实现N个微秒的延时参 数:n-延时长度返回值 :无说明 :定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精确的 us级延时*/void DelayNus(uint n) CCR0 = n; TACTL = MC_1; /增计数到CCR0 while(!(T

10、ACTL & BIT0); /等待 TACTL &= MC_1; /停止计数 TACTL &= BIT0; /清除中断标志/*函数名称:Init_18B20功 能:对DS18B20进行复位操作参 数:无返回值 :初始化状态标志:1-失败,0-成功*/uchar Init_18B20(void) uchar Error; DQ_out; /拉高 _DINT(); /关闭中断 DQ0; /拉低 DelayNus(500); DQ1; /拉高 DelayNus(55); DQ_in; /方向设置输入 _NOP(); if(DQ_val) /输入值为1 Error = 1; /

11、初始化失败 else /输入值为0 Error = 0; /初始化成功 DQ_out; /设为输出 DQ1; /拉高 _EINT(); /中断使能 DelayNus(400); return Error;/*函数名称:Write_18B20功 能:向DS18B20写入一个字节的数据参 数:wdata-写入的数据返回值 :无*/void Write_18B20(uchar wdata) uchar i; _DINT(); for(i = 0; i < 8;i+) DQ0; DelayNus(6); /延时6us if(wdata 0X01) DQ1; else DQ0; wdata >

12、;= 1; DelayNus(50); /延时50us DQ1; DelayNus(10); /延时10us _EINT();/*函数名称:Read_18B20功 能:从DS18B20读取一个字节的数据参 数:无返回值 :读出的一个字节数据*/uchar Read_18B20(void) uchar i; uchar temp = 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 = 0x

13、80; DelayNus(45); /延时45us DQ_out; DQ1; DelayNus(10); /延时10us _EINT(); return temp; /读到的一个字节/*函数名称:Skip功 能:发送跳过读取产品ID号命令参 数:无返回值 :无*/void Skip(void) Write_18B20(0xcc);/*函数名称:Convert功 能:发送温度转换命令参 数:无返回值 :无*/void Convert(void) Write_18B20(0x44);/*函数名称:Read_SP功 能:发送读ScratchPad命令参 数:无返回值 :无*/void Read_SP

14、(void) Write_18B20(0xbe);/*函数名称:ReadTemp功 能:从DS18B20的ScratchPad读取温度转换结果参 数:无返回值 :读取的温度数值*/uint ReadTemp(void) uchar temp_low; uint temp; temp_low = Read_18B20(); /读低位 temp = Read_18B20(); /读高位 temp = (temp<<8) temp_low; return temp; /读取的温度数值/*函数名称:ReadTemp功 能:控制DS18B20完成一次温度转换参 数:无返回值 :测量的温度数值

15、*/uint Do1Convert(void) uchar i; 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命令 return ReadTemp(); /读取的温度数值/*/*18b20.h*/void DelayNus(unsigned int n);unsigned char Init_18B20(void);void Write_18B20(unsigned char wdata);unsigned char Read_18B20(void);void Skip(void);void Convert(void);void Read_SP(void);unsigned int ReadTemp(void);unsigned int Do1Convert(void);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!