//只能用一個芯片,否則失效
#include "adc0804.h"
#include "intrins.h"
void adc_delay(uint z)// 延時函數(shù)
{
while(z--);
}
uchar adc0804()//控制并讀取adc0804轉(zhuǎn)換好的數(shù)據(jù)
{
uchar a; //寫入控制命令,啟動轉(zhuǎn)換
adc_intr=1;
adc_cs=1;
adc_wr=1;
adc_cs=0;
adc_wr=0;
_nop_();
adc_wr=1;
adc_cs=1;
adc_delay(50);
//adc_intr=0;
adc_cs=0;
adc_rd=0; //讀取已轉(zhuǎn)換好的數(shù)據(jù)
adc_intr=1;
a=P1;
_nop_();
adc_rd=1;
adc_cs=1;
return a;
}
define uint unsigned int
sbit smg1=P2^0;//數(shù)碼管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit led1=P2^5;//綠色
sbit led2=P2^6;//紅色
sbit out=P2^4;//風(fēng)扇
sbit k1=P2^7;//設(shè)置
//數(shù)碼管編碼
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,mode=0;//系統(tǒng)變量
uint wendu=0,set=100;//溫度
uchar sec=0;
uchar flag=0;//手動控制
uchar shou[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//接收控制
uchar next=0;
//串口發(fā)送
void send(uchar i)
{
SBUF=i;
while(!TI);
TI=0;
}
void main() //主函數(shù)
{
uchar k=0;
SCON=0X50; //設(shè)置為工作方式1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式2
TH1=0XFD;
TL1=0XFD;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
//設(shè)置INT0
IT0=1;//跳變沿出發(fā)方式(下降沿)
EX0=1;//打開INT0的中斷允許。
//設(shè)置INT1
IT1=1;//跳變沿出發(fā)方式(下降沿)
EX1=1;//打開INT1的中斷允許。
TMOD|=0X01;//定時器初始化
TH0=(65536-50000)/256;//50ms
TL0=(65536-50000)%256;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
while(1)
{
//顯示
if(mode<2)
{
if(mode==0)
P0=0xfe;
else
P0=0xf7;
smg1=0;
adc_delay(100);
smg1=1;
P0=smgduan[wendu/100];
smg2=0;
adc_delay(100);
smg2=1;
P0=smgduan[wendu%100/10];
smg3=0;
adc_delay(100);
smg3=1;
P0=smgduan[wendu%10];
smg4=0;
adc_delay(100);
smg4=1;
}
else
{
P0=0x89;
smg1=0;
adc_delay(100);
smg1=1;
P0=smgduan[set/100];
smg2=0;
adc_delay(100);
smg2=1;
P0=smgduan[set%100/10];
smg3=0;
adc_delay(100);
smg3=1;
P0=smgduan[set%10];
smg4=0;
adc_delay(100);
smg4=1;
}
if(!k1 &&(k!=1))//設(shè)置
{
k=1;
if(mode<2)
mode=2;
else
mode=0;
}
if(k1)
k=0;
}
}
//定時器中斷
void Timer0() interrupt 1
{
float i=0;
if(time<10)//0.5s
time++;
else
資料借鑒于此紛傳
閱讀全文