标题: 遇到一个长按的问题,单片机一通电就执行第一个显示,然后通过长按进行两个模式切... [打印本页]

作者: qwettyuio    时间: 2022-1-11 11:25
标题: 遇到一个长按的问题,单片机一通电就执行第一个显示,然后通过长按进行两个模式切...
遇到一个长按的问题,单片机一通电就执行第一个显示,然后通过长按进行两个模式切换,求解一下
#define key_S 20
#define key_L key_S*50
uchar fen;
uint  count;
bit a=0;
sbit key3 = P1^3;
sbit led0 = P1^0;
sbit led1 = P1^7;
sbit led2 = P1^6;
void delay(unsigned int t)//延时时间 = t*9+16 us
{
        while(t--);
}
void Scan_key()
{
        if(!key3)
        {
                count++;
            if(count==key_L)
                {
                        a=~a;
                        if(a)
                        {
                                Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
                        }
                        else
                        {
                                Write_1621(29,0x40,4);
                        }
                }
                if(count>key_L)
                        count=key_L+1;
         }
        else
        {
                if(count>key_S && count<key_L)
                {
                        if(++fen==4)
                                fen=0;
                }
                count=0;
                switch(fen)
         {
                 case 0:Write_1621(8,0x01,4);led0=1;led1=1;led2=1;break;
                 case 1:Write_1621(8,0x80,4);led0=0;led1=1;led2=1;break;
                 case 2:Write_1621(8,0x40,4);led0=1;led1=0;led2=1;break;
                 case 3:Write_1621(8,0x20,4);led0=1;led1=1;led2=0;break;
                 default:break;
         }
        }
    delay(110);
}
void main( )
{
        Init_1621();       //初始化
        Port1Cfg(1,0);   //端口推挽输出
        Port1Cfg(1,3);   
        Port1Cfg(1,6);   
        Port1Cfg(1,7);  
        while(1)
        {
                Scan_key();
        }
}


作者: 123456ZXC1    时间: 2022-1-11 12:40
  Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
放在屏幕初始化后面就可以
长按思路https://blog.csdn.net/qq_33198758/article/details/85783772
作者: zngz_cc    时间: 2022-1-11 13:21
初始化好了,就加一条显示指令好了呀
作者: 123456ZXC1    时间: 2022-1-11 13:43
Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
这一行写while上面就可
作者: lkc8210    时间: 2022-1-11 13:58
  1. void Scan_key()
  2. {
  3.         if(!key3)
  4.         {
  5.                 count++;
  6.                 if(count==key_L)
  7.                 {
  8.                         a=~a;
  9.                 }
  10.                 if(count>key_L)
  11.                         count=key_L+1;
  12.         }
  13.         else
  14.         {
  15.                 if(count>key_S && count<key_L)
  16.                 {
  17.                         if(++fen==4)
  18.                                 fen=0;
  19.                 }
  20.                 count=0;
  21.                 switch(fen)
  22.                 {
  23.                          case 0:Write_1621(8,0x01,4);led0=1;led1=1;led2=1;break;
  24.                          case 1:Write_1621(8,0x80,4);led0=0;led1=1;led2=1;break;
  25.                          case 2:Write_1621(8,0x40,4);led0=1;led1=0;led2=1;break;
  26.                          case 3:Write_1621(8,0x20,4);led0=1;led1=1;led2=0;break;
  27.                          default:break;
  28.                 }
  29.         }
  30.         delay(110);
  31. }
  32. bit a_o;
  33. void main( )
  34. {
  35.         Init_1621();       //初始化
  36.         Port1Cfg(1,0);   //端口推挽输出
  37.         Port1Cfg(1,3);
  38.         Port1Cfg(1,6);
  39.         Port1Cfg(1,7);
  40.         a = 1;
  41.         a_o = 0;
  42.         while(1)
  43.         {
  44.                 Scan_key();
  45.                 if(a != a_o) //有变化才更新画面
  46.                 {
  47.                         if(a)
  48.                         {
  49.                                 Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
  50.                         }
  51.                         else
  52.                         {
  53.                                 Write_1621(29,0x40,4);
  54.                         }
  55.                         a_o = a;
  56.                 }
  57.         }
  58. }
复制代码



作者: wulin    时间: 2022-1-11 21:36
放在主函数中,按键扫描外。
if(a==0)
{
        Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
}
else
{
        Write_1621(29,0x40,4);
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1