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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機倒計時程序設計問題,鍵盤加不進去 求大神解答,

[復制鏈接]
跳轉到指定樓層
樓主
設計倒計時程序,要求按1,10秒倒計時,按2,20秒倒計時。我寫了倒計時程序但鍵盤加不進去。求大神解答,可酬金答謝
    說明:P0段選,P2位選。共陽極數碼管

#include<reg52.h>
unsigned char shi,ge,num1,num2,a;
unsigned int x,y,z;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code shu[]={0,10,20,30};
void delay(x);
void shuhanshu(a);                                                  
void display(shi,ge);

unsigned char key()
{unsigned char row=0,col=0,k;
        unsigned  int t;
  P3=0x0F;          //行列
  if(P3==0x0F)
  return k;
  t=20000;while(t--);
  if(P3==0x0F)
  return k;
  for(row=0;row<4;row++)
  {
          P3=~(0x80>>row);
          k=P3&0x0F;
          if(k!=0x0F)
          {
                while(k&(0x08>>col))
            col++;
                k=15-(row*4+col);
                /*        P1=0x0f;
                        while(P1!=0x0F);*/
                return k;
        }
  }
}

void delay(x)
{
   for(y=x;y>0;y--)
     for(z=110;z>0;z--);
}                                                                   //延時

void display(shi,ge)
{
           P0=table[shi];
           P2=0x7f;
           delay(5);
           P0=table[ge];
           P2=0xbf;
           delay(5);
}

void main()
{
        key();
        a=key();
        num1=shu[a];
    TMOD=0x01;
    EA=1;
    ET0=1;
    TR0=1;
  while(1)
  {     
      display(shi,ge);
      if(num2==20)
        {
          num2=0;
          num1--;
          if(num1==0)
           num1=shu[a];
          shi=num1/10;
          ge=num1%10;
        }                     
  }
}
void time1() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num2++;                                                   //定時器         
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:334343 發表于 2018-12-19 21:39 | 只看該作者
求大神幫忙啊
回復

使用道具 舉報

板凳
ID:186249 發表于 2018-12-19 22:52 | 只看該作者
把按鍵程序放到 while 里啊
回復

使用道具 舉報

地板
ID:213173 發表于 2018-12-20 08:56 | 只看該作者
給你改用5ms查詢方法完成動態數碼管顯示和倒計時,用開發板的矩陣鍵盤P3.7模擬地可以成為4個獨立按鍵。
#include<reg52.h>
sbit key1=P3^0;
sbit key2=P3^1;
//sbit key3=P3^2;
//sbit key4=P3^3;

sbit GND=P3^7;//開發板矩陣鍵盤模擬地
unsigned char shi,ge,num1=0,num2=0;//a;
//unsigned int x,y,z;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//unsigned char code shu[]={0,10,20,30};
//void delay(x);
//void shuhanshu(a);                                                  
//void display();

void key()
{
        static bit key1_sign,key2_sign;        //靜態-按鍵自鎖標志
        static unsigned char count1,count2;//靜態-消抖計數變量                       
        if(!key1)                                                //按鍵1按下
        {
                //   10ms消抖          自鎖長按無效       倒計時中鎖定按鍵無效
                if((++count1>=2)&&(key1_sign==0)&&(num1==0))
                {                       
                        key1_sign=1;        //按鍵1自鎖標志置1
                        num1=10;                        //倒計時變量賦值
                        num2=0;                        //計時變量清0
                }
        }
        else                                         //按鍵1抬起
        {
                key1_sign=0;                        //按鍵1自鎖標志清0
                count1=0;                                //消抖計數1清0
        }

        if(!key2)                                        //按鍵2按下
        {
                if((++count2>=2)&&(key2_sign==0)&&(num1==0))
                {                       
                        key2_sign=1;        //按鍵2自鎖標志置1
                        num1=20;
                        num2=0;
                }
        }
        else                                        //按鍵2抬起
        {
                key2_sign=0;                        //按鍵2自鎖標志清0
                count2=0;                                //消抖計數2清0
        }
}
/*
void delay(x)
{
   for(y=x;y>0;y--)
     for(z=110;z>0;z--);
} */
void display()
{
        static bit i=0;
        shi=num1/10;
        ge=num1%10;
        P0=0xff;//消隱
        if(i==0)
        {
                P0=table[shi];
                P2=0x7f;
                i=~i;
        }
        else
        {
                P0=table[ge];
                P2=0xbf;
                i=~i;
        }
}

void main()
{
//        key();
//        a=key();
//        num1=shu[a];
        TMOD=0x01;
        TH0=(65536-5000)/256;//5ms
        TL0=(65536-5000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        GND=0;
        while(1)
        {     
                if(TF0==1)//查詢定時器中斷溢出標志
                {
                        TF0=0;
                        key();
                        num2++;
                        if(num2==200)//1秒
                        {
                                num2=0;
                                if(num1>0)
                                        num1--;
                        }                     
                        display();
                }
        }
}
void time1() interrupt 1
{
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;      
}
回復

使用道具 舉報

5#
ID:334343 發表于 2018-12-20 20:57 | 只看該作者
wsxujn 發表于 2018-12-19 22:52
把按鍵程序放到 while 里啊

謝大佬啊,點醒了我,有點效果了,我在小改一下。
回復

使用道具 舉報

6#
ID:334343 發表于 2018-12-20 21:02 | 只看該作者
wulin 發表于 2018-12-20 08:56
給你改用5ms查詢方法完成動態數碼管顯示和倒計時,用開發板的矩陣鍵盤P3.7模擬地可以成為4個獨立按鍵。
#i ...

謝,大佬,但是沒看太懂,而且我們在仿真板上做的實驗

6.png (36.13 KB, 下載次數: 15)

6.png
回復

使用道具 舉報

7#
ID:334343 發表于 2018-12-25 22:09 | 只看該作者
以解決,感興趣的可以看看
#include<reg51.h>
unsigned char shi=0,ge=0,num1,num2,a;
unsigned int x,y,z;
unsigned char code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display(shi,ge);
unsigned char key()             //鍵盤
{
unsigned char row=0,col=0,k;
unsigned  int t;
  P3=0x0F;          
  if(P3==0x0F)
    return k;
  t=20000;while(t--);
  if(P3==0x0F)
    return k;
  for(row=0;row<4;row++)
  {
          P3=~(0x80>>row);
          k=P3&0x0F;
          if(k!=0x0F)
          {
                while(k&(0x08>>col))
            col++;
                k=15-(row*4+col);
                return k;
        }
  }
}                                                               

void delay(x)                   //延時
{  
  for(y=x;y>0;y--)
  for(z=110;z>0;z--);
}                                                                                                                         
void display(shi,ge)          //段選位選控制函數
{      
   P0=table[shi];  
   P2=0x7f;
   delay(5);
   P0=table[ge];
   P2=0xbf;   
   delay(5);
  }                                                         
main()                      //主函數
{  
   TMOD=0x01;
   EA=1;ET0=1;TR0=1;
   P0=0xc0;
   P2=0x3f;
   a=key();
   if(a==1)
     num1=11;
   if(a==2)
     num1=21;
   if(a==3)
     num1=31;
   if(a==4)
     num1=41;
   if(a==5)
     num1=51;
   if(a==6)
     num1=61;
  if(a==1||a==2||a==3||a==4||a==5||a==6)
{while(1)
{     
   display(shi,ge);
   if(num2==20)
     {   
       num2=0;
       num1--;
           if(num1==0)
         return;
           if(key()==0)
             return;       
       shi=num1/10;
       ge=num1%10;
     }  
  }
}
}                                                               
void time1() interrupt 1
{      
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   num2++;
}                                                         
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97国产一区二区 | 国产精品九九视频 | 欧美精品在线观看 | 午夜在线视频 | 91香蕉嫩草 | 中文字幕电影在线观看 | 国产乱码精品一区二区三区忘忧草 | 国产精品99精品久久免费 | 性高朝久久久久久久3小时 av一区二区三区四区 | 中文字幕在线一区二区三区 | caoporn视频在线| 一区二区在线免费观看 | 日本五月婷婷 | 欧美日韩国产在线观看 | 国产精品久久毛片av大全日韩 | 亚洲一区欧美 | 午夜av电影院 | 黄色国产视频 | 久久精品毛片 | 精品91久久久 | 久久精品久久久久久 | 日本大香伊一区二区三区 | 日本一二三区高清 | 一区二区国产精品 | 国产精品视频在 | 久久一区二区av | 蜜桃臀av一区二区三区 | 久久久国产一区二区三区四区小说 | 日韩精品免费视频 | h视频在线看 | 国产黄色一级片 | 一道本不卡 | 一区二区三区免费 | 欧美日韩中文字幕在线 | 日韩毛片在线观看 | 国产亚洲欧美日韩精品一区二区三区 | 综合色久 | 综合在线视频 | 九色91视频 | 国产在线精品一区二区 | 伊人在线视频 |