基于msp430温度数码管显示_第1页
基于msp430温度数码管显示_第2页
基于msp430温度数码管显示_第3页
基于msp430温度数码管显示_第4页
基于msp430温度数码管显示_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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();/ 读低位temp = 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

温馨提示

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

评论

0/150

提交评论