找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12213|回复: 26
收起左侧

51单片机按键加一减一问题

  [复制链接]
ID:261451 发表于 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.                         }
复制代码

回复

使用道具 举报

ID:261451 发表于 2018-4-24 17:58 | 显示全部楼层
液晶屏翻页可以这样做么,k1k2控制k的大小,k等于几就翻到第几页
回复

使用道具 举报

ID:261451 发表于 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 发表于 2018-4-25 13:55 | 显示全部楼层
大家看看这样可以么
回复

使用道具 举报

ID:316247 发表于 2018-4-25 15:04 | 显示全部楼层
可以吧!没有大问题@@@
回复

使用道具 举报

ID:261451 发表于 2018-4-25 16:31 | 显示全部楼层
f346259332 发表于 2018-4-25 15:04
可以吧!没有大问题@@@

可是液晶屏没显示,按键也没反应
回复

使用道具 举报

ID:316390 发表于 2018-4-25 16:53 | 显示全部楼层
可以的,看起来并没有什么大问题
回复

使用道具 举报

ID:316390 发表于 2018-4-25 16:54 | 显示全部楼层
按键没有反应可以能源程序有问题
回复

使用道具 举报

ID:316444 发表于 2018-4-25 17:37 | 显示全部楼层

按键没有反应可以能源程序有问题
回复

使用道具 举报

ID:316491 发表于 2018-4-25 19:17 | 显示全部楼层
k值应该在1-3之间吧?
回复

使用道具 举报

ID:316572 发表于 2018-4-25 20:36 | 显示全部楼层
f非常感谢楼主,您辛苦了,谢谢
回复

使用道具 举报

ID:316162 发表于 2018-4-25 21:55 | 显示全部楼层
个人建议:写程序要习惯增加注释,至少关键地方要有注释,虽然我也初学,但从开始养成习惯就好
回复

使用道具 举报

ID:316162 发表于 2018-4-25 21:57 | 显示全部楼层
个人建议:建议增加程序注释,至少关键位置又要注释说明,以便日后维护程序,虽然我也初学,但从开始养成好习惯不会错的。
回复

使用道具 举报

ID:316125 发表于 2018-4-26 08:12 | 显示全部楼层
没什么问题
回复

使用道具 举报

ID:261451 发表于 2018-4-26 08:15 | 显示全部楼层
hangru5xl 发表于 2018-4-25 19:17
k值应该在1-3之间吧?

暂时是三幅图片,还要加,就没加上范围
回复

使用道具 举报

ID:261451 发表于 2018-4-26 08:16 | 显示全部楼层
284213945 发表于 2018-4-25 20:36
f非常感谢楼主,您辛苦了,谢谢

还没实现
回复

使用道具 举报

ID:261451 发表于 2018-4-26 08:16 | 显示全部楼层
动力软件 发表于 2018-4-25 21:55
个人建议:写程序要习惯增加注释,至少关键地方要有注释,虽然我也初学,但从开始养成习惯就好

好的,谢谢,正在修改
回复

使用道具 举报

ID:261451 发表于 2018-4-26 08:17 | 显示全部楼层
一颗糖y 发表于 2018-4-25 16:54
按键没有反应可以能源程序有问题

不太懂
回复

使用道具 举报

ID:261451 发表于 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();}       
                }
        }
回复

使用道具 举报

ID:261451 发表于 2018-4-26 11:33 | 显示全部楼层
主函数这样写才能加页,不能减,switch语句写在后面没反应
回复

使用道具 举报

ID:261451 发表于 2018-4-26 13:34 | 显示全部楼层
好像程序运行不到key2这里,只能页数只能增,不能减,按key2没反应
$X47KS3IJB9O(HT[`HJ%F}0.png
回复

使用道具 举报

ID:261451 发表于 2018-4-26 16:16 | 显示全部楼层
找到原因了,while(1)后面要加{},能翻页了,但是烧上程序之后,显示的字一直在闪,不稳
回复

使用道具 举报

ID:261451 发表于 2018-4-26 17:54 | 显示全部楼层
现在想在12864屏幕0x86位置,按键加一并且显示数字怎么写程序呢
回复

使用道具 举报

ID:314047 发表于 2018-4-26 18:01 | 显示全部楼层
动力软件 发表于 2018-4-25 21:55
个人建议:写程序要习惯增加注释,至少关键地方要有注释,虽然我也初学,但从开始养成习惯就好

是的  这样方便大家检查
回复

使用道具 举报

ID:88606 发表于 2018-4-28 07:41 | 显示全部楼层
有什么问题?描述清楚好让大家最短时间明白你的问题,而不是看半天代码找问题?
回复

使用道具 举报

ID:261451 发表于 2018-4-28 09:42 | 显示全部楼层
tt98 发表于 2018-4-28 07:41
有什么问题?描述清楚好让大家最短时间明白你的问题,而不是看半天代码找问题?

while后面少了{},屏幕没反应,现在可以显示了
回复

使用道具 举报

ID:200453 发表于 2018-4-29 18:44 | 显示全部楼层
来学习学习~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表