|
MAX6675温度程序本来写了很久都不正常,硬件连接是正确的,源码如下,数码管是共阳显示的,请高手纠错
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit SO=P1^0;;;;;6675的7脚
sbit CS=P1^1;;;;;6675的6脚
sbit SCK=P1^2;;;;;6675的5脚
uchar StrTab[4],disnum,id,item;
char EPdata;
int dat0;
void delay_ms(int ntimes)
{
int delayi;
while(--ntimes)
{
for(delayi=0;delayi<1000;delayi++)
{;}
}
}
/**************************************************************
//FUNCTION:delay_ms(uchar ntimes)
//parameter: nTimes--延迟的微秒数
//sample:delay_ms(10);
//cai 2006.05.20
//*************************************************************/
void delay_us(int ntimes)
{
int delayi;
while(--ntimes)
{
}
}
/********************
初始化定时器1
***********************/
void Init_Timer1(void)
{
TMOD |=0x10; //定时器1用于动态扫描
TH1=0xF8; //初值
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;
}
void Displaypro(void) //温度显示
{
StrTab[0]=tab[dat0/1000];
StrTab[1]=tab[dat0/100%10];
StrTab[2]=tab[dat0/10%10];
StrTab[3]=tab[dat0%10];
}
/********************************
//读取MAX6675
*********************************/
void Read_6675()
{ uint i;
int dat_temp0;
i=0;
dat_temp0=0;
CS=0;
delay_us(220);
SCK=0;
delay_us(220);
for(i=0;i<16;i++)
{
SCK=1;
dat_temp0=dat_temp0<<1;
if(SO==1) dat_temp0=dat_temp0|0x01;
SCK=0;
delay_us(220);
}
CS=1;
dat_temp0=dat_temp0<<1;
dat_temp0=dat_temp0>>4;
dat_temp0=dat_temp0/4;
dat0 = dat_temp0;
}
/***********************************************
键盘操作
设定
**********************************/
/* *******************************
//显示
*********************************/
void Time1_isr(void) interrupt 3 using 0//定时器1用来动态扫描
{
TH1=0xF8;//重入初值
TL1=0xf0;
switch (disnum){
case 0:P2=0xFE;P0=StrTab[disnum];break; //分别调用缓冲区的值进行扫描
case 1:P2=0xFD;P0=StrTab[disnum];break;
case 2:P2=0xFB;P0=StrTab[disnum];break;
case 3:P2=0xF7;P0=StrTab[disnum];break; //分别调用缓冲区的值进行扫描
default:break;
}
disnum++; //扫描3次,使用3个数码管
if(disnum==4)
disnum=0;
}
/*********************************
主程序
**********************************/
main()
{
uchar i;
Init_Timer1();
while(1)
{
//读取MAX6675的温度值
Read_6675();
Displaypro();
for(i=0;i<50;i++) delay_ms(200);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|