单片机源程序如下:
- #include <AT89X52.h>
- #include "DS18B20.h"
- #define uint unsigned int
- #define uchar unsigned char
- #define SET P3_1
- #define DEC P3_2
- #define ADD P3_3
- #define BEEP P3_7
- bit shanshuo_st;
- bit beep_st;
- sbit DIAN=P2^7;
- uchar x=0;
- signed char m;
- uchar n;
- uchar set_st=0;
- signed char shangxian=38;
- signed char xiaxian=15;
- uchar code
- LEDDate[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void Delay (uint num)
- {
- while(--num);
- }
- void InitTimer(void)
- {
- TMOD=0x1;
- TH0=0x4c;
- TL0=0x00;
- }
- void timer0(void) interrupt 1
- {
- TH0=0x4c;
- TL0=0x00;
- x++;
- }
- void int0(void) interrupt 0
- {
- EX0=0;
- if (DEC ==0&&set_st==1)
- {
- shangxian--;
- if(shangxian<xiaxian)shangxian=xiaxian;
- }
- else if(DEC==0&&set_st==2)
- {
- xiaxian--;
- if (xiaxian<0)xiaxian==0;
- }
- }
- void int1(void) interrupt 2
- {
- EX1=0;
- if(ADD==0&&set_st==1)
- {
- shangxian++;
- if(shangxian>99)shangxian=99;
- }
- else if(ADD==0&&set_st==2)
- {
- xiaxian++;
- if (xiaxian>shangxian)xiaxian=shangxian;
- }
- }
- void check_wendu(void)
- {
- uint a,b,c;
- c=ReadTemperature()-5;
- a=c/100;
- b=c/10-a*10;
- m=c/10;
- if(m<0){m=0;n=0;}
- if(m>99){m=99;n=9;}
- }
- Disp_init()
- {
- P2=0xbf;
- P1=0xfe;
- Delay(200);
- P2=0xbf;
- P1=0xfd;
- Delay(200);
- P2=0xbf;
- P1=0xfb;
- Delay(200);
- P2=0xbf;
- P1=0xf7;
- Delay(200);
- P1=0xff;
- }
- Disp_Temperature()
- {
- P2=0xc6;
- P1=0xf7;
- Delay(300);
- P2=LEDDate[n];
- P1=0xfb;
- Delay(300);
- P2=LEDDate[m/10];
- DIAN=0;
- P1=0xfd;
- Delay(300);
- P2=LEDDate[m/10];
- P1=0xfe;
- Delay(300);
- P1=0xff;
- }
- Disp_alarm(uchar baojing)
- {
- P2=0xc6;
- P1=0xf7;
- Delay(200);
- P2=LEDDate[baojing%10];
- P1=0xfb;
- Delay(200);
- if(set_st==1)P2=0x89;
- else if (set_st==2)P2=0xc7;
- P1=0xfe;
- Delay(200);
- P1=0xff;
- }
- void Alarm()
- {
- if(x>=10){beep_st=~beep_st;x=0;}
- if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1))BEEP=0;
- else BEEP=1;
- }
- void main (void)
- {
- uint z;
- InitTimer();
- EA=1;
- TR0=1;
- ET0=1;
- IT0=1;
- IT1=1;
- check_wendu();
- check_wendu();
- for(z=0;z<300;z++)
- {
- Disp_init();
- }
- while(1)
- {
- if(SET==0)
- {
- Delay(2000);
- do{;}while(SET==0);
- set_st++;x=0;shanshuo_st=1;
- if (set_st>2)set_st=0;
- }
- if(set_st==0)
- {
- EX0=0;
- EX1=0;
- check_wendu();
- Disp_Temperature();
- Alarm();
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机课程设计(1).zip
(71.91 KB, 下载次数: 17)
|