⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temper.c

📁 用proteus仿真做的单片机实验
💻 C
字号:
#include <reg52.h>

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                                  0xef,0xdf,0xbf,0x7f};////数码管位编码 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管段编码
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char time;
unsigned char getdata;
unsigned  int temp;
unsigned char i;

sbit ST=P3^0;//p3.0口
sbit OE=P3^1;//
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit LED1=P3^6;
sbit LED2=P3^7;
sbit BELL=P3^5;
bit lowflag;
bit highflag;
unsigned int cnta;
unsigned int cntb;
bit alarmflag;//报警标志位


void main(void)
{
  ST=0;
  OE=0;
  TMOD=0x12;//定时/计数器方式控制位,T1定时方式1,T0定时方式2
  TH0=0x216;//T0定时器初始化
  TL0=0x216;
  TH1=(65536-4000)/256;//T1定时器高位
  TL1=(65536-4000)%256;//T1定时器底位
  TR1=1;//T1运行控制位,启动运行
  TR0=1;//T0运行控制位,启动运行
  ET0=1;//T0溢出标志位
  ET1=1;//T1溢出标志位
  EA=1;//开总的中断位
  ST=1;
  ST=0;
  while(1)
    {
	//LED灯是否闪烁
      if((lowflag==1) &&(highflag==0))
        {
          LED1=0;
          LED2=1;
        }
        else if((highflag==1) && (lowflag==0))
          {
            LED1=1;
            LED2=0;
          }
          else
            {
              LED1=1;
              LED2=1;
            }
	    
    }

}

void t0(void) interrupt 1 using 0
{
  CLK=~CLK;//延时
}
//////////////定时温度A/D转换函数
void t1(void) interrupt 3 using 0
{ 
  TH1=(65536-500)/256;//定时
  TL1=(65536-500)%256;
  if(EOC==1)
         {
           OE=1;
           getdata=P0;//D/A转换
           OE=0;
           temp=getdata*25;
           temp=temp/64; 
		   dispbuf[2]=temp/100;
		   dispbuf[3]=temp/10;
		   dispbuf[4]=temp%10;

           if(getdata<77)//低温
             {
               lowflag=1;
               highflag=0;
             }
             else if(getdata>153)//高温
               {
                 lowflag=0;
                 highflag=1;
               }
               else//正常温度
                 {
                   lowflag=0;
                   highflag=0;
                 }
           ST=1;
           ST=0;
         } 
	////数码管显示	  
  P2=0xff;//数码管初选
  P1=dispcode[dispbuf[time]];//取数码管段编码
  P2=dispbitcode[time];//数码管位编码
 ////延时
  time++;
  if(time==8)
    {
      time=0;
    }
  //报警显示和蜂鸣器鸣叫
  if((lowflag==1) && (highflag==0))
    {
      cnta++;
      if(cnta==800)
        {
          cnta=0;
          alarmflag=~alarmflag;//报警位
        }
      if(alarmflag==1)
        {
          BELL=~BELL;//蜂鸣器报警
        }
    }
    else if((lowflag==0) && (highflag==1))
      {
      cntb++;
      if(cntb==400)
        {
          cntb=0;
          alarmflag=~alarmflag;
        }
      if(alarmflag==1)
        {
          BELL=~BELL;
        }        
      }
      else
        {
          alarmflag=0;
          cnta=0;
          cntb=0;
        }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -