ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17KB ,
资源ID:24732704      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24732704.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于msp430温度数码管显示.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

3、 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 |= BIT6; /关闭电平转换 P5DIR |=

4、 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(); /循环读数显示 wh

5、ile(1) Disp_Numb(Do1Convert(); /不停地转换显示 /*函数名称: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; w

6、ei_l; cnt+; if(cnt = 6) cnt = 0; /*函数名称:Disp_Numb功 能:将从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

7、; if(temper & BIT7) dN4 += 8; if(dN4 = 10) dN4 -= 10; dN5 += 1; if(temper & 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 -=

8、10; /*18b20.C*/#include typedef unsigned char uchar;typedef unsigned int uint;#define DQ1 P1OUT |= BIT6#define DQ0 P1OUT &= BIT6#define DQ_in P1DIR &= BIT6#define DQ_out P1DIR |= BIT6#define DQ_val (P1IN & BIT6)/*函数名称:DelayNus功 能:实现N个微秒的延时参 数:n-延时长度返回值 :无说明 :定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精

9、确的 us级延时*/void DelayNus(uint n) CCR0 = n; TACTL |= MC_1; /增计数到CCR0 while(!(TACTL & BIT0); /等待 TACTL &= MC_1; /停止计数 TACTL &= BIT0; /清除中断标志/*函数名称:Init_18B20功 能:对DS18B20进行复位操作参 数:无返回值 :初始化状态标志:1-失败,0-成功*/uchar Init_18B20(void) uchar Error; DQ_out; /拉高 _DINT(); /关闭中断 DQ0; /拉低 DelayNus(500); DQ1; /拉高 Del

10、ayNus(55); DQ_in; /方向设置输入 _NOP(); if(DQ_val) /输入值为1 Error = 1; /初始化失败 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 = 1; DelayN

11、us(50); /延时50us DQ1; DelayNus(10); /延时10us _EINT();/*函数名称:Read_18B20功 能:从DS18B20读取一个字节的数据参 数:无返回值 :读出的一个字节数据*/uchar Read_18B20(void) uchar i; uchar temp = 0; _DINT(); for(i = 0;i = 1; DQ0; DelayNus(6); /延时6us DQ1; DelayNus(8); /延时9us DQ_in; _NOP(); if(DQ_val) temp |= 0x80; DelayNus(45); /延时45us DQ_o

12、ut; 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(void) Write_18B20(0xbe);/*函数名

13、称:ReadTemp功 能:从DS18B20的ScratchPad读取温度转换结果参 数:无返回值 :读取的温度数值*/uint ReadTemp(void) uchar temp_low; uint temp; temp_low = Read_18B20(); /读低位 temp = Read_18B20(); /读高位 temp = (temp 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);

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

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