?? max197.c
字號:
/*while(1)
{delay(1000)
temp=_crol_(temp,1); //循環(huán)左移函數(shù) ,包含在intrins文件中。
P1=temp;
}*/
#include<reg52.h> //<>表示先找?guī)斓?,再找工程文件夾的;“”先找工程文件夾的,再找?guī)斓模?#include<absacc.h>
#include<1602LCD.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define addata P0
uchar m,t0,t1,flag,flag1,flag2,ADH,ADL,ADH0,ADL0;
int u;
ulong sum;
uchar code wel[]={"-temperature?--"};//液晶顯示字符
uchar code pt[]={"----Pt100?----"};
uchar code K[]={"----K?----"};
uchar code LM35[]={"----LM35----"};
uchar code num[]={"0123456789"};
uchar data ad_data[2]={0x00,0x00}; //用于存儲AD轉(zhuǎn)換后的數(shù)據(jù)
ulong data temperature[]={0x00,0x00,0x00};
uint data dis[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //要顯示的數(shù)
sbit P14=P1^4;
sbit P15=P1^5;
sbit P13=P1^3;
sbit OE=P2^6;
//控制MAX197轉(zhuǎn)換的端口 ,送模擬信號輸入端口地址,啟動轉(zhuǎn)換
sbit MAX197_CS=P1^6;
sbit HBEN=P1^7;
sbit wr=P3^6;
sbit rd=P3^7;
//控制熱電偶數(shù)據(jù)輸入端口
sbit SO=P1^0; //串行數(shù)據(jù)輸出端
sbit CS=P1^1; //片選信號,低電平串行接口有效
sbit SCK=P1^2; //串行時鐘輸入端
void display(uint m);
//void delay1(uint c);//delay1()函數(shù)聲明
void delay(uint z); //delay()函數(shù)聲明
void admax197();
void K_read();
void init();
void display3();
void display2();
void display1();
void main()
{
init();
while(1)
{
if(P14&&P15!=0) //LM35
{
admax197();
display1();
}
if (P14==0) //PT100
{
delay(10);
if(P14==0)
{
while(flag!=1)
{
admax197();
display2();
}
}
}
if (P15==0) //K
{
delay(10);
if(P15==0)
{
K_read();
display3();
}
}
}
}
void init() //初始化
{
P0=0xff;
P1=0xff;
P2=0x00;
P3=0xff;
delay(255); //啟動等待,等LCM進(jìn)入工作狀態(tài)
LCMInit(); //LCM初始化
delay(5); //延時片刻(可不要)
ReadDataLCM(); //測試用句無意義
DisplayListChar(0,0,wel); //0列0行開始顯示
TMOD=0x01;
// TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
// TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
// ET1=1;
TR0=1;
// TR1=1;
}
void delay(uint z) //延時子程序,z=1時延時1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void admax197() // AD轉(zhuǎn)換使用通道0 ----LM35;
{
P0=0x50;
MAX197_CS=0;
_nop_();
wr=0;
_nop_();
wr=1;
_nop_();
_nop_();
while(INT0==1);
HBEN=0;
rd=0;
ad_data[0]=addata ;
HBEN=1;
ad_data[1]=addata&0x0f;
sum=ad_data[1]*256+ad_data[0];
rd=1;
}
void timer0() interrupt 1 //定時器0溢出中斷50ms定時
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==1000) //定時50s
{
t0=0;
flag=1;
}
}
//void timer1() interrupt 3
//{TH1=(65536-50000)/256;
// TL1=(65536-50000)%256;
// t1++;
// if(t1==2000) //定時100s
// {
// t1=0;
// flag1=1;
// }
//}
void display1()
{
uint i;
uchar x;
temperature[0]=10000*sum/4095;
DisplayListChar(0,0,LM35); //0列0行開始顯示
dis[0]=temperature[0]/1000;
dis[4]=temperature[0]%1000;
dis[1]=dis[4]/100;
dis[4]=dis[4]%100;
dis[2]=dis[4]/10;
dis[3]=dis[4]%10;
x=10;
for(i=3,x=10;i>=0;i--)
{
if(x==8)
{
DisplayOneChar(x,1,'.');x--;
}
DisplayOneChar(x, 1, num[dis[i]]);
x--;
}
}
void display2()
{
uint i;
uchar x;
temperature[1]=sum; //要改的
DisplayListChar(0,0,pt); //0列0行開始顯示
dis[0]=temperature[1]/51;
dis[4]=temperature[1]%51;
dis[4]=dis[4]*10;
dis[1]=dis[4]/51;
dis[4]=dis[4]%51;
dis[4]=dis[4]*10;
dis[2]=dis[4]/51;
x=10;
for(i=2,x=10;i>=0;i--)
{
if(x==8)
{
DisplayOneChar(x,1,'.');x--;
}
DisplayOneChar(x, 1, num[dis[i]]);
x--;
}
}
void display3()
{
uint i;
uchar x;
temperature[0]=100*1023.75*u/4095; //要改的
dis[0]=temperature[0]/100000;
dis[7]=temperature[0]%100000;
dis[1]=dis[7]/10000;
dis[7]=dis[7]%10000;
dis[2]=dis[7]/1000;
dis[7]=dis[7]%1000;
dis[3]=dis[7]/100;
dis[7]=dis[7]%100;
dis[4]=dis[7]/10;
dis[5]=dis[7]%10;
x=10;
for(i=5,x=10;i>=0;i--)
{
if(x==8)
{
DisplayOneChar(x,1,'.');x--;
}
DisplayOneChar(x, 1, num[dis[i]]);
x--;
}
}
/*…………熱電偶信號處理…………*/
void K_read(void)
{
unsigned char i,j;
ADH=ADL=0;
SCK=0;
CS=0;
SCK=1;
CS=0;
SCK=0; /*輸出數(shù)據(jù)D15*/
SCK=1;
for(i=4;i>0;i--) /*讀取轉(zhuǎn)換結(jié)果高4位*/
{
SCK=0;
ADH0=SO;
if(ADH0==1)
{ADH=ADH<<1;
ADH=ADH||0x01;
}
else
ADH=ADH<<1; /*數(shù)據(jù)位左移*/
SCK=1;
}
for(j=8;j>0;j++)
/*讀取轉(zhuǎn)換結(jié)果低8位*/
{
SCK=0;
ADL0=SO;
if(ADL0==1)
{ADL=ADL<<1;
ADL=ADL||0x01;
}
else
ADL=ADL<<1; /*數(shù)據(jù)左移*/
SCK=1;
}
SCK=0;
flag2=SO; /*讀取D2斷偶標(biāo)志*/
SCK=1;
SCK=0; /*輸出數(shù)據(jù)D0*/
CS=1;
delay(10);
u=ADH*256+ADL;
}
// 溫度值= 1 023.75 ×轉(zhuǎn)換后的數(shù)字量/ 4 095
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -