有哪位大神,调试过STC8A系列 驱动 max6675读取温度程序,读取的温度液晶显示不正常,显示0000。
别说网上程序有的是,这我知道,我看了。求验证,调试过得大神指教。非常感谢!
程序如下:- #include "intrins.h" //_nop_();ÑÓʱº¯ÊýÓÃ
- #include "stc15x.h"
- #include "MAX6675.h"
- #include "delay.h"
- #include <JLX12864.h>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned int MAX6675_Temp;
- unsigned char Flag_connect;
- unsigned char MAX6675_Temp_char[4];///4
- unsigned int MAX6675_ReadReg(void)
- {
- unsigned char i;
- unsigned int dat;
-
- i=0;
- dat=0;
-
- MAX6675_CS=0;
- MAX6675_SCK=0;
- // DelayXus(1);
- _nop_();
- _nop_();
-
- for(i=0; i<16; i++) //get D15-D0 from 6675
- {
- MAX6675_SCK=1;
- // DelayXus(1);
- _nop_();
- _nop_();
- dat = dat<<1;
- if( MAX6675_SO&0x04 )/// if( MAX6675_SO==1 ) ///
- dat = dat|0x01;
- MAX6675_SCK = 0;
- // DelayXus(1);
- _nop_();
- _nop_();
- }
- MAX6675_CS = 1;
- //dat=400;
- return dat;
- }
- void Get_MAX6675_Dispay_char()
- {
- unsigned int t;
- t=MAX6675_ReadReg();
- Flag_connect=t&0x04; //¶Á³öÊý¾ÝµÄD2λÊÇÈȵçżµôÏß±ê־룬¸ÃλΪ1±íʾµôÏߣ¬¸ÃλΪ0±íʾÁ¬½Ó
- Flag_connect=Flag_connect>>2; //MAX6675ÊÇ·ñÔÚÏß
- t=t<<1; //¶Á³öÀ´µÄÊý¾ÝµÄD3~D14ÊÇζÈÖµ
- t=t>>4;
- MAX6675_Temp = t/4; //²âµÃµÄζȵ¥Î»ÊÇ0.25£¬ËùÒÔÒª³ËÒÔ0.25£¨¼´³ýÒÔ4£©²ÅÄܵõ½ÒÔ¶ÈΪµ¥Î»µÄζÈÖµ
- if(Flag_connect==0)
- {
-
- // if(MAX6675_Temp>999)
- MAX6675_Temp_char[0]=MAX6675_Temp/1000+'0';
- // if(MAX6675_Temp>99)
- MAX6675_Temp_char[1]=MAX6675_Temp%1000/100+'0';
- // if(MAX6675_Temp>9)
- MAX6675_Temp_char[2]=MAX6675_Temp%100/10+'0';////10%10
- MAX6675_Temp_char[3]=MAX6675_Temp%10+'0';
- }
- else {
- MAX6675_Temp_char[0]=0+'6';
- MAX6675_Temp_char[1]=0+'6';
- MAX6675_Temp_char[2]=0+'6';
- MAX6675_Temp_char[3]=0+'6';
- }
-
- }
复制代码- #ifndef _MAX6675_H
- #define _MAX6675_H
- #include <STC15X.h>
- sbit MAX6675_SO = P3^6; //P3.6¿ÚÓëSOÏàÁ¬
- sbit MAX6675_SCK = P4^1; //P3.4¿ÚÓëSCKÏàÁ¬ ///P3^7
- sbit MAX6675_CS = P3^7; //P3.5¿ÚÓëCSÏàÁ¬ ///P4^1
- extern unsigned int MAX6675_Temp;
- extern unsigned char Flag_connect;
- extern unsigned char MAX6675_Temp_char[4];
- //extern unsigned int MAX6675_ReadReg(void)
- void Get_MAX6675_Dispay_char();
- #endif
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是这个道理,怀疑unsigned int MAX6675_ReadReg(void)这个函数可能哪里有问题,或者 液晶显示不对。
强调下,液晶显示别的参数都对。
当时确定不了。
一周热门 更多>