2024-09-01
售卖作品
00

目录

功能
部分程序
全部程序

功能

msp430f149单片机

读取ds18b20温度,显示到数码管,串口发送温度到电脑

部分程序

cpp
/************************************************* * 程序功能:用DS18B20测量室温并在数码管上显示。 * ------------------------------------------------- * 测试说明:观察显示温度数值。 *************************************************/ #include <msp430x14x.h> #include <stdlib.h> #include <stdio.h> #include <string.h> /* 延时函数,IAR自带,经常使用到 */ #define CPU_F ( (double) 8000000) /* 外部高频晶振8MHZ */ /* #define CPU_F ((double)32768) //外部低频晶振32.768KHZ */ #define delay_us( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) ) #define delay_ms( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000.0) ) /* 自定义数据结构,方便使用 */ #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /****************主函数****************/ 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; WDTCTL = WDTPW + WDTHOLD; Clock_Init(); UART_Init(); P6DIR |= BIT6; P6OUT |= BIT6; /* 关闭电平转换 */ P5DIR |= BIT5; P5OUT |= BIT5; /* 关闭电平转换 */ P6DIR |= BIT7; P6OUT |= BIT7; /* 关闭蜂鸣器 */ /* 设置看门狗定时器,初始化控制数码管的IO */ WDTCTL = WDT_ADLY_1_9; IE1 |= WDTIE; /* 计数时钟选择SMLK=8MHz,1/8分频后为1MHz */ TACTL |= TASSEL_2 + ID_3; /* 打开全局中断 */ _EINT(); /* 循环读数显示 */ while ( 1 ) { wendu = Do1Convert(); /* 读取温度s */ Disp_Numb( wendu ); /* 显示温度 */ /* 串口发送温度 wendu */ memset( fasong, 0, sizeof(fasong) ); /* 清空发送数组 */ sprintf( fasong, "%d%d.%d \r\n", (int)dN[5],(int)dN[4] ,(int)dN[3] ); Print_Str( fasong ); } } /******************************************* * 函数名称:watchdog_timer * 功 能:看门狗定时器中断服务函数,进行数码 * 管动态扫描 * 参 数:无 * 返回值 :无 ********************************************/ #pragma vector = WDT_VECTOR __interrupt void watchdog_timer( void ) { /* * P4OUT = 0xFF; * wei_h; * wei_l; */ P4OUT = scandata[dN[5 - cnt]]; if ( cnt == 1 ) P4OUT &= ~BIT7; /* 在第二位显示小数点 */ duan_h; duan_l; P4OUT = ~(1 << cnt); wei_h; wei_l; cnt++; if ( cnt == 3 ) cnt = 0; } /******************************************* * 函数名称:Disp_Numb * 功 能:将从DS18B20读取的11bit温度数据转换 * 成数码管显示的温度数字 * 参 数:temper--11bit温度数据 * 返回值 :无 ********************************************/ void Disp_Numb( uint temper ) { uchar i; for ( i = 0; i < 6; i++ ) dN[i] = 0; /* 初始化显示变量 */ /* 数值转换 */ if ( temper & BIT0 ) { dN[0] = 5; dN[1] = 2; dN[2] = 6; } if ( temper & BIT1 ) { dN[1] += 5; dN[2] += 2; dN[3] += 1; } if ( temper & BIT2 ) { dN[2] += 5; dN[3] += 2; if ( dN[2] >= 10 ) { dN[2] -= 10; dN[3] += 1; } } if ( temper & BIT3 ) { dN[3] += 5; } if ( temper & BIT4 ) { dN[4] += 1; } if ( temper & BIT5 ) { dN[4] += 2; } if ( temper & BIT6 ) { dN[4] += 4; } if ( temper & BIT7 ) { dN[4] += 8; if ( dN[4] >= 10 ) { dN[4] -= 10; dN[5] += 1; } } if ( temper & BIT8 ) { dN[4] += 6; dN[5] += 1; if ( dN[4] >= 10 ) { dN[4] -= 10; dN[5] += 1; } } if ( temper & BIT9 ) { dN[4] += 2; dN[5] += 3; if ( dN[4] >= 10 ) { dN[4] -= 10; dN[5] += 1; } } if ( temper & BITA ) { dN[4] += 4; dN[5] += 6; if ( dN[4] >= 10 ) { dN[4] -= 10; dN[5] += 1; } if ( dN[5] >= 10 ) { dN[5] -= 10; } } }

全部程序

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!