找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 533|回复: 5
打印 上一主题 下一主题
收起左侧

遇到一个长按的问题,单片机一通电就执行第一个显示,然后通过长按进行两个模式切...

[复制链接]
跳转到指定楼层
楼主
ID:858009 发表于 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();
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:526543 发表于 2022-1-11 12:40 | 只看该作者
  Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
放在屏幕初始化后面就可以
长按思路https://blog.csdn.net/qq_33198758/article/details/85783772
回复

使用道具 举报

板凳
ID:152237 发表于 2022-1-11 13:21 | 只看该作者
初始化好了,就加一条显示指令好了呀
回复

使用道具 举报

地板
ID:526543 发表于 2022-1-11 13:43 | 只看该作者
Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
这一行写while上面就可
回复

使用道具 举报

5#
ID:161164 发表于 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. }
复制代码


回复

使用道具 举报

6#
ID:213173 发表于 2022-1-11 21:36 | 只看该作者
放在主函数中,按键扫描外。
if(a==0)
{
        Write_1621(29,0x20,4);   //怎么使这代码一开机就显示,然后通过长按切换这两个程序
}
else
{
        Write_1621(29,0x40,4);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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