lxy030408 2023-04-05 09:42 采纳率: 100%
浏览 26
已结题

如何写使用安装在主板上的按钮, 每次按一次时,字符将停止或继续流动单片机的代码

使用安装在主板上的按钮,
每次按一次时,字符将停止或继续流动
§注意:PA1不能用作开关输入。
开关输入改为PG4。PG4端子和按钮键
连接。使用PG4时DOWN/RUN
必须将位置设置为RUN(共享PG4)。

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2023-04-06 10:32
    关注

    以下内容部分参考ChatGPT模型:
    首先,我们需要将PG4引脚配置为输入模式,代码如下:

    sbit SW = P3^2; // PG4对应P3.2
    
    void InitSwitch()
    {
        SW = 1; // 先将PG4拉高
        P3M1 &= ~0x04; // 将P3.2设置为普通输入模式
        P3M0 |= 0x04;
    }
    

    然后,在主程序中,我们需要不断检测PG4引脚的状态,如果检测到PG4被按下,则停止或继续字符的流动。具体实现如下:

    bit flag = 1; // 定义一个标志位,用于判断字符是否需要流动
    
    void main()
    {
        InitSwitch();
        InitUART();
        while(1)
        {
            if(SW == 0) // 检测到PG4被按下
            {
                flag = !flag; // 取反标志位,停止或继续流动
                while(!SW); // 等待PG4被松开
            }
            if(flag) // 如果标志位为真,即需要流动字符
            {
                SendString("Hello World!"); // 发送字符串
            }
        }
    }
    

    完整代码如下:

    #include <STC89.H>
    
    sbit SW = P3^2; // PG4对应P3.2
    
    void InitSwitch()
    {
        SW = 1; // 先将PG4拉高
        P3M1 &= ~0x04; // 将P3.2设置为普通输入模式
        P3M0 |= 0x04;
    }
    
    void InitUART()
    {
        TMOD &= 0x0F; // 设置定时器1为模式1
        TMOD |= 0x20;
        TH1 = 0xFD; // 波特率设置为9600bps
        TL1 = 0xFD;
        PCON &= 0x7F; // SMOD=0,波特率不加倍
        TR1 = 1; // 启动定时器1
        SCON = 0x50; // 设置串口为模式1
        ES = 1; // 打开串口中断
        EA = 1; // 打开总中断开关
    }
    
    void SendChar(unsigned char c)
    {
        SBUF = c;
        while(TI == 0);
        TI = 0;
    }
    
    void SendString(char *s)
    {
        while(*s)
        {
            SendChar(*s++);
        }
    }
    
    bit flag = 1; // 定义一个标志位,用于判断字符是否需要流动
    
    void main()
    {
        InitSwitch();
        InitUART();
        while(1)
        {
            if(SW == 0) // 检测到PG4被按下
            {
                flag = !flag; // 取反标志位,停止或继续流动
                while(!SW); // 等待PG4被松开
            }
            if(flag) // 如果标志位为真,即需要流动字符
            {
                SendString("Hello World!"); // 发送字符串
            }
        }
    }
    
    void UART() interrupt 4
    {
        if(RI == 1)
        {
            RI = 0;
        }
    }
    

    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月5日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。