「已注销」 2023-05-16 12:04 采纳率: 0%
浏览 133
已结题

请问如何用c语言实现下图0-99计数器行为仿真

img


计数器如图,好像不是单片机,会用软件仿真但是不会用c语言来表述,如有人能解答疑惑将万分感激

  • 写回答

7条回答 默认 最新

  • 阿尔法斗士 2023-05-16 12:28
    关注
    获得25.00元问题酬金

    以下是一种可能的实现方式:

    定义两个变量,一个用于存储个位数,一个用于存储十位数,初始值都为0。

    使用循环实现计数器的自增功能,每次循环个位数加1,当个位数达到10时,个位数归零,十位数加1,当十位数达到10时,十位数归零,重新从0开始计数。

    在每次计数后,输出个位数和十位数的值,可以使用数码管或LED灯等输出方式。

    为了实现控制输入信号,可以使用外部电路,例如按钮或开关等,当接收到控制信号时,暂停计数器的自增功能,等待下一次控制信号,根据不同的控制信号可以实现计数器的清零、倒计数等功能。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <wiringPi.h>
    
    #define PIN0 0  // 个位数输出引脚
    #define PIN1 1  // 十位数输出引脚
    #define PIN_CTRL 2  // 控制输入引脚
    
    int main()
    {
        int num0 = 0, num1 = 0;  // 个位数和十位数初始值都为0
        int ctrl = 0;  // 控制信号初始值为0
    
        wiringPiSetup();  // 初始化wiringPi库
    
        pinMode(PIN0, OUTPUT);  // 设置个位数输出引脚为输出模式
        pinMode(PIN1, OUTPUT);  // 设置十位数输出引脚为输出模式
        pinMode(PIN_CTRL, INPUT);  // 设置控制输入引脚为输入模式
    
        while (1) {  // 循环计数器
            if (digitalRead(PIN_CTRL) == HIGH) {  // 接收到控制信号时暂停计数器
                delay(50);  // 延时去抖
                if (digitalRead(PIN_CTRL) == HIGH) {
                    ctrl = 1;  // 标记接收到控制信号
                }
            }
    
            if (ctrl == 1) {  // 接收到控制信号时执行相应操作
                if (num0 == 9 && num1 == 9) {  // 当计数器达到99时清零
                    num0 = 0;
                    num1 = 0;
                } else if (num0 == 0 && num1 == 0) {  // 当计数器为0时倒计数到99
                    num0 = 9;
                    num1 = 9;
                } else {  // 否则继续计数器自增
                    num0++;
                    if (num0 == 10) {
                        num0 = 0;
                        num1++;
                        if (num1 == 10) {
                            num1 = 0;
                        }
                    }
                }
                ctrl = 0;  // 清除控制信号标记
            }
    
            // 输出个位数和十位数的值
            digitalWrite(PIN0, num0 % 2);
            digitalWrite(PIN1, num1 % 2);
            num0 /= 2;
            num1 /= 2;
    
            delay(500);  // 延时等待
        }
    
        return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 赞助了问题酬金50元 5月16日
  • 创建了问题 5月16日