基于msp430温度数码管显示.docx

上传人:罗晋 文档编号:6198461 上传时间:2020-09-22 格式:DOCX 页数:10 大小:55.52KB
返回 下载 相关 举报
基于msp430温度数码管显示.docx_第1页
第1页 / 共10页
基于msp430温度数码管显示.docx_第2页
第2页 / 共10页
基于msp430温度数码管显示.docx_第3页
第3页 / 共10页
基于msp430温度数码管显示.docx_第4页
第4页 / 共10页
基于msp430温度数码管显示.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《基于msp430温度数码管显示.docx》由会员分享,可在线阅读,更多相关《基于msp430温度数码管显示.docx(10页珍藏版)》请在三一文库上搜索。

1、./*程序功能:用DS18B20 测量室温并在数码管上显示。-测试说明:观察显示温度数值。*/#include #include DS18B20.h#include DS18B20.c#define wei_h P5OUT|= BIT5#define wei_l P5OUT&= BIT5#define duan_lP6OUT &= BIT6#define duan_hP6OUT |= BIT6/要显示的6 位温度数字uchar dN6;/数码管七段码;0-fuchar scandata16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f

2、,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 = 0XFF;P5OUT = 0XFF;P6DIR = 0XFF;P6OUT

3、= 0XFF;uchar i;WDTCTL=WDTPW+WDTHOLD;/*- 选择系统主时钟为8MHz-*/BCSCTL1 &= XT2OFF;/ 打开 XT2 高频晶体振荡器doIFG1 &= 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;/关闭电平转换

4、P6DIR |= BIT7;P6OUT |= BIT7; /关闭蜂鸣器/ 设置看门狗定时器,初始化控制数码管的IOWDTCTL = WDT_ADLY_1_9;IE1 |= WDTIE;/ P4DIR = 0xff;/ P5DIR = 0xFF;/ P5OUT = 0xff; /P4OUT = 0xff; /P6DIR = 0xff; /P6OUT = 0xFF;/计数时钟选择SMLK=8MHz , 1/8 分频后为1MHzTACTL |= TASSEL_2 + ID_3;/打开全局中断_EINT();/循环读数显示while(1)Disp_Numb(Do1Convert();/ 不停地转换显示

5、/*函数名称: watchdog_timer功能:看门狗定时器中断服务函数,进行数码管动态扫描参数:无返回值:无*/#pragma vector = WDT_VECTOR_interrupt void watchdog_timer(void)/ P4OUT = 0xFF;/ wei_h;/ wei_l;P4OUT = scandatadN5-cnt;.if(cnt=1) P4OUT |= BIT7;/ 在第二位显示小数点duan_h;duan_l;P4OUT = (1cnt);wei_h;wei_l;cnt+;if(cnt = 6) cnt = 0;/*函数名称: Disp_Numb功能:将从

6、DS18B20 读取的 11bit 温度数据转换成数码管显示的温度数字参数: temper-11bit 温度数据返回值:无*/void Disp_Numb(uint temper)uchar i;for(i = 0;i = 10)dN2 -= 10;.dN3 += 1;if(temper&BIT3)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(tem

7、per & BIT8)dN4 += 6;dN5 += 1;if(dN4 = 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 typedef unsigned char uchar;typedef unsigned intuint;#define D

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

9、);/ 等待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)/输入值为1Error = 1;/初始化失败else/输入值为0Error = 0;/初始化成功DQ_ou

10、t;/ 设为输出DQ1;/拉高_EINT();/ 中断使能DelayNus(400);return Error;/*函数名称: Write_18B20功能:向 DS18B20 写入一个字节的数据参数: wdata-写入的数据返回值:无.*/void Write_18B20(uchar wdata)uchar i;_DINT();for(i = 0; i = 1;DelayNus(50);/ 延时 50usDQ1;DelayNus(10);/ 延时 10us_EINT();/*函数名称: Read_18B20功能:从 DS18B20 读取一个字节的数据参数:无返回值:读出的一个字节数据*/uch

11、ar Read_18B20(void)uchar i;uchar temp = 0;_DINT();for(i = 0;i = 1;DQ0;DelayNus(6);/ 延时 6usDQ1;DelayNus(8);/ 延时 9usDQ_in;_NOP();if(DQ_val)temp |= 0x80;DelayNus(45);/ 延时 45usDQ_out;DQ1;.DelayNus(10);/ 延时 10us_EINT();returntemp;/读到的一个字节/*函数名称: Skip功能:发送跳过读取产品ID 号命令参数:无返回值:无*/void Skip(void)Write_18B20(

12、0xcc);/*函数名称: Convert功能:发送温度转换命令参数:无返回值:无*/void Convert(void)Write_18B20(0x44);/*函数名称: Read_SP功能:发送读ScratchPad命令参数:无返回值:无*/void Read_SP(void)Write_18B20(0xbe);/*函数名称: ReadTemp功能:从 DS18B20 的 ScratchPad 读取温度转换结果参数:无返回值:读取的温度数值*/uint ReadTemp(void).uchar temp_low;uinttemp;temp_low = Read_18B20();/ 读低位t

13、emp = Read_18B20();/ 读高位temp = (temp 0;i-)DelayNus(60000); / 延时 800ms 以上doi = 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);.

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1