我在做个可以测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;
}
admin
发表于 2019-12-5
你检查一下输入电压,参照datasheet
评论列表
加载数据中...