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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6035|回復(fù): 11
收起左側(cè)

關(guān)于單片機(jī)lcd1602多級(jí)菜單的顯示

[復(fù)制鏈接]
ID:190136 發(fā)表于 2017-4-18 10:46 | 顯示全部樓層 |閱讀模式
這是自己寫(xiě)的一個(gè)程序    沒(méi)有往上面寫(xiě)1602的.h文件

不知道哪里出了問(wèn)題,總是不能實(shí)現(xiàn)按下k1進(jìn)入第一個(gè)菜單,按下k2進(jìn)入第二個(gè)菜單,按下k3返回的功能  求大神給看一下吧  萬(wàn)分感謝

  1. #include<reg51.h>
  2. #include<intrins.h>        
  3. #include"lcd.h"




  4. sbit k1=P1^0;
  5. sbit k2=P1^1;
  6. sbit k3=P1^2;







  7. typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
  8. typedef unsigned char u8;

  9. static      flag =3;                   //標(biāo)記
  10. void delay(u16 i)                           //延時(shí)
  11. {

  12.         while(i--);        
  13. }




  14. void menu0 ()                                                              
  15. {        

  16.     Lcd1602_Write_Cmd(0x01);
  17.         LcdShowStr(0,0," welcome ")        ;
  18.         


  19. }           

  20. void menu1 ()                                                     
  21. {        
  22.     Lcd1602_Write_Cmd(0x01);

  23.         LcdShowStr(0,0," nihao ") ;
  24.         
  25.         
  26. }

  27. void keyvalue()
  28. {
  29. if(k1==0)
  30.     {
  31.         delay(1000);
  32.           if(k1==0)
  33.           {
  34.        flag=0;
  35.            }
  36.     }
  37.          else
  38.          {
  39.           flag=3;
  40.          }
  41.      while(!k1);


  42.     if(k2==0)

  43.      {
  44.          delay(1000) ;
  45.          if(k2==0)
  46.           {
  47.              flag=1;
  48.           }
  49.      }
  50.           else
  51.          {
  52.           flag=3;
  53.          }
  54.      while(!k2);


  55. }




  56. void key()
  57. {
  58.   keyvalue();
  59.   switch(flag)
  60.   {
  61.    case 0:
  62.    {
  63.       menu0();
  64.           if(k3==0)
  65.              {
  66.             delay(1000);
  67.                 if(k3==0)
  68.                 {
  69.           flag=3 ;
  70.                 }
  71.        }

  72.       while(!k3);
  73.           break;
  74.    }


  75.    case 1:
  76.    {
  77.         menu1();
  78.         if(k3==0)
  79.            {
  80.                      delay(1000);
  81.                          if(k3==0)
  82.                          {
  83.              flag=3 ;
  84.                          }   
  85.            }
  86.           while(!k3);
  87.                   break;
  88.    }
  89.    case 3:
  90.    {
  91.      u8 i;
  92.     for(;i<10;i++)
  93.               {
  94.                 Lcd1602_Write_Data('C');
  95.               }
  96.         break;
  97.    }
  98.   }
  99. }

  100.          





  101. void main(void)
  102. {


  103.         InitLcd1602();
  104.         while(1)
  105.          {
  106.           key();
  107.          }

  108. }        
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-4-19 04:00 | 顯示全部樓層
現(xiàn)在這樣能顯示什么?
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-4-19 04:00 | 顯示全部樓層
現(xiàn)在這樣能顯示什么?
回復(fù)

使用道具 舉報(bào)

ID:191078 發(fā)表于 2017-4-19 08:22 | 顯示全部樓層
請(qǐng)多描述一下
回復(fù)

使用道具 舉報(bào)

ID:190136 發(fā)表于 2017-4-19 09:54 | 顯示全部樓層
admin 發(fā)表于 2017-4-19 04:00
現(xiàn)在這樣能顯示什么?

不能,應(yīng)該是賦值出現(xiàn)問(wèn)題了。具體的還在想....
回復(fù)

使用道具 舉報(bào)

ID:162136 發(fā)表于 2017-4-19 10:07 | 顯示全部樓層
static      flag =3;//這fiag要不要申明是什么類(lèi)型?
if(k1==0)            當(dāng)k1按下
    {
        delay(1000);     防抖
          if(k1==0)     確定k1按下
          {
       flag=0;         
           }
    }
         else              如果k1沒(méi)按下
         {
          flag=3;
         }
     while(!k1);      等待k1松開(kāi)
意思就是說(shuō):k1按下flag=0;當(dāng)程序再次掃描按鍵檢測(cè)子函數(shù)時(shí),因?yàn)闆](méi)有按鍵按下,所以flag=3,如果其它子程序沒(méi)問(wèn)題,很可能一直停止在flag=3的顯示頁(yè)面。把if(k==0)后面的else內(nèi)容都去掉應(yīng)該就可以了。

以上如不對(duì),請(qǐng)見(jiàn)諒。
回復(fù)

使用道具 舉報(bào)

ID:171523 發(fā)表于 2017-4-19 10:52 | 顯示全部樓層
看看 ,學(xué)習(xí) 我是小白。
回復(fù)

使用道具 舉報(bào)

ID:189542 發(fā)表于 2017-4-19 15:43 | 顯示全部樓層
在多機(jī)通信中,主機(jī)必須要能對(duì)各個(gè)從機(jī)進(jìn)行識(shí)別,在51系列單片機(jī)中可以通過(guò)SCON寄存器的SM2位來(lái)實(shí)現(xiàn)。當(dāng)串口以方式2或方式3發(fā)送數(shù)據(jù)時(shí),每一幀信息都是11位,第9位是數(shù)據(jù)可編程位,通過(guò)給TB8置1或置0來(lái)區(qū)別地址幀和數(shù)據(jù)幀,當(dāng)該位為1時(shí),發(fā)送地址幀;該位為0時(shí),發(fā)送數(shù)據(jù)幀。 在多機(jī)通信過(guò)程中,主機(jī)先發(fā)送某一從機(jī)的地址,等待從機(jī)的應(yīng)答,所有的從機(jī)接收到地址幀后與本機(jī)地址進(jìn)行比較,若相同,則將SM2置0準(zhǔn)備接收數(shù)據(jù);若不同,則丟棄當(dāng)前數(shù)據(jù),SM2位不變。
回復(fù)

使用道具 舉報(bào)

ID:190136 發(fā)表于 2017-4-19 16:21 | 顯示全部樓層
#include<reg51.h>
#include<intrins.h>       
#include"lcd.h"




sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;







typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;
     
static    int  flag =0;                   //標(biāo)記
void delay(u16 i)                           //延時(shí)
{
   
        while(i--);       
}



void menu0 ()
{
     Lcd1602_Write_Cmd(0x01);
        LcdShowStr(0,0," hello ")        ;
         delay(1000);
}


void menu1 ()                                                              
{       
   
    Lcd1602_Write_Cmd(0x01);
        LcdShowStr(0,0," welcome ")        ;
         delay(1000);
}          

void menu2 ()                                                    
{       
    Lcd1602_Write_Cmd(0x01);

        LcdShowStr(0,0," nihao ") ;
       
         delay(1000);
}


void keyscan()
{
if(k1==0)
   {
      delay(1000);
           if(k1==0)
                {
                  flag=1;
                }
          
        }

  if(k2==0)
   {
      delay(1000);
           if(k2==0)
                {
                  flag=2;
                }
       
        }
   if(k3==0)
   {
      delay(1000);
           if(k3==0)
                {
                  flag=0;
                }
          
        }
}

void menu()
{
keyscan();

switch(flag)
  {
   case 0:
   {
           menu0();
   }
   break;
   case 1:
   {
           menu1();
         break;

   }
   case 2:
   {
           menu2();
        break;
       
   }


  }
}







void main(void)
{


        InitLcd1602();
        while(1)
         {
          
          menu();

          delay(5000);
         }

}       




已經(jīng)改好了具體的功能是一開(kāi)始顯示第一個(gè)菜單hello  當(dāng)?shù)谝话存I按下時(shí)顯示第二個(gè)菜單,welcome,當(dāng)?shù)诙䝼(gè)按鍵按下時(shí)顯示第第三個(gè)菜單,當(dāng)?shù)谌齻(gè)按鍵按下時(shí),顯示第一個(gè)菜單,也就是返回鍵。一開(kāi)始的程序里面沒(méi)想清楚switch語(yǔ)句的用法所以搞錯(cuò)了 。謝謝各位啦。具體的菜單想要什么就改動(dòng)就可以了~
回復(fù)

使用道具 舉報(bào)

ID:95922 發(fā)表于 2017-5-19 21:48 | 顯示全部樓層
想請(qǐng)問(wèn), LcdShowStr(0,0," welcome ")        ;這句話中的函數(shù)在H文件中怎么寫(xiě)的
回復(fù)

使用道具 舉報(bào)

ID:234795 發(fā)表于 2017-9-24 22:03 | 顯示全部樓層
謝謝。。。。。。。。
回復(fù)

使用道具 舉報(bào)

ID:186936 發(fā)表于 2017-9-26 20:03 | 顯示全部樓層
keyvalue()這個(gè)子函數(shù)用了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看网站 | 欧美极品视频 | 免费在线一区二区三区 | 国产乱码精品1区2区3区 | 天天天天天天天干 | 亭亭五月激情 | 精品国产久| 日韩靠逼| 午夜播放器在线观看 | 91麻豆精品国产91久久久久久久久 | av黄色国产 | www.日韩| 精品一区二区三区在线视频 | 精品一区二区电影 | 浴室洗澡偷拍一区二区 | 欧美精品在线播放 | 欧美久久久久 | www国产亚洲精品久久网站 | 国产精品久久国产愉拍 | 亚洲一区在线播放 | 成人在线电影在线观看 | 网络毛片 | 亚洲欧美在线观看 | 天堂素人约啪 | 中文字幕第十一页 | 久久久精 | 国产91在线播放 | 国外成人免费视频 | 超级碰在线 | 免费成人国产 | 久久av网站| 国产成人在线视频免费观看 | 欧美日韩精品一区 | 日本黄色大片免费看 | 亚洲一区视频在线 | 色欧美片视频在线观看 | 欧美日韩高清在线一区 | 国产农村一级国产农村 | 亚洲视频在线观看一区二区三区 | 日韩中文在线观看 | 亚洲 欧美 日韩 精品 |