logisim平台数字逻辑电路

(1)二十四/十二制小时、分、秒计时,二十四/十二制可切换。采用七段数码管显示,由七段字形译码器驱动:
(2)小时、分钟可以校正(顺时针校正);
(3)使用小时及分钟完成定时闹钟功能,到达指定时间某时某分后,led灯闪烁1分。
(4)时分秒显示、小时制式选择与指示、校正按钮、闹铃设置及led灯要设计在主电路图中。
(5)要求采用D触发器。logisim软件处理

来自百度GPT:

// 使用D触发器实现时钟电路
DFF_CLK clk; // 定义D触发器对象
int clock_freq = 1; // 时钟频率为1Hz
int counter = 0; // 时钟计数器
int seconds = 0; // 秒数
int minutes = 0; // 分钟数
int hours = 0; // 小时数

// 使用七段字形译码器和多路选择器实现数码管显示
SevenSegDecoder decoder; // 定义七段字形译码器对象
MUX select; // 定义多路选择器对象
int display_freq = 50; // 显示频率为50Hz

// 使用按钮和门电路实现校正电路
Button btn; // 定义按钮对象
AND gate; // 定义门电路对象
int adjust_freq = 1; // 校正频率为1Hz

// 使用比较器和门电路实现闹钟电路
Comparator comp; // 定义比较器对象
AND alarm_gate; // 定义门电路对象
int alarm_hour = 6; // 设定闹钟小时数为6
int alarm_minute = 30; // 设定闹钟分钟数为30
int alarm_freq = 2; // 闹钟频率为2Hz
int led_state = 0; // LED灯状态(0表示关闭,1表示打开)

while (1) {
    // 将计数器的值输入到时钟电路中
    clk.D = counter;
    // 时钟电路的输出为Q,将其赋值给计数器
    counter = clk.Q;
    // 每隔1秒钟触发一次时钟信号
    delay(1000 / clock_freq);
    // 如果计数器达到60,则将秒数加1
    if (counter == 60) {
        seconds++;
        counter = 0;
    }
    // 如果秒数达到60,则将分钟数加1
    if (seconds == 60) {
        minutes++;
        seconds = 0;
    }
    // 如果分钟数达到60,则将小时数加1
    if (minutes == 60) {
        hours++;
        minutes = 0;
    }
    // 如果小时数达到24,则将其清零
    if (hours == 24) {
        hours = 0;
    }

    // 将秒数输入到多路选择器中,选择需要显示的数字
    select.S = seconds;
    // 将多路选择器的输出输入到七段字形译码器中,将数字转换为七段显示信号
    decoder.D = select.Y;
    // 将七段字形译码器的输出连接到数码管,显示数字
    display(decoder.A, decoder.B, decoder.C, decoder.D, decoder.E, decoder.F, decoder.G);
    // 每隔20毫秒刷新一次数码管
    delay(1000 / display_freq);

    // 如果按钮被按下,则触发校正操作
    if (btn.state == PRESSED) {
        // 将门电路的输出赋值为1,使时钟电路递增
        gate.A = 1;
        // 等待一段时间,以便用户可以顺时针调整时间
        delay(1000 / adjust_freq);
        // 将门电路的输出赋值为0,使时钟电路停止递增
        gate.A = 0;
    }

    // 如果当前时间等于设定的闹钟时间,则触发闹钟
    if (hours == alarm_hour && minutes == alarm_minute) {
        // 将比较器的输出赋值给门电路的输入,控制LED灯的闪烁
        alarm_gate.A = comp.Q;
        // 每隔500毫秒切换LED灯状态
        delay(1000 / alarm_freq);
        led_state = !led_state;
    }
    // 如果闹钟已经触发过,则关闭LED灯
    else if (led_state == 1) {
        // 将门电路的输出赋值为0,关闭LED灯
        alarm_gate.A = 0;
        led_state = 0;
    }
}


数字逻辑实验|逻辑函数及其描述工具(Logisim)
可以参考下
https://blog.csdn.net/m0_72572822/article/details/126982639

Logisim中24小时计时器设计实现思路和源代码,可以看看这个:
https://blog.csdn.net/qq_59260978/article/details/122013997
具体实现的效果是这样的:

img


应该符合你的要求

可以采用D触发器设计时钟电路,即根据24小时制或12小时制选择不同的初始值和极限值,使用两个计数器分别计时小时和分钟,以及一个计数器计时秒钟。每计满一小时或一分钟时,需要将计数归零并将计数器加1。同时,将计数的值转换为二进制并使用七段数码管进行显示。选择正确的时钟频率以确保计时器的精度和稳定性