找回密码
 立即注册

QQ登录

只需一步,快速开始

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

帮忙分析下代码,蓝桥杯stc15单片机的板子

[复制链接]
跳转到指定楼层
楼主
ID:257618 发表于 2018-3-3 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<STC15F2K60S2.h>
  2. #include<DS1302.H>
  3. #include<DS18B20.h>
  4. #include<KEY.H>
  5. unsigned char shuma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  6. unsigned char disbuff[]={10,10,10,10,10,10,10,10};
  7. unsigned char discom=0;
  8. unsigned char keyzhi,Dtime=1,shi,fen,miao,suoyin=0;
  9. unsigned char Kflag=1,Cflag=0,CFflag=0,Lflag=0x00;
  10. unsigned char wendu[10];

  11. void display()
  12. {
  13.   P0=0xff;
  14.   P2=0xe0;
  15.   P0=0xff;
  16.   P2=0x1f;
  17.   P0=0x00;

  18.   P2=0xc0;
  19.   P0=(1<<discom);
  20.   P2=0x1f;
  21.   P0=0xff;
  22.   P2=0xe0;
  23.   P0=shuma[disbuff[discom]];
  24.   P2=0x1f;

  25.   if(++discom==8)
  26.   {
  27.     discom=0;
  28.   }
  29. }
  30. void comment()
  31. {
  32.   P2=0xa0;
  33.   P0=0x00;
  34.   P2=0x1f;
  35.   P0=0xff;
  36.   P2=0x80;
  37.   P0=0xff;
  38.   P2=0x1f;
  39. }

  40. void Timer0Init()                //1毫秒@11.0592MHz
  41. {
  42.         AUXR |= 0x80;                //定时器时钟1T模式
  43.         TMOD &= 0xF0;                //设置定时器模式
  44.         TL0 = 0xCD;                //设置定时初值
  45.         TH0 = 0xD4;                //设置定时初值
  46.         TF0 = 0;                //清除TF0标志
  47.         TR0 = 1;                //定时器0开始计时
  48.         EA=1;
  49.         ET0=1;
  50. }
  51. void Timer0() interrupt        1
  52. {
  53.   static unsigned int tt=0,a=0,t=0;
  54.   display();
  55.   if(Cflag==1)
  56.   {
  57.     tt++;
  58.         if(tt==Dtime*1000)
  59.           {
  60.             tt=0;
  61.                 wendu[a]=DS18B20read();
  62.                 a++;
  63.                 if(a==10)
  64.                 {
  65.                   a=0;
  66.                   Cflag=0;
  67.                   CFflag=1;
  68.                 }
  69.           }
  70.   }
  71.   if(CFflag==1)
  72.      {
  73.            t++;
  74.            if(t==500)
  75.              {
  76.                    t=0;
  77.                    Lflag=~(Lflag);
  78.                  }
  79.          }
  80. }
  81. void main()
  82. {
  83.   comment();
  84.   Ds1302init();
  85.   Timer0Init();
  86.   while(1)
  87.   {
  88. AA1: disbuff[0]=10;
  89.          disbuff[1]=10;
  90.          disbuff[2]=10;
  91.          disbuff[3]=10;
  92.          disbuff[4]=10;
  93.          disbuff[5]=11;
  94.          disbuff[6]=Dtime/10;
  95.          disbuff[7]=Dtime%10;
  96.      keyzhi=keyscan();
  97.          switch(Kflag)
  98.           {
  99.             case 1:Dtime=1;break;
  100.                 case 2:Dtime=5;break;
  101.                 case 3:Dtime=30;break;
  102.                 case 4:Dtime=60;break;
  103.                 default:break;
  104.           }
  105.          if(keyzhi==4)
  106.            {
  107.              Kflag++;
  108.                  if(Kflag==5)
  109.                     Kflag=1;
  110.            }
  111.          
  112.          if(keyzhi==5)
  113.            {
  114.              Cflag=1;
  115.                  while(CFflag==0)
  116.                    {
  117.                      shi=Ds1302_Single_Byte_Read(0x85);
  118.                      fen=Ds1302_Single_Byte_Read(0x83);
  119.                      miao=Ds1302_Single_Byte_Read(0x81);
  120.                      disbuff[0]=shi/16;
  121.                  disbuff[1]=shi%16;               
  122.                  disbuff[3]=fen/16;
  123.                  disbuff[4]=fen%16;
  124.                  disbuff[6]=miao/16;
  125.                  disbuff[7]=miao%16;
  126.                          if(miao%2==0)
  127.                            {
  128.                               disbuff[2]=11;
  129.                                  disbuff[5]=11;
  130.                            }
  131.                          else
  132.                            {
  133.                              disbuff[2]=10;
  134.                                  disbuff[5]=10;
  135.                            }
  136.                          }
  137.         }
  138.         if(CFflag==1)
  139.       {

  140.                 while(1)
  141.            { if(Lflag==0xff)
  142.                 {
  143.                   P0=0xff;
  144.                   P2=0x80;
  145.                   P0=0xfe;
  146.                   P2=0x1f;
  147.                 }
  148.                 else
  149.                 {
  150.                   P0=0xff;
  151.                   P2=0x80;
  152.                   P0=0xff;
  153.                   P2=0x1f;
  154.                 }
  155.                 disbuff[0]=11;
  156.             disbuff[1]=0;
  157.             disbuff[2]=0;
  158.             disbuff[3]=10;
  159.             disbuff[4]=10;
  160.             disbuff[5]=11;
  161.             disbuff[6]=wendu[0]/10;
  162.             disbuff[7]=wendu[0]%10;
  163.                 keyzhi=keyscan();
  164.                  
  165.                 if(keyzhi==6)
  166.                   {
  167.                     Lflag=0xcc;
  168.                         P0=0xff;
  169.                     P2=0x80;
  170.                     P0=0xff;
  171.                     P2=0x1f;
  172.                     while(CFflag)
  173.                           {
  174.                             disbuff[0]=11;
  175.                     disbuff[1]=0;
  176.                     disbuff[2]=suoyin;
  177.                     disbuff[3]=10;
  178.                     disbuff[4]=10;
  179.                     disbuff[5]=11;
  180.                     disbuff[6]=wendu[suoyin]/10;
  181.                     disbuff[7]=wendu[suoyin]%10;
  182.                                 keyzhi=keyscan();
  183.                                 if(keyzhi==6)
  184.                                   {
  185.                                     suoyin++;
  186.                                         if(suoyin==10)
  187.                                            suoyin=0;
  188.                                   }
  189.                             if(keyzhi==7)
  190.                                   {
  191.                                     CFflag=0;
  192.                                     Lflag=0x00;
  193.                                     goto AA1;
  194.                                   }
  195.                            }
  196.                    }
  197.                 }
  198.           }
  199.         }
  200. }
  201.          


复制代码


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

使用道具 举报

沙发
ID:257618 发表于 2018-3-3 20:15 | 只看该作者
写带有返回值的按键函数,为啥在主函数里每次用一次都的调用一次啊
回复

使用道具 举报

板凳
ID:257618 发表于 2018-3-3 20:15 | 只看该作者
写带有返回值的按键函数,为啥在主函数里每次用一次都的调用一次啊
回复

使用道具 举报

地板
ID:231500 发表于 2018-3-3 20:52 | 只看该作者
我的帖子你参考看看吧或者去我博客自己看看不行再联系我,

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:287259 发表于 2018-3-3 20:58 | 只看该作者
当按键函数返回值变化时,也就是按键变动所产生的值并没事实时给keyzhi赋值。故使用时需要不断调用。

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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