欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

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

    • 资源ID:6198461       资源大小:55.52KB        全文页数:10页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    ./*程序功能:用DS18B20 测量室温并在数码管上显示。-测试说明:观察显示温度数值。*/#include <msp430x14x.h>#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,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 = 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;/关闭电平转换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();/ 不停地转换显示/*函数名称: 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 = (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(temper&BIT1)dN1 += 5;dN2 += 2;dN3 += 1;if(temper & BIT2)dN2 += 5;dN3 += 2;if(dN2 >= 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(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 -= 10;/ /*18b20.C*/ #include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned intuint;#define DQ1 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);/ 等待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_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);/ 延时 6usif(wdata & 0X01)DQ1;elseDQ0;wdata >>= 1;DelayNus(50);/ 延时 50usDQ1;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);/ 延时 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(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();/ 读低位temp = Read_18B20();/ 读高位temp = (temp<<8) | temp_low;returntemp;/读取的温度数值/*函数名称: ReadTemp功能:控制DS18B20 完成一次温度转换参数:无返回值:测量的温度数值*/uint Do1Convert(void)uchar i;doi = Init_18B20();while(i);/初始化是否完成Skip();/ 送跳过读取产品ID 号命令Convert();/发送温度转换命令for(i = 20;i > 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);.

    注意事项

    本文(基于msp430温度数码管显示.docx)为本站会员(罗晋)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开