单片机里面,点唱机用Arduino,用proteus电路原理图应该怎么画
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 这有个类似的问题, 你可以参考下: 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
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥15 stable diffusion
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘