這個是用89c51的測溫代碼 想改用 stc12c5a60s2代態,不知什么原因 就出現,測溫顯示亂碼 有這放面的師博嗎幫忙看看程序有什么問題,修改上傳看看謝謝
//單片機晶振12M
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define count 5 //級聯個數
//定義Max7219端口
sbit Max7219_pinCLK = P2^2;
sbit Max7219_pinCS = P2^1;
sbit Max7219_pinDIN = P2^0;
sbit DQ=P3^7; // 接DS18B20的數據端
unsigned char AD_CHANNEL;
uchar code disp1[12][8]=
{
//{0x00,0x03,0x03,0x3C,0x7E,0x42,0x42,0x42},/*"未命名文件",度行*/
{0x1E,0x33,0x33,0x33,0x33,0x33,0xB3,0x9E},/*"未命名文件",.0*/
{0x06,0x0E,0x06,0x06,0x06,0x06,0x86,0x8F},/*"未命名文件",.1*/
{0x1E,0x33,0x33,0x06,0x0C,0x18,0xB0,0xBF},/*"未命名文件",.2*/
{0x1E,0x33,0x03,0x0E,0x03,0x03,0xB3,0x9E},/*"未命名文件",.3*/
{0x06,0x0E,0x0E,0x16,0x26,0x3F,0x86,0x8F},/*"未命名文件",.4*/
{0x3F,0x30,0x30,0x3E,0x03,0x03,0xB3,0x9E},/*"未命名文件",.5*/
{0x1E,0x36,0x30,0x3E,0x33,0x33,0xB3,0x9E},/*"未命名文件",.6*/
{0x1F,0x1B,0x03,0x06,0x06,0x06,0x86,0x86},/*"未命名文件",.7*/
{0x1E,0x33,0x33,0x1E,0x33,0x33,0xB3,0x9E},/*"未命名文件",.8*/
{0x1E,0x33,0x33,0x33,0x1F,0x03,0x9B,0x9E},/*"未命名文件",.9*/
{0x00,0x60,0x6F,0x18,0x18,0x18,0x18,0x0F},/*"未命名文件",度列*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"未命名文件", */
};
uchar code disp2[10][8]=
{
{0x78,0xCC,0xCC,0xCC,0xCC,0xCC,0xCD,0x79},/*"未命名文件",0.*/
{0x60,0xE0,0x60,0x60,0x60,0x60,0x61,0xF1},/*"未命名文件",1.*/
{0x78,0xCC,0xCC,0x18,0x30,0x60,0xC1,0xFD},/*"未命名文件",2.*/
{0x78,0xCC,0x0C,0x38,0x0C,0x0C,0xCD,0x79},/*"未命名文件",3.*/
{0x18,0x38,0x38,0x58,0x98,0xFC,0x19,0x3D},/*"未命名文件",4.*/
{0xFC,0xC0,0xC0,0xF8,0x0C,0x0C,0xCD,0x79},/*"未命名文件",5.*/
{0x78,0xD8,0xC0,0xF8,0xCC,0xCC,0xCD,0x79},/*"未命名文件",6.*/
{0xF8,0xD8,0x18,0x30,0x30,0x30,0x31,0x31},/*"未命名文件",7.*/
{0x78,0xCC,0xCC,0x78,0xCC,0xCC,0xCD,0x79},/*"未命名文件",8.*/
{0x78,0xCC,0xCC,0xCC,0x7C,0x0C,0x6D,0x79},/*"未命名文件",9.*/
};
uchar code disp3[10][8]=
{
{0x78,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x78},/*"未命名文件",0*/
{0x60,0xE0,0x60,0x60,0x60,0x60,0x60,0xF0},/*"未命名文件",1*/
{0x78,0xCC,0xCC,0x18,0x30,0x60,0xC0,0xFC},/*"未命名文件",2*/
{0x78,0xCC,0x0C,0x38,0x0C,0x0C,0xCC,0x78},/*"未命名文件",3*/
{0x18,0x38,0x38,0x58,0x98,0xFC,0x18,0x3C},/*"未命名文件",4*/
{0xFC,0xC0,0xC0,0xF8,0x0C,0x0C,0xCC,0x78},/*"未命名文件",5*/
{0x78,0xD8,0xC0,0xF8,0xCC,0xCC,0xCC,0x78},/*"未命名文件",6*/
{0xF8,0xD8,0x18,0x30,0x30,0x30,0x30,0x30},/*"未命名文件",7*/
{0x78,0xCC,0xCC,0x78,0xCC,0xCC,0xCC,0x78},/*"未命名文件",8*/
{0x78,0xCC,0xCC,0xCC,0x7C,0x0C,0x6C,0x78},/*"未命名文件",9*/
};
void Delay_xms(uint x);
void Write_Max7219_byte(uchar DATA);//寫入一字節
void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2);
void Init_MAX7219(void);
// 鎖存進相應寄存器
void ReSet(void)
{
uint i;
DQ=0;
i=100;
while(i--);
DQ=1;
i=4;
while(i--);
while(DQ);
while(~DQ);
i=4;
while(i--);
}
uchar ReadByte(void)
{
uchar i,j,b,dat=0;
for(j=0;j<8;j++)
{
DQ=0;
i++;
DQ=1;
i=3; // 延時15us
while(--i);
b=DQ;
i=10;
while(i--);
dat=(b<<7)|(dat>>1);
}
return(dat);
}
void WriteByte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=0;j<8;j++)
{
btmp=b&0x01;
b=b>>1; // 取下一位(由低位向高位)
if(btmp)
{
DQ=0;
i++;
i++;
DQ=1;
i=10;
while(i--); // 整個寫1時隙不低于60us
}
else
{
DQ=0;
i=10;
while(i--); // 保持低在60us到120us之間
DQ=1;
i++;
i++;
}
}
}
uint ReadTemp(void)
{
uchar TempLow,TempHig; // 溫度值低位、高位字節
float tt;
uint temp;
ReSet(); // 產生復位脈沖,初始化DS18B20
WriteByte(0xcc); // skip rom 命令
WriteByte(0x44); // convert T 命令
ReSet();
WriteByte(0xcc); // skip rom 命令
WriteByte(0xbe); // read 溫度命令
TempLow=ReadByte(); // 溫度值低位字節(其中低4位為二進制的"小數"部分)
TempHig=ReadByte(); // 高位值高位字節(其中高5位為符號位)
temp=TempHig;
temp<<=8;
temp=temp|TempLow;
tt=temp*0.0625;
temp=tt*10+0.5;
return (temp);
}
void Init_MAX7219(void)
{
uchar i;
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x09); //譯碼方式:BCD碼
Write_Max7219_byte(0x00);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0a); //亮度
Write_Max7219_byte(0x03);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0b); // //掃描界限;8個數碼管顯示
Write_Max7219_byte(0x07);
}
Max7219_pinCS=1;
_nop_();
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0c); // //掉電模式:0,普通模式:1
Write_Max7219_byte(0x01);
}
Max7219_pinCS=1;
Max7219_pinCS=0;
for(i=0;i<count;i++)
{
Write_Max7219_byte(0x0f); //顯示測試:1;測試結束,正常顯示:0
Write_Max7219_byte(0x00);
}
Max7219_pinCS=1;
_nop_();
}
void main(void)
{
uchar i;
uint temp;
Delay_xms(50);
Init_MAX7219();
while(1)
{
temp=ReadTemp();
for(i=1;i<9;i++)
{
Max7219_pinCS=0;
Write_Max7219_byte(i); //寫入地址,即數碼管編號
Write_Max7219_byte(disp3[temp%10000/1000][i-1]); //寫入數據,即數碼管顯示數字
Write_Max7219_byte(i); //寫入地址,即數碼管編號
Write_Max7219_byte(disp3[temp%1000/100][i-1]); //寫入數據,即數碼管顯示數字
Write_Max7219_byte(i); //寫入地址,即數碼管編號
Write_Max7219_byte(disp2[temp%100/10][i-1]); //寫入數據,即數碼管顯示數字
Write_Max7219_byte(i); //寫入地址,即數碼管編號
Write_Max7219_byte(disp1[temp%10][i-1]); //寫入數據,即數碼管顯示數字
Write_Max7219_byte(i); //寫入地址,即數碼管編號
Write_Max7219_byte(disp1[10][i-1]); //寫入數據,即數碼管顯示數字
Max7219_pinCS=1;
}
Delay_xms(1000);
}
}
void Write_Max7219(uchar address1,uchar dat1,uchar address2,uchar dat2)
{
Max7219_pinCS=0;
Write_Max7219_byte(address1); //寫入地址,即數碼管編號
Write_Max7219_byte(dat1); //寫入數據,即數碼管顯示數字
Write_Max7219_byte(address2); //寫入地址,即數碼管編號
Write_Max7219_byte(dat2); //寫入數據,即數碼管顯示數字
_nop_();
Max7219_pinCS=1;
}
//--------------------------------------------
//功能:向MAX7219(U3)寫入字節
//入口參數:DATA
//出口參數:無
//說明:
void Write_Max7219_byte(uchar DATA)
{
uchar i;
for(i=8;i>=1;i--)
{
Max7219_pinCLK=0;
Max7219_pinDIN=DATA&0x80;
DATA=DATA<<1;
Max7219_pinCLK=1;
}
}
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
|