关于热电偶测温带数码管显示的实验板

温雅婷   ·   发表于 2019-12-5   ·   求助
我在做个可以测400度的k型热电偶测温带数码管显示的实验板。发现只有通电的那一下读max6675的温度是正确的,而且数据不变化,请各位朋友帮忙看看是什么地方出了问题,给予指教。谢谢。

#include
sbit	com1	= P1 ^ 2;                                                                                                               /* 设置个位显示控制位 */
sbit	com2	= P1 ^ 1;                                                                                                               /* 设置十位显示控制位 */
sbit	com3	= P1 ^ 0;                                                                                                               /* 设置百位显示控制位 */
sbit	SO	= P3 ^ 7;                                                                                                               /* P3.7口与SO相连 IC的7脚  ,数据输出 */
sbit	SCK	= P3 ^ 5;                                                                                                               /* P3.5口与SCK相连IC的5脚,给IC脉冲 */
sbit	CS	= P3 ^ 6;                                                                                                               /* P3.6口与CS相连IC的6脚  ,片选,低电平有效 */

unsigned char		wdge, wdshi, wdbai;                                                                                             /* 定义3个温度的全局变量,用于温度显示 */
unsigned char code	table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };   /* 定义0到F 16个数码管显示代码 */

void ldelay( unsigned char temp );                                                                                                      /* 短延迟 */


void waiting();                                                                                                                         /* 等待和显示 */


void delay( unsigned char temp );                                                                                                       /* 在晶振为12M的时候,延迟函数最多256毫秒 */


void readmax6675();                                                                                                                     /* 临时调试max6675程序用 */


void main()                                                                                                                             /* 主程序开始 */
{
	P1	= 0;
	P2	= table[0];

	while ( 1 )
	{
		readmax6675();                                                                                                          /* 读max6675数据 */
		waiting();                                                                                                              /* 显示读到的数据 */
	}
}


/* ***********等待开始函数********** */
void waiting()                                                                                                                          /* 数码管显示 */
{
/* *******显示温度个位的数码管*********** */
	com1	= 0;
	P2	= table[wdge];
	com1	= 1;
	delay( 10 );
	com1 = 0;

/* *******显示温度十位的数码管*********** */
	com2	= 0;
	P2	= table[wdshi];
	com2	= 1;
	delay( 10 );
	com2 = 0;

/* *******显示温度百位的数码管*********** */
	com3	= 0;
	P2	= table[wdbai];
	com3	= 1;
	delay( 10 );
	com3 = 0;
}


/* ***********延迟函数********** */
void delay( unsigned char temp )                                /* 在晶振为12M的时候,延迟函数最多256毫秒 */
{
	unsigned char time0, mstime = 230;
	for ( time0 = 0; time0 < temp; time0++ )
	{
		while ( --mstime )
			;                                       /* mstime=230           延迟程序1毫秒 */
	}
	;
}


/* ***********短延迟函数********** */
void ldelay( unsigned char temp )                               /* 在晶振为12M的时候,延迟函数最多256毫秒 */
{
	unsigned char time0, mstime = 2;
	for ( time0 = 0; time0 < temp; time0++ )
	{
		while ( --mstime )
			;                                       /* mstime=230           延迟程序1毫秒 */
	}
	;
}


/* ***********读max6675数据的函数********** */
void   readmax6675()                                            /* 调试MAX6675数据的读取 */
{
	unsigned int	Temp1, wendu;
	unsigned char	i, twdge = 0, twdshi = 0, twdbai = 0;   /* 要是不初始化为0,会使数码管乱显示 */
	CS	= 1;                                            /* 为片选做准备 */
	SCK	= 0;                                            /* P3.5口与SCK相连IC的5脚,给IC脉冲 */


	wendu	= 0;
	Temp1	= 0;

	ldelay( 2 );
	CS = 0;                                                 /* P3.6口与CS相连IC的6脚  ,片选,低电平有效 */
	for ( i = 0; i < 16; i++ )                              /* 16位数据读取 */
	{
		Temp1 <<= 1;                                    /* 向左移一位 */
		ldelay( 2 );
		SCK = 1;                                        /* sck上升 正脉冲期间读数据输出   //P3^.5口与SCK相连 */
		ldelay( 2 );
		if ( SO == 1 )                                  /* P3.7口与SO相连 IC的7脚  ,数据输出 */
		{
			Temp1 = Temp1 | 0x01;
		}else                            { Temp1 = Temp1 | 0x00; }
		ldelay( 2 );
		SCK = 0;
/* ldelay(5); */
	}


	Temp1	= Temp1 << 1;                   /* 向左移一位,取0-14位 */
	Temp1	= Temp1 >> 4;                   /* 向右移4位,取3-14位 */
	wendu	= (Temp1 * 25 + 50) / 100;      /* 变换为温度值 */

	if ( wendu < 2000 )                     /* 最高读取温度设定为500摄氏度 */
	{
		for ( i = 0; i < wendu; i++ )
		{
			twdge++;
			if ( twdge > 9 )
			{
				twdge = 0;
				twdshi++;
				if ( twdshi > 9 )
				{
					twdshi = 0;
					twdbai++;
				}
			}
		}
	}
	wdge	= twdge;
	wdshi	= twdshi;
	wdbai	= twdbai;
}
1 条回复   |  直到 2019-12-5 | 21 次浏览

admin
发表于 2019-12-5

你检查一下输入电压,参照datasheet

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容