普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2449|回复: 4

大神们,帮帮忙呀

 关闭 [复制链接]

1

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2019-8-22 12:20:10 | 显示全部楼层 |阅读模式
数码管计数0-59,计数到59的时候,蜂鸣器鸣叫一次,可以利用按键进行调节
第一次按下k1数码管停止计时,按下k2个位加,按下k3,个位减,第二次按下k1,按下k2十位加,按下k3十位减,第三次按下k1,从定时的数字继续向下走。
这个应该怎么做鸭
我自己做的有很大的问题,麻烦各位大神教教我
刚刚开始自己学单片机
只学到动态数码管


  1. #include "reg52.h"
  2. #include "intrins.h"   
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  6. u8 code white[7]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

  7. u8  i,n,j;

  8. sbit LSA=P2^2;                                                                          
  9. sbit LSB=P2^3;
  10. sbit LSC=P2^4;
  11. sbit k1=P3^1;
  12. sbit k2=P3^0;
  13. sbit k3=P3^2;
  14. sbit k4=P3^3;


  15. void delay(u16 i)
  16. {
  17.    while(i--);
  18. }

  19. /*
  20. void keypros()
  21. {
  22.    if(k1==0)
  23.    {
  24.              delay(1000);
  25.           if(k1==0)
  26.           {
  27.          



  28.           }
  29.    }
  30.    
  31. }
  32. */











  33. void DigDisplay()
  34. {
  35.    i++;
  36.    delay(50000);
  37.    P0=smgduan[i];
  38.    if(i==10)
  39.     i=0;
  40. }

  41. void DigDisplay_1()
  42. {
  43.   P0=white[0];
  44.   if(i==9)
  45.      delay(5000);
  46.      j++;
  47.      P0=white[j];
  48.   if(j==6)
  49.      j=0;


  50. }









  51. void main()
  52. {         
  53.         while(1)
  54.         {
  55.           for(n=0;n<2;n++)
  56.           {         
  57.              switch(n)
  58.                  {
  59.                    case(0):
  60.                    LSA=0,LSB=0,LSC=0;
  61.                    DigDisplay();
  62.                    break;
  63.                    case(1):
  64.                    LSA=1,LSB=0,LSC=0;
  65.                    DigDisplay_1();
  66.                    break;
  67.                  }
  68.                  delay(100);
  69.           }
  70.           
  71.         }               
  72. }
复制代码

回复

使用道具 举报

0

主题

66

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2019-8-22 13:31:18 | 显示全部楼层
设置一个标志,比如 mode,mode=0时正常走时,每按K1一下就令 mode=(mode+1)%3,那么它就会在0,1,2范围内不断变换了。mode=1时,K2、K3只能改变个位数,mode=2时K2、K3只能改变十位数就行了。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2019-8-22 19:49:25 | 显示全部楼层
神奇 发表于 2019-8-22 13:31
设置一个标志,比如 mode,mode=0时正常走时,每按K1一下就令 mode=(mode+1)%3,那么它就会在0,1,2范围内 ...

请问我这个0~59的循环有那些问题?
回复 支持 反对

使用道具 举报

0

主题

66

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2019-8-22 23:49:30 | 显示全部楼层
你的按键函数还没写好,定时器中断也没有,哪里来的0-59循环 ...
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-20 15:14 , Processed in 0.087757 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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