
计数器如图,好像不是单片机,会用软件仿真但是不会用c语言来表述,如有人能解答疑惑将万分感激
以下是一种可能的实现方式:
定义两个变量,一个用于存储个位数,一个用于存储十位数,初始值都为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;
}