找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序想改成K1为低电平时数码管开始15秒倒计时然后led亮

  [复制链接]
跳转到指定楼层
楼主
ID:1001243 发表于 2022-1-14 00:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
现在是检测电平变化就开始倒计时然后led亮,
我现在想改成K1为低电平时数码管开始15秒倒计时然后led亮,K1为高电平时led灭倒计时也直接置零改咋改啊!救救孩子都改好久了
单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>


  4. #define uint8_t unsigned char
  5. #define uint16_t  unsigned  int


  6. sbit K1=P3^1;
  7. sbit LED1=P3^3;
  8. sbit LED2=P3^4;



  9. uint8_t miao=0;
  10. uint8_t knum[8];
  11. uint8_t hour_A = 0,min_A = 0,sec_A=0;

  12. uint8_t code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xBF,0xc7};
  13. //D?êy
  14. uint8_t code index[]={0xFD,0xFE};  


  15. void delay(uint16_t z)                 
  16. {
  17.         uint16_t i,j;
  18.         for(i=0;i<z;i++)
  19.         for(j=0;j<121;j++);
  20. }

  21. void display()               
  22. {
  23.         uint8_t i;        
  24.                 for(i=0;i<2;i++)   
  25.                 {
  26.                         P0=0xff;
  27.                         P2=index[ i];        
  28.                                         P0=tab[knum[ i]];         
  29.                  delay(2);               
  30.                 }
  31. }


  32. uint8_t num,Value;

  33. bit start = 0;


  34. void main()
  35. {         
  36.         TMOD=0x01;                                                                  
  37.         TH0=(65536-10000)/256;                                          
  38.         TL0=(65536-10000)%256;                                          
  39.         ET0=1;                                                                          
  40.         TR0=1;                                                                          
  41.         EA=1;
  42.         
  43.         while(1)
  44.         {
  45.      if(!K1)
  46.                  {
  47.                          while(!K1);
  48.                          if(miao==0)
  49.                          {
  50.                                  start = 1;
  51.                                  miao = 15;
  52.                          }
  53.                  }
  54.                         knum[1] = miao/10;
  55.                         knum[0] = miao%10;;

  56.                 display();
  57.   }
  58. }

  59. void T0_timer () interrupt 1                                       
  60. {
  61.         TH0=(65536-50000)/256;                                                
  62.         TL0=(65536-50000)%256;                                                
  63.         if(start)
  64.         {
  65.                 LED1 = 0;
  66.                 LED2 = 0;
  67.           num++;
  68.           if(num>20)
  69.                 {
  70.                         num = 0;
  71.                         if(miao>0)
  72.                         {
  73.                                 miao--;
  74.                         }
  75.                         else if(miao==0)
  76.                         {
  77.                                 start = 0;
  78.                         }
  79.                 }
  80.         }
  81.         else
  82.         {
  83.                 LED1 = 1;
  84.                 LED2 = 1;
  85.         }
  86. }

复制代码


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

使用道具 举报

沙发
ID:1001243 发表于 2022-1-14 02:30 | 只看该作者
咋还没过审,我真的快被逼疯了
回复

使用道具 举报

板凳
ID:992936 发表于 2022-1-14 06:47 | 只看该作者
现在是让灯变成灯,然后 我想把灯变成亮灯,然后开始为花样改制,然后把灯改成彩色灯,然后把灯改成彩色灯,然后把灯改亮,然后把灯改亮,然后把灯改成灯亮了!救救孩子都改好久了
回复

使用道具 举报

地板
ID:992936 发表于 2022-1-14 06:51 | 只看该作者
发表于2022-1-14 00:17

现在是让灯变成灯,然后
我想把灯变成亮灯,然后开始为花样改制,然后把灯改成彩色灯,然后把灯改成彩色灯,然后把灯改亮,然后把灯改亮,然后把灯改成灯亮了!救救孩子都改好久了

表达有点混乱,是不是熬夜不太清醒了,
回复

使用道具 举报

5#
ID:1001243 发表于 2022-1-14 08:13 | 只看该作者
timeo 发表于 2022-1-14 06:51
发表于2022-1-14 00:17

现在是让灯变成灯,然后

就是现在的状态我3.1端口接一个红外反射装置当有物体经过红外的时候(就是电平发生变化的时候),然后led亮,数码管开始倒计时15秒,计时15秒后数码管置零。
我现在想要改成红外被挡住的时候(为低电平时)数码管开始15秒倒计时,led灯亮。当红外不被挡住的时候(变为高电平时)数码管立即置零,led灯灭。
回复

使用道具 举报

6#
ID:53621 发表于 2022-1-14 09:10 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>


  4. #define uint8_t unsigned char
  5. #define uint16_t  unsigned  int


  6. sbit K1=P3^1;
  7. sbit LED1=P3^3;
  8. sbit LED2=P3^4;



  9. uint8_t miao=0;
  10. uint8_t knum[8];
  11. uint8_t hour_A = 0,min_A = 0,sec_A=0;

  12. uint8_t code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xBF,0xc7};
  13. //D?êy
  14. uint8_t code index[]={0xFD,0xFE};


  15. void delay(uint16_t z)
  16. {
  17.     uint16_t i,j;
  18.     for(i=0;i<z;i++)
  19.         for(j=0;j<121;j++);
  20. }

  21. void display()
  22. {
  23.     uint8_t i;
  24.     for(i=0;i<2;i++)
  25.     {
  26.         P0=0xff;
  27.         P2=index[i];
  28.         P0=tab[knum[ i]];
  29.         delay(2);
  30.     }
  31. }


  32. uint8_t num,Value;

  33. bit start = 0;


  34. void main()
  35. {
  36.     TMOD=0x01;
  37.     TH0=(65536-10000)/256;
  38.     TL0=(65536-10000)%256;
  39.     ET0=1;
  40.     TR0=1;
  41.     EA=1;

  42.     while(1)
  43.     {
  44.         if(!K1)
  45.         {
  46.             delay(10); //根据具体时间调整里面参数,主要是去掉一点抖动
  47.            if(!K1)
  48.                start = 1;
  49.             if(miao==0)
  50.             {
  51.                 miao = 15;
  52.             }
  53.         }
  54.         else
  55.         {
  56.             start = 0;
  57.             miao = 0;
  58.         }
  59.         knum[1] = miao/10;
  60.         knum[0] = miao%10;;
  61.         display();
  62.     }
  63. }

  64. void T0_timer () interrupt 1
  65. {
  66.     TH0=(65536-50000)/256;
  67.     TL0=(65536-50000)%256;
  68.     if(start)
  69.     {
  70.         LED1 = 0;
  71.         LED2 = 0;
  72.         num++;
  73.         if(num>20)
  74.         {
  75.             num = 0;
  76.             if(miao>0)
  77.             {
  78.                 miao--;
  79.             }
  80.             else if(miao==0)
  81.             {
  82.                 start = 0;
  83.             }
  84.         }
  85.     }
  86.     else
  87.     {
  88.         LED1 = 1;
  89.         LED2 = 1;
  90.     }
  91. }
复制代码
回复

使用道具 举报

7#
ID:945127 发表于 2022-1-14 09:47 来自手机 | 只看该作者
建一个初始值为0的变量,当判断红外被挡住时,变量值变成1,打开中断,之后再加一个判断,如果红外没有被挡住并且变量值为1,关闭中断
回复

使用道具 举报

8#
ID:53621 发表于 2022-1-14 10:12 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>


  4. #define uint8_t unsigned char
  5. #define uint16_t  unsigned  int


  6. sbit K1=P3^1;
  7. sbit LED1=P3^3;
  8. sbit LED2=P3^4;



  9. uint8_t miao=0;
  10. uint8_t knum[8];
  11. uint8_t hour_A = 0,min_A = 0,sec_A=0;

  12. uint8_t code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xBF,0xc7};
  13. //D?êy
  14. uint8_t code index[]={0xFD,0xFE};


  15. void delay(uint16_t z)
  16. {
  17.     uint16_t i,j;
  18.     for(i=0;i<z;i++)
  19.         for(j=0;j<121;j++);
  20. }

  21. void display()
  22. {
  23.     uint8_t i;
  24.     for(i=0;i<2;i++)
  25.     {
  26.         P0=0xff;
  27.         P2=index[i];
  28.         P0=tab[knum[ i]];
  29.         delay(2);
  30.     }
  31. }


  32. uint8_t num,Value;

  33. bit start = 0;


  34. void main()
  35. {
  36.     TMOD=0x01;
  37.     TH0=(65536-10000)/256;
  38.     TL0=(65536-10000)%256;
  39.     ET0=1;
  40.     TR0=1;
  41.     EA=1;

  42.     while(1)
  43.     {
  44.         if(!K1)
  45.         {
  46.             delay(10); //根据具体时间调整里面参数,主要是去掉一点抖动
  47.            if(!K1)
  48.                start = 1;
  49.             if(miao==0)
  50.             {
  51.                 miao = 15;
  52.             }
  53.         }
  54.         else
  55.         {
  56.             start = 0;
  57.             miao = 0;
  58.         }
  59.         knum[1] = miao/10;
  60.         knum[0] = miao%10;;
  61.         display();
  62.     }
  63. }

  64. void T0_timer () interrupt 1
  65. {
  66.     TH0=(65536-50000)/256;
  67.     TL0=(65536-50000)%256;
  68.     if(start)
  69.     {
  70.         LED1 = 0;
  71.         LED2 = 0;
  72.         num++;
  73.         if(num>20)
  74.         {
  75.             num = 0;
  76.             if(miao>0)
  77.             {
  78.                 miao--;
  79.             }
  80.             else if(miao==0)
  81.             {
  82.                 start = 0;
  83.             }
  84.         }
  85.     }
  86.     else
  87.     {
  88.         LED1 = 1;
  89.         LED2 = 1;
  90.     }
  91. }
复制代码


看你代码写的还不错,只是思路不太清晰,你照我这样改试试,可能还需要微调,多调调你就能进步了。
回复

使用道具 举报

9#
ID:415064 发表于 2022-1-14 10:25 | 只看该作者
本帖最后由 wojiaoguogai 于 2022-1-14 11:53 编辑

int flag=0;//被挡住==1,否则==0
int time = 0;//秒数计数
int timeout = 0;//被挡住超过15秒==1
if(flag == 1)//被挡住
{
    if(time ==0 && timeout  ==0)//自减时间为0且不在超时状态
    {
        time = 15;
        开led;         timeout  =1;
    }
    else if(time  > 0)
    {
        time--;
        显示数码管时间
    }
    else  if(time ==0 && timeout  ==1)//被挡住超过15秒,关灯, 要保证这个超时状态,当没有下一个没有挡住数码管才能重新自减
    {
        led灭;
        数码管灭;
        time=0;
    }
}
else//没有挡住
{
timeout  =0;
led灭;
数码管灭;
time=0;
}

回复

使用道具 举报

10#
ID:53621 发表于 2022-1-14 10:32 | 只看该作者
  1.         if(!K1) //低电平
  2.         {
  3.             delay(10); //根据具体时间调整里面参数,主要是去掉一点抖动
  4.            if(!K1)
  5.                start = 1;
  6.             if(miao==0)
  7.             {
  8.                 miao = 15;
  9.             }
  10.         }
  11.         else  //高电平马上清零
  12.         {
  13.             start = 0;
  14.             miao = 0;
  15.         }
  16.         knum[1] = miao/10;
  17.         knum[0] = miao%10;;
  18.         display();
复制代码
回复

使用道具 举报

11#
ID:332444 发表于 2022-1-14 11:01 | 只看该作者
那就表示要一直按住按键看到倒计时
回复

使用道具 举报

12#
ID:161164 发表于 2022-1-14 11:34 | 只看该作者
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>
  4. #define uint8_t unsigned char
  5. #define uint16_t  unsigned  int
  6. sbit K1 = P3 ^ 1;
  7. sbit LED1 = P3 ^ 3;
  8. sbit LED2 = P3 ^ 4;
  9. bit Flag_2ms = 0;
  10. bit K1_O;
  11. uint8_t miao = 0;
  12. uint8_t knum[8];
  13. uint8_t hour_A = 0, min_A = 0, sec_A = 0;
  14. uint8_t code tab[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0x89, 0xBF, 0xc7};
  15. //D?êy
  16. uint8_t code index[] = {0xFD, 0xFE};
  17. void delay(uint16_t z)
  18. {
  19.     uint16_t i, j;
  20.     for(i = 0; i < z; i++)
  21.         for(j = 0; j < 121; j++);
  22. }
  23. void display()
  24. {
  25.     static uint8_t i = 0;

  26.     P0 = 0xff;
  27.     P2 = index[i];
  28.     P0 = tab[knum[i]];
  29.     i = ++i % 2;
  30. }
  31. uint16_t num, Value;
  32. bit start = 0;
  33. void main()
  34. {
  35.     TMOD = 0x01;
  36.     TH0 = (65536 - 2000) / 256;
  37.     TL0 = (65536 - 2000) % 256;
  38.     ET0 = 1;
  39.     TR0 = 1;
  40.     EA = 1;
  41.     while(1)
  42.     {
  43.         if(Flag_2ms)
  44.         {   Flag_2ms = 0;
  45.             if(!K1)
  46.             {
  47.                 if(K1_O != K1) {
  48.                     miao = 15;
  49.                 }
  50.                 LED1 = 0;
  51.                 LED2 = 0;
  52.                 num++;
  53.                 if(num > 500)
  54.                 {
  55.                     num = 0;
  56.                     if(miao > 0)
  57.                     {
  58.                         miao--;
  59.                     }
  60.                 }
  61.             }
  62.             else
  63.             {
  64.                 LED1 = 1;
  65.                 LED2 = 1;
  66.                 miao = 0;
  67.                 num = 0;
  68.             }
  69.             K1_O = K1;
  70.             knum[1] = miao / 10;
  71.             knum[0] = miao % 10;
  72.             display();
  73.         }
  74.     }
  75. }
  76. void T0_timer () interrupt 1
  77. {
  78.     TH0 = (65536 - 2000) / 256;
  79.     TL0 = (65536 - 2000) % 256;
  80.     Flag_2ms = 1;
  81. }

复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

13#
ID:1001843 发表于 2022-1-14 11:38 | 只看该作者
timeo 发表于 2022-1-14 06:51
发表于2022-1-14 00:17

现在是让灯变成灯,然后

"让灯变成灯"啥意思?
点亮?
回复

使用道具 举报

14#
ID:8222 发表于 2022-1-14 11:43 | 只看该作者
这表达意思真是无法了解。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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