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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機矩陣鍵盤設置完以后怎么等待兩秒之后復位,大神幫我看看紅色部分的

[復制鏈接]
跳轉到指定樓層
樓主
ID:272089 發表于 2018-9-28 21:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
30黑幣

#include<reg51.h>

#include<intrins.h>


#define uchar unsigned char

#define uint  unsigned int

#define on    0

#define off   1


void delay(uint i){while(i--);}


sbit f=P1^6;      sbit k=P1^5;           sbit ka=P1^4;

sbit cs1=P2^0;    sbit cs2=P2^1;   sbit wr=P2^2;

sbit DQ=P1^2;     sbit con=P1^3;

sbit LED0=P2^3;   sbit LED1=P2^4;  sbit LED2=P2^5;

sbit LED3=P2^6;   sbit LED4=P2^7;

sbit sw0=P3^0;          sbit sw1=P3^1;   sbit sw2=P3^2;    sbit sw3=P3^3;

sbit row0=P1^0;   sbit row1=P1^1;

sbit col0=P3^4;   sbit col1=P3^5;  sbit col2=P3^6;   sbit col3=P3^7;

                                                                                                                                       //10 o  11 n  12 -  13 滅 14 E  15 r

uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xa3, 0xab, 0xbf, 0xff, 0x86, 0x9f};

uchar buf[8];

uchar TCL,TCH,TC,szwd=25,sjwd=0;

uint c=0;

bit fflag=0,keydown=0,swsz=0,sws=0,sdss=0,sdjr=0;


uchar key()

{

    uchar k=25;

        row0=0;   k=col0==0?1:col1==0?2:col2==0?3:col3==0?4:k;    row0=1;

        row1=0;   k=col0==0?5:col1==0?6:col2==0?7:k;              row1=1;

        return k;

}


/*   數碼管驅動   */

void dis()

{

     uchar i,j=0x7f;

         for(i=0;i<8;i++)

         {

              cs1=0;cs2=1;

                  P0=ledcode[buf[ i]];wr=1;wr=0;

                  cs1=1;cs2=0;

                  P0=j;wr=1;wr=0;

                  delay(100);

                  j=_cror_(j,1);

                  cs1=cs2=0;

                  P0=0xff;wr=1;wr=0;

         }

}

//初始化DS18B20,成功返回0,失敗返回1

bit STA_1820(void){

    bit ack;

        DQ=1;delay(5);

        DQ=0;delay(80);           //拉低總線480~960μS

        DQ=1;delay(5);           //拉高等待15~60μS

    ack=DQ;delay(50);  //讀應答位并延時480μS以上

    return ack;        

}


//讀DS18B20一字節,返回讀到的數

char Read_1820(void){

        unsigned char i,dat=0;

        for(i=0;i<8;i++){

                DQ=0; dat>>=1;         //拉低,右移兼延時

                DQ=1; if(DQ)dat|=0x80; //拉高,讀數據

                delay(7);                           //延時使總時間>60μS

        }

        return(dat);

}


//向DS18B20寫一字節,參數為要寫的數

void Write_1820(unsigned char dat){

        unsigned char i;

        for(i=0;i<8;i++)

    {

                DQ=0;                                  //拉低開始

                DQ=dat&0x01; delay(7);//送數并保持60μS以上

                DQ=1; dat>>=1;                  //拉高,右移準備下一位

        }

}


void st()                                          

{

    if(STA_1820())return;

        Write_1820(0xcc);

        Write_1820(0x44);

}


unsigned int rt(void)                   //讀溫度

{

    STA_1820();

        Write_1820(0xcc);

        Write_1820(0xbe);

        TCL=Read_1820();

        TCH=Read_1820();

        return(TCH*0X100+TCL)*0.0625;

}

uchar j,n=3,s,s1=1;                                                                                                        

void main()

{

  TMOD=0x01;

  EA=ET0=1;

  while(1)

  {

    if(k==0)

        {

            EA=0;st();EA=1;

                EA=0;sjwd=rt();EA=1;

            buf[0]=10;

                buf[1]=11;

                buf[2]=12;

                buf[3]=szwd/10;

                buf[4]=szwd%10;

                buf[5]=12;

                buf[6]=(sjwd)/10;

                buf[7]=(sjwd)%10;

                //按鍵處理部分

                if(key()!=25&&keydown==0)

                {

                     delay(200);

                         if(key!=25)

                         {

                             j=key();                                          //取鍵值

                 keydown=1;

                             switch(j)

                           {

                               case 1:                                                  //水位設置

                                        swsz=1;

                                                break;

                                  /* case        2:                                          //水溫設置

                                        sws=1;

                                                break;

                                   case 3:                                                  //手動上水

                                        sdss=!sdss;

                                                break;

                                   case 4:                                                  //手動加熱

                                        sdjr=!sdjr;

                                                break;*/               

                           }

                     }

                }            

                if(key()==25)keydown=0;

                //水位處理

                if(swsz==0&&key()==25)                                                                                                                         //檢測

                {

                        if(sw0&&sw1&&sw2&&sw3){LED0=0;LED1=1;LED2=1;LED3=1;LED4=1;}                                         //0%                          LED0亮

                    if(sw0==0){LED0=1;LED1=0;LED2=1;LED3=1;LED4=1;}                                                                 //20%                          LED1亮

                    if(sw0==0&&sw1==0){LED0=1;LED1=1;LED2=0;LED3=1;LED4=1;}                                                 //50%                          LED2亮

                    if(sw0==0&&sw1==0&&sw2==0){LED0=1;LED1=1;LED2=1;LED3=0;LED4=1;}                                 //80%                          LED3亮

                    if(sw0==0&&sw1==0&&sw2==0&&sw3==0){LED0=1;LED1=1;LED2=1;LED3=1;LED4=0;}                 //100%                          LED4亮

                }

        if(swsz==1&&key()==1)                             //水位設置

                        {        

                            while(key()==1);                        

                                n=(n+1)%4;                                         //支取0~3

                                switch(n)

                                {

                                    case 0:

                                             LED0=1;LED1=0;LED2=1;LED3=1;LED4=1;                 //設置20%水位

                                                 break;

                                        case 1:

                                             LED0=1;LED1=1;LED2=0;LED3=1;LED4=1;                 //設置50%水位

                                                 break;

                                        case 2:

                                             LED0=1;LED1=1;LED2=1;LED3=0;LED4=1;                 //設置80%水位

                                                 break;

                                    case 3:

                                             LED0=1;LED1=1;LED2=1;LED3=1;LED4=0;                 //設置100%水位

                                                 break;

                                }


                        }

                        if(swsz==1&&key()==25)                                                                         //水位設置按鍵復位

                    {   

                                     s1=1;

                                         TR0=1;

                                     if(s1==0&&key()==25)

                                         {

                                             s=2;

                                         if(s==0&&key()==25)

                                                 {

                                                      swsz=0;

                                                          TR0=0;

                                                 }

                                         }

                                         else TR0=0;

                         }

                }

        /*        總關閉      */

        else

        {

           buf[0]=buf[1]=buf[2]=buf[3]=13;

           buf[4]=buf[5]=buf[6]=buf[7]=13;

           f=0;

           con=1;

           LED0=LED1=LED2=LED3=LED4=1;

           ka=1;

        }               

        dis();

  }

}

void time0() interrupt 1

{

     TH0=0XFC;

         TL0=0X17;

         if(++c==1000)

         {

             c=0;

                 if(s>0)s--;

         }

         if(++c==999)

         {

              if(s1>0)s1--;

         }

}




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

使用道具 舉報

沙發
ID:385045 發表于 2018-9-28 23:46 | 只看該作者
用一個軟件延時就可以搞定的東西,你為啥要用一個定時器延時。
回復

使用道具 舉報

板凳
ID:385045 發表于 2018-9-28 23:48 | 只看該作者
void delay(uint i)
{
                uint j,k;
                for(j=i;j>0;j--)
                        for(k=110;k>0;k--);
}
用一個軟件延時,進行無意義的運行,來達到延時的目的。沒必要使用定時器。
delay(2000);延時2s,如果不是追求特別精確的延時,就可以使用這個
回復

使用道具 舉報

地板
ID:246002 發表于 2018-10-1 10:57 | 只看該作者
因為s1永遠等于1,所以就進不去下面的if,,在s1=1;后面加一個死循環,括住后面的語句
回復

使用道具 舉報

5#
ID:272089 發表于 2018-10-17 10:08 | 只看該作者
supermans 發表于 2018-9-28 23:46
用一個軟件延時就可以搞定的東西,你為啥要用一個定時器延時。

兩秒沒按才可以,按了還要接著重新來的。用delay不是沒反應?

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一| 欧美日韩精品免费观看 | 91成人免费| 午夜视频网站 | 天天躁日日躁狠狠躁2018小说 | 亚洲毛片在线 | 国产欧美一区二区三区免费 | 日本成人在线免费视频 | 成人免费视频网站在线观看 | 在线免费黄色 | 午夜专区 | 日韩在线视频播放 | 国产 亚洲 网红 主播 | 视频一区二区三区在线观看 | 国产成人精品一区二区三 | 天天操夜夜操 | 欧美国产日韩精品 | 中文字幕精品一区 | 国产欧美在线 | 懂色av一区二区三区在线播放 | 国产乱xxav| 国产在线不卡 | 日韩欧美在线观看 | 狠狠色狠狠色综合系列 | 五月综合激情网 | 久久精品性视频 | 嫩草伊人| 在线播放国产一区二区三区 | 天堂久久一区 | 午夜精品久久久久久不卡欧美一级 | 精品伊人 | 日韩高清黄色 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 欧美精品一区二区三区在线播放 | 精品欧美一区免费观看α√ | 新91| 国产资源一区二区三区 | 成人久久 | 成人妇女免费播放久久久 | 国产精品九九九 | 精品乱码一区二区三四区视频 |