单片机点唱机电路原理图

单片机里面,点唱机用Arduino,用proteus电路原理图应该怎么画

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7752516
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:arduino+proteus 仿真
  • 除此之外, 这篇博客: Arduino与Proteus仿真实例-计时器延时仿真中的 2、仿真电路原理图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

    在系统时钟为16MHz、预分频器为256时,创建500ms延时的定时器1的值计算公式如下:

    Timer 1 speed = 16Mhz/256 = 62.5 Khz 
    Pulse time = 1/62.5 Khz =  16us    
    Count up to = 500ms / 16us = 31250 
    
    bool LED_STATE = true;
    int ledPin = 7;
    void setup() {
      pinMode(ledPin, OUTPUT);        // 设置引脚为输出模式
      cli();                      // 停止中断直到完成设置
      /*第一步:重置控制寄存器以确保我们从禁用所有内容开始。*/
      TCCR1A = 0;                 //重置整个TCCR1A寄存器
      TCCR1B = 0;                 //重置整个TCCR1B寄存器
     
      /*第二步:通过更改 CS10、CS12和CS12位将预标量设置为所需值. */  
      TCCR1B |= B00000100;        // 设置 CS12为1,得到预分频值= 256
      
      /*第三步:我们在寄存器OCIE1A上启用比较匹配模式*/
      TIMSK1 |= B00000010;        // 将OCIE1A设置为 1,启用比较匹配寄存器A
      
      /*第四步:将寄存器A的值设置为31250*/
      OCR1A = 31250;             // 最后将比较寄存器A设置为这个值
      sei();                     // 启用中断
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    }
    
    // 计时器中断服务函数
    ISR(TIMER1_COMPA_vect){
      TCNT1  = 0; // 将计时器设置回 0,以便为下一次中断重置
      LED_STATE = !LED_STATE;
      digitalWrite(ledPin,LED_STATE);
    }
    

    上面代码实现了每 500 毫秒中断一次。 每次触发中断,我们就去相关的ISR向量。 由于Arduino UNO有 3 个计时器,因此有 6 个 ISR 向量,每个计时器两个,它们具有以下名称:TIMER1_COMPA_vect

    • TIMER1_COMPB_vect
    • TIMER2_COMPA_vect
    • TIMER2_COMPB_vect
    • TIMER3_COMPA_vect
    • TIMER4_COMPB_vect

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^