找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1742|回复: 1
打印 上一主题 下一主题
收起左侧

定时器中断不会用

[复制链接]
跳转到指定楼层
楼主
ID:295170 发表于 2018-5-19 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "STC15F2K60S2.h"
#include <intrins.H>
#include "DS18B20.h"

unsigned char dspcom=0;
unsigned char flag=0;
unsigned char Scanpoint=1;
unsigned char Choosetime,count;
unsigned char tem;
int b;
unsigned char i,a,Clock_Hour=0,Clock_Minute_tens=0,Clock_Minute_ones=0,Clock_Second_ones=0,Clock_Second_tens=0;
unsigned char Clock_1Ms=0,Clock_10Ms=0,Clock_100Ms=0;
unsigned char number=0;
unsigned char Tempnumber[10]=
{
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
};
unsigned char Temp[10];
unsigned char code Led_Display_Segment_Code[16]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //0,1,2,3,4,5,6,7   
0x7f,0x6f,0x40,0x00,                    //8,9,-,不亮,  
};
unsigned char dspbuf[10];
unsigned char  Display_Clock_Buffer[8]=
{
  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
};
sbit P1_0=P1^0;
sbit P1_1=P1^1;
  
sbit S4=P3^2;
sbit S5=P3^3;
sbit S6=P3^4;
sbit S7=P3^5;
bit S5_flag=0;
bit S6_flag=0;
bit S7_flag=0;
/**********************************************************
函数名称: Delay()      延时函数
***********************************************************/
void Delay(void)
{
unsigned char i,j;
for (i=0;i<2;i++)
  for (j=0;j<100;j++)
   _nop_();
}
/**********************************************************
函数名称: Delay1000ms()      延时函数
***********************************************************/
void Delay1000ms()  [url=]//@11.0592MHz[/url]
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
  do
  {
   while (--k);
  } while (--j);
} while (--i);
}
/**********************************************************
函数名称: Display()      数码管显示
***********************************************************/
void Display(void)
{
P0=0x00;
    P0=Led_Display_Segment_Code[dspbuf[dspcom]];
  P2=_cror_(P2,1);
    Delay();
if(++dspcom==8)
      dspcom=0;
}
/**********************************************************
函数名称: Firstshow()     采样温度数据的时间间隔的默认显示
***********************************************************/
void Firstshow(void)
{
     dspbuf[0]=11;
  dspbuf[1]=11;
  dspbuf[2]=11;
     dspbuf[3]=11;
  dspbuf[4]=11;
  dspbuf[5]=10;      
  dspbuf[6]=0;
  dspbuf[7]=1;  

}
/**********************************************************
函数名称:Secondshow()   采样温度数据的时间间隔的显示
***********************************************************/
void Secondshow(void)
{
  dspbuf[7]=Choosetime%10;
  dspbuf[6]=Choosetime/10;
  dspbuf[5]=10;
  dspbuf[4]=11;
  dspbuf[3]=11;
  dspbuf[2]=11;
  dspbuf[1]=11;
  dspbuf[0]=11;
}
/**********************************************************
函数名称:Clockshow()   显示时钟界面
***********************************************************/
void Clockshow(void)
{  
     dspbuf[7]=Clock_Second_ones;
  dspbuf[6]=Clock_Second_tens;
  dspbuf[5]=10;
  dspbuf[4]=Clock_Minute_ones;
  dspbuf[3]=Clock_Minute_tens;
  dspbuf[2]=10;
  dspbuf[1]=Clock_Hour%10;
  dspbuf[0]=Clock_Hour/10;
}
  
/**********************************************************
函数名称:Tempshow()   显示记录的温度
***********************************************************/
void Tempshow(void)
{
     dspbuf[7]=Temp[number]%10;
  dspbuf[6]=Temp[number]/10;
  dspbuf[5]=10;
  dspbuf[4]=11;
  dspbuf[3]=11;
     dspbuf[2]=Tempnumber[number]%10;
  dspbuf[1]=Tempnumber[number]/10;
  dspbuf[0]=10;
}
/**********************************************************
函数名称:Timer0Init()   定时器中断函数o
***********************************************************/   
void Timer0Init(void)  //1毫秒@12.000MHz  初始化
{
    AUXR |= 0x80;  //定时器时钟1T模式
TMOD &= 0xF0;  //设置定时器模式
TL0 = 0xCD;  //设置定时初值
TH0 = 0xD4;  //设置定时初值
TF0 = 0;  //清除TF0标志
TR0 = 1;  //定时器0开始计时
ET0=1;     //打开定时器0
EA=1;     //  开启总中断
}
void Timer0_Int(void) interrupt 1  //定时器0中断服务程序   isr_Time......
{
    TL0 = 0xA0;  //设置定时初值
TH0 = 0x15;  //设置定时初值
     if(a==0)
  {
    Display();
  }
  if(a==1)
{
     Clock_1Ms++;
     if(Clock_1Ms==10)
     {  
      Clock_10Ms++;
      if(Clock_10Ms==10)
     {
        Clock_100Ms++;
       if(Clock_100Ms==10)
       {
        Clock_Second_ones++;
       if(Clock_Second_ones==10)
       {
           Clock_Second_tens++;
          if(Clock_Second_tens==6)
         {
           Clock_Minute_ones++;
             if(Clock_Minute_ones==10)
          {
              Clock_Minute_tens++;
              if(Clock_Minute_tens==6)
              {
                    Clock_Hour++;
                if(Clock_Hour==24)
                {
                     Clock_1Ms=0;
                }
              }
          }
         }
          }
       }
    }
    }
   Clockshow();
}   
//dspbuf[0] = tem/10;
//dspbuf[1] = tem%10;
Display();
}
  /*
void Timer1Init(void)  //5000微秒@12.000MHz
{
AUXR |= 0x40;  //定时器时钟1T模式
TMOD &= 0x0F;  //设置定时器模式
TL1 = 0xA0;  //设置定时初值
TH1 = 0x15;  //设置定时初值
TF1 = 0;  //清除TF1标志
TR1 = 1;  //定时器1开始计时
}
void timer0() interrupt 1
{
   TH1=0x4c;
   TL1=0x00;
   count++;
   if(count==200)
   {  
     count=0;  //中断累计次数清0
   }
   }
*/
/**********************************************************
函数名称:Key_scan()      
***********************************************************/
void Key_scan(void)
{
     if(S4==0)
   {
        Scanpoint++;
        switch(Scanpoint)
        {
           case 1: Choosetime=1;
                   break;
           case 2: Choosetime=5;
                   break;
              case 3: Choosetime=30;
                   break;
           case 4: Choosetime=60;
                   break;
           default:Scanpoint=1;
                   Choosetime=1;
       break;
        }
     Secondshow();
      while(!S4);
  }
  if(S5==0)
   {
      S5_flag=1;  
      while(!S5);
   
   }
  if(S6==0)
   {
      S6_flag=1;
      while(!S6);
   }
   if(S7==0)
   {
      S7_flag=1;
      while(!S7);
   }
}
  
/**********************************************************
函数名称:Key_read()   
***********************************************************/
void Key_read(void)
{
   Key_scan();
    while(S5_flag==1)
   {     // P1_1=0;
      while(flag!=3)
{
     a=1;
    Timer0Init();
   Clockshow();     //时钟显示
   
// P1_1=0;
      
   Temp[flag]=Ds18b20_ReadData();    //存入读取的温度
  //  P1_1=1;
   flag++;
     Delay1000ms();
}
  S5_flag = 0;
   b = 1;
   }
   if(b == 1)
   {
             P1_1=0;
              Timer1Init();
               P1_1=1;
               Timer1Init();
   }
while(S6_flag==1)
{
     b = 0;
                       //dengmei
    for(i=0;i<10;i++)
    {
      a=0;
      Tempshow(); //显示记录的温度
  // Timer0Init();
   Delay1000ms();
   number++;
    }
}

    while(S7_flag==1)
{
      Firstshow();
   // Choosetime=1;
         Temp[10]=0;
}
}
  */
void main()
{
        P2=0xfe;
      Timer0Init();
// Timer1Init();

  while(1)
  {
      
    Key_read();
  
           // tem = Ds18b20_ReadData();   
   
  }   
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-5-19 16:52 | 只看该作者
请详细说明下问题,先转到冷门区了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表