当前位置:文档之家› 基于430单片机的温度传感器编程

基于430单片机的温度传感器编程

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; //关狗
函数名称:DelayNus
功能:实现N个微秒的延时
参数:n--延时长度
返回值:无
说明:定时器A的计数时钟是1MHz,CPU主频8MHz
所以通过定时器延时能够得到极为精确的
us级延时
********************************************/
void DelayNus(uint n)
for(i = 0; i < 16; i++)
Write_Data(0x20 + i); //显示0x50~0x5f对应的字符
Write_Cmd(0x98); //写第四行的显示地址
for(i = 0; i < 16; i++)
Write_Data(0x30 + i); //显示0x60~0x6f对应的字符
#define DQ1 P1OUT |= BIT6
#define DQ0 P1OUT &= ~BIT6
#define DQ_in P1DIR &= ~BIT6
#define DQ_out P1DIR |= BIT6
#define DQ_val (P1IN & BIT6)
/*******************************************
//13.清除显示命令
Write_Cmd(0x01); //清屏
Write_Cmd(0x80);
for(i=0;i<5;i++)
Write_Data(lab[i]);
Write_Cmd(0x90); //写第二行的显示地址
if(1)
{
Disp_Numb(Do1Convert());
Write_Data(dN[5]+0x30);
Clear_GDRAM(); //清除上电复位后RAM中的随机数值
Draw_TX(0x80,0x84,laba); //重新显示设置16*16大小图形
//11.关闭GDRAM显示
Write_Cmd(0x34); //打开扩展功能模式,关闭绘图显示
//12.设定基本指令集
Write_Cmd(0x30); //回到基本指令集
Write_Cmd(0x07); //光标右移整体显示左移
Write_Data(0x20); //写入两个空格
Write_Data(0x20);
Write_Cmd(0x05); //光标左移整体显示右移
Write_Data(0x20); //写入两个空格
Write_Data(0x20);
Write_Cmd(0x06); //光标右移整体显示不移动
//7.反白命令
Write_Cmd(0x04); //同时反白1、3行
Write_Cmd(0x04); //再次反白1、3行,相当于关闭1、3行反白
Write_Cmd(0x05); //同时反白2、4行
Write_Cmd(0x05); //再次反白2、4行,相当于关闭2、4行反白
//8.睡眠模式命令
主程序
#include "msp430.h"
#include "cry12864.h"
#include "DS18B20.h"
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char lab[]={"温度:"};
uchar laba[]=
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)
{
CCR0 = n;
TACTL |= MC_1; //增计数到CCR0
while(!(TACTL & BIT0)); //等待
TACTL &= ~MC_1; //停止计数
TACTL &= ~BIT0; //清除中断标志
}
/*******************************************
Write_Data(dN[4]+0x30);
Write_Data(0x2e); //0x2e是小数点对应的ASCII码值
Write_Data(dN[3]+0x30);
Write_Data(dN[2]+0x30);
Write_Data(dN[1]+0x30);
Write_Data(dN[0]+0x30);
Write_Cmd(0x0f); //整体显示开,游标开,游标位置开
//3.位址归位
Write_Cmd(0x02); //位址归位,游标回到原点
Write_Cmd(0x84); //将DDRAM地址设为0x88,游标在此闪烁
//4.点设定指令
//(以下四个命令是控制写入字符以后光标及整屏显示的移动)
Ini_Lcd();
for(i=0;i<16;i++)
Write_Data(lab[i]);
//循环读数显示
WDTCTL = WDTPW + WDTHOLD; //关狗
Ini_Lcd(); //初始化液晶
Write_Cmd(0x80); //写第一行的显示地址
for(i = 0; i < 16; i++)
Write_Cmd(0x10); //光标左移
Write_Cmd(0x14); //光标右移
Write_Cmd(0x18); //整体显示左移,光标跟随
Write_Cmd(0x1c); //整体显示右移,光标跟随
Write_Cmd(0x0c); //关闭光标
//6.进入扩展功能模式命令
Write_Cmd(0x34); //打开扩展功能模式,绘图显示关闭
Write_Cmd(0x90); //设定DDRAM地址,因为此时DDRAM地址已经溢出
//2.显示状态命令
Write_Cmd(0x08); //整体显示关,游标关,游标位置关
Write_Cmd(0x0c); //整体显示开,游标关,游标位置关
Write_Cmd(0x0e); //整体显示开,游标开,游标位置关
{
dN[4] += 4;
dN[5] += 6;
if(dN[4] >= 10)
{
dN[4] -= 10;
dN[5] += 1;
}
if(dN[5] >= 10)
{
dN[5] -= 10;
}
}
}
传感器
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
}
LPM4;
}
/*******************************************
函数名称:Disp_Numb
功能:将从DS18B20读取的11bit温度数据转换
成液晶显示的温度数字
参数:temper--11bit温度数据
返回值:无
********************************************/
DQ0;
DelayNus(500);
DQ1;
DelayNus(55);
DQ_in;
_NOP();
if(DQ_val)
{
Error = 1; //初始化失败
}
else
{
Error = 0; //初始化成功
}
DQ_out;
DQ1;
_EINT();
DelayNus(400);
return Error;
}
/*******************************************
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;
{ 0x00,0x00,0x00,0xC0,0x01,0x48,0x02,0x44,0x04,0x52,0xF8,0x49,0x88,0x49,0x88,0x49,
0x88,0x49,0x88,0x49,0xF8,0x49,0x04,0x52,0x02,0x44,0x01,0x48,0x00,0xC0,0x00,0x00};
相关主题