任務:代碼整合一份 完成溫度采集并顯示
完成聲光報警
按鍵調整溫度上下限
直流電動機調速
前三個任務都可以
#include "reg52.h"
sbit DQ=P1^4;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0XBF};
unsigned char dspbuf[]={10,10,10,10,10,10,10,10};
unsigned char dspcom=0;
unsigned int num=0;
unsigned char low_temp=7;
unsigned char high_temp=26;
unsigned char intr;
void delayms(unsigned int x);
bit temper_flag=0;
void Delay_OneWire();
void Write_DS18B20();
bit init_ds18b20();
unsigned char rd_temperature();
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
void display(void);
void main(void)
{
unsigned char temperature;
TMOD|=0x01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
delayms(10);
if(S7==0)
{
delayms(10);
if(S7==0)
{
low_temp+=1;
if(low_temp>26)
{
low_temp=7;
}
dspbuf[0]=low_temp/10;
dspbuf[1]=low_temp%10;
}
while(!S7);
}
if(S6==0)
{
delayms(10);
if(S6==0)
{
low_temp-=1;
if(low_temp>15)
{
low_temp=07;
}
dspbuf[0]=low_temp/10;
dspbuf[1]=low_temp%10;
}
while(!S6);
}
if(S5==0)
{
delayms(10);
if(S5==0)
{
high_temp+=1;
if(high_temp>26)
{
high_temp=7;
}
dspbuf[3]=high_temp/10;
dspbuf[4]=high_temp%10;
}
while(!S5);
}
if(S4==0)
{
delayms(10);
if(S4==0)
{
high_temp-=1;
if(high_temp>26)
{
high_temp=7;
}
dspbuf[3]=high_temp/10;
dspbuf[4]=high_temp%10;
}
while(!S4);
}
dspbuf[0]=low_temp/10;
dspbuf[1]=low_temp%10;
dspbuf[3]=high_temp/10;
dspbuf[4]=high_temp%10;
if(temper_flag)
{
temper_flag=0;
temperature=rd_temperature();
}
dspbuf[6]=temperature/10;
dspbuf[7]=temperature%10;
if(temperature>=high_temp||temperature<=low_temp)
{
P0=0XFF;
P2=P2&0X1F|0XA0;
P2&=0X1F;
P0=0X00;
P2=P2&0X1F|0X80;
P2&=0X1F;
}
else
{
P0=0X00;
P2=P2&0X1F|0XA0;
P2&=0X1F;
P0=0XFF;
P2=P2&0X1F|0X80;
P2&=0X1F;
}
}
}
void isr_time_0(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
if(++intr==100)
{
intr=0;
temper_flag=1;
}
}
void display(void)
{
P0=0XFF;
P2=P2&0X1F|0XE0;
P2=P2&0X1F;
P0=0X01<<dspcom;
P2=P2&0X1F|0XC0;
P2=P2&0X1F;
P0=tab[dspbuf[dspcom]];
P2=P2&0X1F|0XE0;
P2=P2&0X1F;
if(++dspcom==8)
{
dspcom=0;
}
}
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--)
{
for(i=0;i<12;i++);
}
}
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for (i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay_OneWire(5);
DQ=1;
dat>>=1;
}
Delay_OneWire(5);
}
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for (i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
{
dat|=0x80;
}
Delay_OneWire(5);
}
return dat;
}
bit init_ds18b20(void)
{
bit initflag=0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag=DQ;
Delay_OneWire(5);
return initflag;
}
unsigned char rd_temperature(void)
{
unsigned char low,high;
char temp;
init_ds18b20();
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
Delay_OneWire(200);
init_ds18b20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
low=Read_DS18B20();
high=Read_DS18B20();
temp=high<<4;
temp|=(low>>4);
return temp;
}
void delayms(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
直流電動機代碼
#include<reg52.h>
sbit S7=P3^0;
unsigned char Key_Num,PWM_ON,ms;
unsigned char code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};
void delayms(unsigned int);
main()
{
TMOD=0X01;
TH0=0XFC;
TL0=0X66;
EA=1;
ET0=1;
TR0=1;
P0=0X80;
P2=P2&0X1F|0XC0;
P2&=0X1F;
P0=Tab[0];
P2=P2&0X1F|0Xe0;
P2&=0X1F;
while(1)
{
if(!S7)
{
delayms(30);
if(!S7)
{
if(++Key_Num>=5)
Key_Num=1;
switch(Key_Num)
{
case 1:PWM_ON=3; //1μμ
break;
case 2:PWM_ON=5; //2μμ
break;
case 3:PWM_ON=7; //3μμ
break;
case 4:PWM_ON=9; //4μμ
break;
}
P0=Tab[Key_Num];
P2=P2&0X1F|0XE0;
P2&=0X1F;
}
while(!S7);
}
}
}
void T0_Int() interrupt 1
{
TH0=0XFC;
TL0=0X66;
if(++ms>=10)
ms=0;
if(ms<PWM_ON)
P0=P0|0X20;
else
P0=P0&0X9F;
P2=P2&0X1F|0XA0;
P2&=0X1F;
}
void delayms(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=113;j>0;j--);
}
不會整合 求救一下
|