OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5553|回复: 1

51单片机,定时器已初始化,为何不工作

[复制链接]

5

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-5-25
在线时间
4 小时
发表于 2018-4-13 11:13:10 | 显示全部楼层 |阅读模式
1金钱

/*--------函数申明--------*/
void mode_change();
void Init_Timer0(void);
void Init_Timer1(void);

int main()
{
        LCD_Init();
        WRITE_Str(1,3,"Hello World",11);
        WRITE_Str(2,1,"Welcome to Use",14);
        sys_delays(5);
        LCD_Clear();
        WRITE_Str(1,3,"Choose mode",11);
        mode_change();
        WRITE_Str(2,3,"Tempture:",9);
        WRITE_COM(0x80+0x40+12);
        WRITE_DATA(0xdf);
        WRITE_DATA(0x43);
        Init_Timer0();
        Init_Timer1();
        while(1)
        {
                while(mode == 1)
                {
                        if(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=1;
                                L3=1;
                                TR1=1;
                                FS=0;
                                while(Flag_5s == 0);
                                TR1=0;
                                FS=1;
                                Flag_5s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
               
                while(mode == 2)
                {
                        if(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=0;
                                L3=1;
                                TR1=1;
                                FS=0;
                                while(Flag_10s == 0);
                                TR1=0;
                                FS=1;
                                Flag_10s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
               
                while(mode == 3)
                {
                        if(GD == 0)
                        {
                                sys_delayxms(200);
                                Counter=0;
                                L1=0;
                                L2=0;
                                L3=0;
                                TR1=1;
                                FS=0;
                                while(Flag_15s == 0);
                                TR1=0;
                                FS=1;
                                Flag_15s=0;
                        }
                        if(K1 == 0)
                  {
                          sys_delayxms(10);
                          if(K1 == 0)
                          {
                                  mode=1;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:1",6);
                          }
                  }
            if(K2 == 0)
            {
                          sys_delayxms(10);
                    if(K2 == 0)
                    {
                                  mode=2;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:2",6);
                          }
                  }
                  if(K3 == 0)
                  {
                          sys_delayxms(10);
                          if(K3 == 0)
                          {
                                  mode=3;
                                        LCD_Clear();
                WRITE_Str(1,7,"Mode:3",6);
                          }
                  }
                }
        }
}

//模式选择
void mode_change()
{
        mode=0;
        while(mode == 0)
        {
                if(K1 == 0)
                {
                        sys_delayxms(10);
                        if(K1 == 0)
                        {
                                mode=1;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:1",6);
                        }
                }
                if(K2 == 0)
                {
                        sys_delayxms(10);
                        if(K2 == 0)
                        {
                                mode=2;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:2",6);
                        }
                }
                if(K3 == 0)
                {
                        sys_delayxms(10);
                        if(K3 == 0)
                        {
                                mode=3;
                                LCD_Clear();
              WRITE_Str(1,7,"Mode:3",6);
                        }
                }
        }
}

void Init_Timer0(void)
{
        TMOD |= 0x01 ;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
  TH0=(65535-50000)/256;                //给定初值
  TL0=(65535-50000)%256;          
  EA=1;                    //总中断打开
  ET0=1;                   //定时器中断打开
  TR0=1;                   //定时器开关关闭
}

void Timer0_IRS() interrupt 1
{
        TH0=(65535-60000)/256;                //给定初值
  TL0=(65535-60000)%256;  
  Tem_Counter++;
        if(Tem_Counter >= 25)
        {
                Tem_Counter=0;
                ReadTemperature();
                WRITE_Num(2,10,Tempture%100/10);
                WRITE_Num(2,11,Tempture%10);
                if(Tempture > 30)
                        BZ=0;
                else
                        BZ=1;
        }
}

void Init_Timer1(void)
{
        TMOD |= 0x10 ;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
  TH1=(65535-50000)/256;                //给定初值
  TL1=(65535-50000)%256;          
  EA=1;                    //总中断打开
  ET1=1;                   //定时器中断打开
  TR1=0;                   //定时器开关关闭
}

void Timer1_IRS() interrupt 3
{
        TH1=(65535-50000)/256;                //给定初值
  TL1=(65535-50000)%256;  
        Counter++;
        if(mode == 1 && Counter == 100)
        {
                Counter=0;
                Flag_5s=1;
        }
        if(mode == 2 && Counter == 200)
        {
                Counter=0;
                Flag_10s=1;
        }
        if(mode == 3 && Counter == 300)
        {
                Counter=0;
                Flag_15s=1;
        }
}

下面是仿真图


1.PNG

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-5-25
在线时间
4 小时
 楼主| 发表于 2018-4-13 11:13:11 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-1 11:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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