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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 2409 | 評論數: 6 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2018-12-19 14:22

正文摘要:

設計倒計時程序,要求按1,10秒倒計時,按2,20秒倒計時。我寫了倒計時程序但鍵盤加不進去。求大神解答,可酬金答謝     說明:P0段選,P2位選。共陽極數碼管 #include<reg52.h> unsigned char s ...

回復

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++;
}                                                         
ID:334343 發表于 2018-12-20 20:57
wsxujn 發表于 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;      
}
ID:186249 發表于 2018-12-19 22:52
把按鍵程序放到 while 里啊
ID:334343 發表于 2018-12-19 21:39
求大神幫忙啊

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 颜色网站在线观看 | 色888www视频在线观看 | av免费在线观看网站 | 国产一区高清 | 婷婷色国产偷v国产偷v小说 | 四色成人av永久网址 | 欧美视频1区 | 人人做人人澡人人爽欧美 | 久久久www成人免费精品张筱雨 | 色视频一区二区 | 在线中文字幕视频 | 一区二区福利视频 | 羞羞视频在线观看 | 亚洲成年在线 | 国产一区在线视频 | 国产成人免费视频网站高清观看视频 | 中文字幕日韩欧美 | 在线天堂免费中文字幕视频 | www国产成人免费观看视频,深夜成人网 | 欧美精品在线播放 | 久久精品国产亚洲 | 成人国产精品免费观看 | 精品国产乱码久久久久久牛牛 | 婷婷丁香在线视频 | 国产农村一级国产农村 | 天天干天天草 | 精品福利一区 | 蜜桃在线视频 | 久久久久久国产精品 | 色天天综合 | 精品免费国产一区二区三区四区介绍 | 男女视频在线观看免费 | 欧美精品一区二区免费 | 日韩免费在线观看视频 | 一区二区三区回区在观看免费视频 | 欧美在线成人影院 | 黄色一级视频免费 | 欧美色综合| 久久综合久久自在自线精品自 | 羞羞在线观看视频 | 天色综合网 |