久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1532|回復: 0
打印 上一主題 下一主題
收起左側

單片機電子鐘仿真出現問題 是我的問題還是仿真的問題

[復制鏈接]
跳轉到指定樓層
樓主
本來是長按KSET可以設置時間 KINC、KDEC分別對修改對象加/減1 長按KSET結束設置 但仿真時一按KSET屏幕就滅了 并且鐘的顯示時間沒有改變 是我的問題還是仿真的問題 代碼如下麻煩大佬們了


單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define KSET 0x60
#define KSET_LONG 0x61
#define KINC 0x50
#define KDEC 0x30

sbit SPK=P3^6;

uchar code MAX[2]={24,60};
uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff};
uchar dbuf[4]={0,0,0,0};
uint count;

uchar time[3]={0,0,0};
uchar ala[2]={0,0};
uchar state;

bit update;
uchar flash=00;
uchar disp_on=0xff;

void delay(void)
{   uchar i;
    for(i=0;i<200;i++);
}

void hexbcd(uchar*tp)
{   dbuf[3]=tp[0]/10;
    dbuf[2]=tp[0]%10|0x80;
    dbuf[1]=tp[1]/10;
    dbuf[0]=tp[1]%10;
}
void disp(void)
{    static uchar cn=0;
     uchar n,bsel;
     bsel=0x01;
     for(n=0;n<4;n++)
     {   P2=bsel&disp_on|0xf0;
         P0=segtab[dbuf[n]&0x7f];
         if((dbuf[n]&0x80)!=0)
            P0=P0&0x7f;
         bsel=_crol_(bsel,1);
         delay();
         P0=0xff;
     }
     cn++;
     if(cn==100)
     {   disp_on=disp_on^flash;
         dbuf[2]=dbuf[2]^0x80;
         cn=0;
     }
}

void time0(void)interrupt 1 using 1
{   static uint n=0,m=0;
    count++;
    if(count==4000)
    {    count=0;
         time[2]++;
         if(time[2]==60)
         {    time[2]=0;
              time[1]++;
              if(state!=1)update=1;
              if(time[1]==60)
              {    time[1]=0;
                   time[0]++;
                   if(time[0]==24)
                   time[0]=0;
              }
         }
         if((state==0)&&(time[2]=0))
         {    if((time[0]==ala[0])&&(time[1]==ala[1]))
              {    flash=0x0f;
                   disp_on=0xff;
                   state=2;
                   dbuf[2]=dbuf[2]|0x80;
              }

         }
    }
    if(state==0x02)
    {    if(count%2==0)
         {    n++;
              if(n<500)
                 SPK=~SPK;
              else
                 SPK=1;
              if(n==2000)
              {   n=0;
                  m++;
                  if(m==60)
                  {   state=0;
                      m=0;
                      flash=0x00;
                      disp_on=0xff;   
                  }
             }
        }
    }
}

uchar getkey(void)
{   uchar key;
    uchar t;
    disp();
    if((key=P2&0x70)==0x70)return 0xff;
    for(t=0;t<5;t++)disp();
    if((key=P2&0x70)==0x70)return 0xff;
    while((P2&0x70)!=0x70)
    {    disp();
         if(t<250)t++;
    }
  if((t>200)&&(key==0x60))return 0x61;
  return key;
}
void set_time(uchar*tp)
{   uchar p=0;
    uchar k;
    state=1;
    flash=0x0c;
    while(1)
    {   hexbcd(tp);
        k=getkey;
        if(k==KSET)
        {   p++;
            p=p&0x01;
            disp_on=0xff;
            if(p==0x00)
                 flash=0x0c;
            else
                 flash=0x03;   
        }
      else if(k==KINC)
           {   tp[p]++;
               if(tp[p]==MAX[p])tp[p]=0;
           }
      else if(k==KDEC)
           {   tp[p]--;
               if(tp[p]==0xff)tp[p]=MAX[p]-1;
           }
      else if(k==KSET_LONG)
              break;   
    }
    hexbcd(time);
    flash=0x00;
    disp_on=0xff;
    state=0;
}
void main(void)
{
     uchar k;
     state=0;
     count=0;
     flash=0x00;
     disp_on=0xff;
     time[0]=12;
     time[1]=25;
     time[2]=55;
     ala[0]=12;
     ala[1]=26;
     hexbcd(time);
     TMOD=0x02;
     TH0=-250;
     TL0=-250;
     ET0=1;
     TR0=1;
     EA=1;
     while(1)
     {   disp();
         k=getkey();
         if(state==0x02)
         {    if(k!=0xff)
              {   state=0x00;
                  flash=0x00;
                  disp_on=0xff;
              }
         }
         else if(k==KSET_LONG)
              {
                 set_time(ala);
              }
         else if(k==KSET)
              {   TR0=0;
                  set_time(time);
                  TR0=1;
              }
         if(update==1)
         {    update=0;
              hexbcd(time);
         }
     }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品久久久久久久久久久久久 | 国产综合欧美 | 亚洲电影免费 | 男女羞羞视频大全 | 天天操夜夜艹 | 国产一区二区三区在线 | 亚洲男人天堂 | 精品一区二区三区免费毛片 | 亚洲精品1区 | 国产精品久久精品 | 日韩欧美在线视频一区 | 日韩电影免费在线观看中文字幕 | 日本精品一区二区三区在线观看 | 久久99精品久久 | 久久久久久久电影 | 国产精品久久久久一区二区三区 | 2019天天操 | 精品成人在线观看 | 亚洲免费网站 | 91免费视频观看 | 日本一区二区三区在线观看 | 日韩中文字幕高清 | 国产午夜精品一区二区三区在线观看 | 亚洲一区二区久久久 | 国产电影一区 | caoporn免费在线视频 | 91福利在线观看 | 免费av手机在线观看 | 成人在线精品视频 | 伊人手机在线视频 | 一区精品国产欧美在线 | 99精品亚洲国产精品久久不卡 | 黄色播放 | 久久国产精品一区二区 | www日韩 | 成人1区2区| 亚洲精品欧美一区二区三区 | 日韩精品视频在线 | 欧美精品国产一区二区 | 国产精品一区二区三区久久 | 亚洲在线视频 |