找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13661|回復: 26
打印 上一主題 下一主題
收起左側(cè)

51單片機按鍵加一減一問題

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:261451 發(fā)表于 2018-4-24 17:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. void main()
  2. {  
  3.     lcd_init();
  4.    while(1)
  5.                
  6.         if(key1==0)
  7.                 {
  8.                  delay_ms(1);
  9.                         if(key1==0)
  10.                         {
  11.                                 while(!key1);
  12.                                 k++;
  13.                         }
  14.                 }
  15.                         if(key2==0)
  16.                 {
  17.                  delay_ms(1);
  18.                         if(key2==0)
  19.                         {
  20.                                 while(!key2);
  21.                                 k--;
  22.                         }
  23.                 }
  24.                 switch(k)
  25.         {
  26.                 case 1:display1();break;
  27.                 case 2:display2();break;
  28.                 case 3:display3();break;
  29.         }
  30.                         }
復制代碼

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

使用道具 舉報

沙發(fā)
ID:261451 發(fā)表于 2018-4-24 17:58 | 只看該作者
液晶屏翻頁可以這樣做么,k1k2控制k的大小,k等于幾就翻到第幾頁
回復

使用道具 舉報

板凳
ID:261451 發(fā)表于 2018-4-24 18:03 | 只看該作者
全程序
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #include "4.h"

  6. uchar  table []="       4.c      ";
  7. uchar  table1[]="    asdasdas    ";
  8. uchar  table2[]="    SDASDSDD    ";  
  9. uchar  table3[]="    ò»¶tèyËÄ    ";
  10. uchar k;
  11. uchar key1num,key2num;
  12. sbit LCD_SID=P0^6;
  13. sbit LCD_SCLK=P0^5;

  14. sbit key1=P1^1;
  15. sbit key2=P1^3;

  16. void delay_ms(uint z)
  17. {
  18.    uint x,y;
  19.         for(x=z;x>0;x--)
  20.                 for(y=110;y>0;y--);
  21. }
  22. void sendbyte(unsigned char bbyte)
  23. {
  24. unsigned char i;
  25. for(i=0;i<8;i++)
  26.    {
  27.    LCD_SID=bbyte&0x80;
  28.    LCD_SCLK=1;
  29.    LCD_SCLK=0;
  30.    bbyte<<=1; //×óòÆ
  31.    }  
  32. }

  33. void write(bit start, unsigned char ddata)
  34. {
  35.   unsigned char start_data,Hdata,Ldata;
  36.   if(start==0)
  37.     start_data=0xf8;  
  38.   else      
  39.         start_data=0xfa;  
  40.   
  41.   Hdata=ddata&0xf0;  
  42.   Ldata=(ddata<<4)&0xf0;
  43.   sendbyte(start_data);   
  44.   delay_ms(1); //Ñóê±
  45.   sendbyte(Hdata);     
  46.   delay_ms(1);
  47.   sendbyte(Ldata);   
  48.   delay_ms(1);
  49. }


  50. void chinese(uchar x,uchar y,uchar k,uchar *p)
  51. {
  52.         uchar hang,out,i;
  53.         y=y-1;
  54.         switch(x)
  55.         {
  56.                 case 1:hang=0x80;break;
  57.                 case 2:hang=0x90;break;
  58.                 case 3:hang=0x88;break;
  59.                 case 4:hang=0x98;break;        
  60.         }
  61.         out=hang+y;        
  62.         write(0,out);
  63.         for(i=0;i<k*2;i++) {
  64.              write(1,*p);
  65.                   p++;
  66.                     }
  67.                                 //write(1,p);
  68. }


  69. void english(uchar x,uchar y,uchar k,uchar *p)
  70. {
  71.         uchar hang,out,i;
  72.         y=y-1;
  73.       
  74.         switch(x)
  75.         {
  76.                 case 1:hang=0x80;break;
  77.                 case 2:hang=0x90;break;
  78.                 case 3:hang=0x88;break;
  79.                 case 4:hang=0x98;break;        
  80.         }
  81.         out=hang+y;        
  82.         write(0,out);
  83.         for(i=0;i<k;i++) {
  84.                  write(1,*p);
  85.                   p++;
  86.                        }                              
  87.        // write(1,p);
  88. }
  89. void lcd_init()
  90. {
  91.         write(0,0x30);  
  92.         write(0,0x0F);  
  93.         write(0,0x01);  
  94.         delay_ms(10);
  95. }

  96. void display1()
  97.     {
  98.                         write(0,0x01);
  99.                         english(1,1,15,table);
  100.         english(2,1,15,table);
  101.         english(3,1,15,table);
  102.         english(4,1,15,table);
  103.                                  }
  104.                 void display2()
  105.     {
  106.                         write(0,0x01);
  107.                         english(1,1,15,table2);
  108.         english(2,1,15,table2);
  109.         english(3,1,15,table2);
  110.         english(4,1,15,table2);
  111.                                  }
  112.                 void display3()
  113.     {
  114.                         write(0,0x01);
  115.                         english(1,1,15,table3);
  116.         english(2,1,15,table3);
  117.         english(3,1,15,table3);
  118.         english(4,1,15,table3);
  119.                                  }
  120. void main()
  121. {  
  122.     lcd_init();
  123.    while(1)
  124.                
  125.         if(key1==0)
  126.                 {
  127.                  delay_ms(1);
  128.                         if(key1==0)
  129.                         {
  130.                                 while(!key1);
  131.                                 k++;
  132.                         }
  133.                 }
  134.                         if(key2==0)
  135.                 {
  136.                  delay_ms(1);
  137.                         if(key2==0)
  138.                         {
  139.                                 while(!key2);
  140.                                 k--;
  141.                         }
  142.                 }
  143.                 switch(k)
  144.         {
  145.                 case 1:display1();break;
  146.                 case 2:display2();break;
  147.                 case 3:display3();break;
  148.         }
  149.                         }
復制代碼


回復

使用道具 舉報

地板
ID:261451 發(fā)表于 2018-4-25 13:55 | 只看該作者
大家看看這樣可以么
回復

使用道具 舉報

5#
ID:316247 發(fā)表于 2018-4-25 15:04 | 只看該作者
可以吧!沒有大問題@@@
回復

使用道具 舉報

6#
ID:261451 發(fā)表于 2018-4-25 16:31 | 只看該作者
f346259332 發(fā)表于 2018-4-25 15:04
可以吧!沒有大問題@@@

可是液晶屏沒顯示,按鍵也沒反應(yīng)
回復

使用道具 舉報

7#
ID:316390 發(fā)表于 2018-4-25 16:53 | 只看該作者
可以的,看起來并沒有什么大問題
回復

使用道具 舉報

8#
ID:316390 發(fā)表于 2018-4-25 16:54 | 只看該作者
按鍵沒有反應(yīng)可以能源程序有問題
回復

使用道具 舉報

9#
ID:316444 發(fā)表于 2018-4-25 17:37 | 只看該作者

按鍵沒有反應(yīng)可以能源程序有問題
回復

使用道具 舉報

10#
ID:316491 發(fā)表于 2018-4-25 19:17 | 只看該作者
k值應(yīng)該在1-3之間吧?
回復

使用道具 舉報

11#
ID:316572 發(fā)表于 2018-4-25 20:36 | 只看該作者
f非常感謝樓主,您辛苦了,謝謝
回復

使用道具 舉報

12#
ID:316162 發(fā)表于 2018-4-25 21:55 | 只看該作者
個人建議:寫程序要習慣增加注釋,至少關(guān)鍵地方要有注釋,雖然我也初學,但從開始養(yǎng)成習慣就好
回復

使用道具 舉報

13#
ID:316162 發(fā)表于 2018-4-25 21:57 | 只看該作者
個人建議:建議增加程序注釋,至少關(guān)鍵位置又要注釋說明,以便日后維護程序,雖然我也初學,但從開始養(yǎng)成好習慣不會錯的。
回復

使用道具 舉報

14#
ID:316125 發(fā)表于 2018-4-26 08:12 | 只看該作者
沒什么問題
回復

使用道具 舉報

15#
ID:261451 發(fā)表于 2018-4-26 08:15 | 只看該作者
hangru5xl 發(fā)表于 2018-4-25 19:17
k值應(yīng)該在1-3之間吧?

暫時是三幅圖片,還要加,就沒加上范圍
回復

使用道具 舉報

16#
ID:261451 發(fā)表于 2018-4-26 08:16 | 只看該作者
284213945 發(fā)表于 2018-4-25 20:36
f非常感謝樓主,您辛苦了,謝謝

還沒實現(xiàn)
回復

使用道具 舉報

17#
ID:261451 發(fā)表于 2018-4-26 08:16 | 只看該作者
動力軟件 發(fā)表于 2018-4-25 21:55
個人建議:寫程序要習慣增加注釋,至少關(guān)鍵地方要有注釋,雖然我也初學,但從開始養(yǎng)成習慣就好

好的,謝謝,正在修改
回復

使用道具 舉報

18#
ID:261451 發(fā)表于 2018-4-26 08:17 | 只看該作者
一顆糖y 發(fā)表于 2018-4-25 16:54
按鍵沒有反應(yīng)可以能源程序有問題

不太懂
回復

使用道具 舉報

19#
ID:261451 發(fā)表于 2018-4-26 11:31 | 只看該作者
void main()
{  
    lcd_init();
   while(1)
               
        if(key1==0)
                {
                 delay_ms(5);
                        if(key1==0)
                        {
                                while(!key1);
                                k++;
                        }
                        switch(k)
        {
                case 1:display1();break;
                case 2:display2();break;
                case 3:display3();break;
        }
                }       
        if(key2==0)
                {
                 delay_ms(5);
                        if(key2==0)
                        {
                                while(!key2);
                                k--;
                        }
                        if(k==1){display1();}
                if(k==2){display2();}
                if(k==3){display3();}       
                }
        }
回復

使用道具 舉報

20#
ID:261451 發(fā)表于 2018-4-26 11:33 | 只看該作者
主函數(shù)這樣寫才能加頁,不能減,switch語句寫在后面沒反應(yīng)
回復

使用道具 舉報

21#
ID:261451 發(fā)表于 2018-4-26 13:34 | 只看該作者
好像程序運行不到key2這里,只能頁數(shù)只能增,不能減,按key2沒反應(yīng)

$X47KS3IJB9O(HT[`HJ%F}0.png (28.88 KB, 下載次數(shù): 87)

$X47KS3IJB9O(HT[`HJ%F}0.png
回復

使用道具 舉報

22#
ID:261451 發(fā)表于 2018-4-26 16:16 | 只看該作者
找到原因了,while(1)后面要加{},能翻頁了,但是燒上程序之后,顯示的字一直在閃,不穩(wěn)
回復

使用道具 舉報

23#
ID:261451 發(fā)表于 2018-4-26 17:54 | 只看該作者
現(xiàn)在想在12864屏幕0x86位置,按鍵加一并且顯示數(shù)字怎么寫程序呢
回復

使用道具 舉報

24#
ID:314047 發(fā)表于 2018-4-26 18:01 | 只看該作者
動力軟件 發(fā)表于 2018-4-25 21:55
個人建議:寫程序要習慣增加注釋,至少關(guān)鍵地方要有注釋,雖然我也初學,但從開始養(yǎng)成習慣就好

是的  這樣方便大家檢查
回復

使用道具 舉報

25#
ID:88606 發(fā)表于 2018-4-28 07:41 | 只看該作者
有什么問題?描述清楚好讓大家最短時間明白你的問題,而不是看半天代碼找問題?
回復

使用道具 舉報

26#
ID:261451 發(fā)表于 2018-4-28 09:42 | 只看該作者
tt98 發(fā)表于 2018-4-28 07:41
有什么問題?描述清楚好讓大家最短時間明白你的問題,而不是看半天代碼找問題?

while后面少了{},屏幕沒反應(yīng),現(xiàn)在可以顯示了
回復

使用道具 舉報

27#
ID:200453 發(fā)表于 2018-4-29 18:44 | 只看該作者
來學習學習~
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表