m0_73883922 2023-02-21 15:10 采纳率: 33.3%
浏览 88
已结题

动态数码管与独立按键

1.按下复位键,数码管从左到右显示自己的学号后三位
2.按下一个独立按键,数码管间隔一位显示1357。
3.按下一个独立按键,数码管显示最右边数字加一,且蜂鸣器响起。若该到9则清零。

  • 写回答

5条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-21 15:13
    关注

    基于Monster 组和GPT的调写:

    #include <reg52.h>
    
    sbit btn_reset = P1^0;      // 复位按键
    sbit btn_display = P1^1;    // 显示按键
    sbit btn_increment = P1^2;  // 数字增加按键
    sbit buzzer = P2^3;         // 蜂鸣器
    
    unsigned char seg_code[10] = {
        0x3F,  // 0
        0x06,  // 1
        0x5B,  // 2
        0x4F,  // 3
        0x66,  // 4
        0x6D,  // 5
        0x7D,  // 6
        0x07,  // 7
        0x7F,  // 8
        0x6F   // 9
    };
    
    void delay(unsigned int time) {
        while(time--);
    }
    
    void display(unsigned char digit) {
        P0 = seg_code[digit];
        delay(100);
        P0 = 0x00;
    }
    
    void main() {
        unsigned char num = 0;
    
        while(1) {
            if (btn_reset == 0) {  // 复位按键按下
                display(2);  // 显示学号后三位
                display(1);
                display(5);
                delay(1000);
                P0 = 0x00;
            }
            else if (btn_display == 0) {  // 显示按键按下
                display(1);  // 显示 1 3 5 7
                delay(100);
                P0 = 0x00;
                delay(100);
                display(3);
                delay(100);
                P0 = 0x00;
                delay(100);
                display(5);
                delay(100);
                P0 = 0x00;
                delay(100);
                display(7);
                delay(100);
                P0 = 0x00;
            }
            else if (btn_increment == 0) {  // 数字增加按键按下
                num++;
                if (num == 10) {  // 如果数字到达 10,则清零
                    num = 0;
                }
                display(num);
                buzzer = 1;  // 蜂鸣器响起
                delay(100);
                buzzer = 0;
                delay(1000);
                P0 = 0x00;
            }
        }
    }
    

    用 P0 口控制数码管的显示,使用 P1 口控制按键的输入,使用 P2 口控制蜂鸣器的输出。

    在主函数中,使用一个无限循环来不断检测按键的状态。如果复位按键按下,则显示学号后三位;如果显示按键按下,则显示 1 3 5 7;如果数字增加按键按下,则数字加一并显示,同时蜂鸣器响起,如果数字到达 10,则清零。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?