![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机仿真
文章平均质量分 53
煤炭的奇妙漂流
热爱分享,拥抱开源
展开
-
【arduino教学】4x4 键盘
标准 4x4 键盘。非常适合数字输入,例如安全 PIN 码。源代码Arduino 代码示例下面的示例使用用于 Arduino 的键盘库。数组中设置的键名定义返回的值。它们不必与实际的密钥标签匹配(但如果不匹配,可能会令人困惑),并且它们必须只包含一个 ASCII 字符。keyskeypad.getKey()#include <Keypad.h>const uint8_t ROWS = 4;const uint8_t COLS = 4;char keys[ROWS][COLS]原创 2022-04-01 11:14:04 · 3164 阅读 · 2 评论 -
Arduino QR码生成器
改网址源代码// Arduino QR Code Generator// Author: Tomas Hubelbauer#include <LedControl.h> // https://github.com/wayoda/LedControl#include <qrcode.h> // https://github.com/ricmoo/QRCodeint size = 6;int side = size * 8;QRCode qrcode;// D.原创 2022-03-28 08:59:39 · 648 阅读 · 0 评论 -
arduino——提升ADC采样速度
提升arduino采样速度普通的 Arduino UNO 的采样速度基准电压可通过函数 analogReference() 或 ADMUX 寄存器中的 REFS[1:0] 位进行设置。void setup() { Serial.begin(9600); analogReference(INTERNAL); //调用板载1.1V基准源}void loop() { int i; float voltage; int sensorValue; unsigned long el原创 2022-03-23 09:08:39 · 7556 阅读 · 2 评论 -
STM32CUBE——使用DWT提供毫秒延迟
起因由于使用了CUBE,原子哥的延时就用不了,所以尝试其他延时函数:CUBE的HAL_Delay()和使用STM32的DWT(Data watchpoint trigger)前言为什么要学习这种延时的方法?HAL_Delay实用程序函数:它建立在SysTick计时器上,当我们跑操作系统,就一般会占用一个硬件定时器——SysTick(也可以把其他定时器当成时钟),这样一来又难免产生冲突。以便为在阻塞和非阻塞模式下工作的驱动程序提供两个版本。阻塞函数将使用我们今天将要开发的延迟实用程序(DWT)。非原创 2022-03-19 18:25:30 · 2410 阅读 · 3 评论 -
arduino——数组控制舵机
电路图仿真代码#include <Servo.h> Servo a, b, c, d; int data[5] = {0, 45, 90, 135, 180}; void setup() { a.attach(11); // a伺服电机连接引脚11 电机代号'b' b.attach(10); // b 伺服电机连接引脚10 电机代号'r' c.attach(9); // c 伺服电机连接引脚9 电机代号'f' d.attach(6)原创 2022-03-18 09:54:22 · 597 阅读 · 0 评论 -
arduino——串口控制舵机
串口控制舵机通过串口向Arduino发送指令控制一台舵机的原理和示例程序代码#include <Servo.h> Servo myServo; //创建Servo对象myServo int dataIndex = 0; //创建整数型变量,存储输入数据序列号void setup() { myServo.attach(6); Serial.begin(9600); //启动串口通讯,传输波特率9600 Serial.println("Pleas原创 2022-03-17 07:27:05 · 4272 阅读 · 4 评论 -
arduino——编码器示例(中断控制)
使用中断控制语法attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);参数pin: 中断引脚号ISR: 中断服务程序名mode:中断模式中断模式(mode)有以下几种形式:LOW: 当引脚为低电平时触发中断服务程序CHANGE: 当引脚电平发生变化时触发中断服务程序RISING: 当引脚电平由低电平变为高电平时触发中断服务程序FALLING: 当引脚电平由高电平变为低电平时触发中断服务程序返回值无注意:上次原创 2022-03-16 07:19:21 · 4836 阅读 · 1 评论 -
arduino——编码器示例
KY-040旋转编码器模块操作旋转编码器提供两种交互方式:每次用户旋转旋钮时,都会在 DT 和 CLK 引脚上产生低电平信号:顺时针旋转会先使CLK引脚变为低电平,然后DT引脚也变为低电平。逆时针旋转会使 DT 引脚首先变为低电平,然后 CLK 引脚变为低电平。示例代码#define ENCODER_CLK 2#define ENCODER_DT 3void setup() { Serial.begin(115200); pinMode(ENCODER_CLK, I原创 2022-03-14 10:33:26 · 3350 阅读 · 3 评论 -
arduino——继电器控制LED
操作继电器是具有两种状态的电子开关:线圈无动力和线圈供电。默认情况下,线圈未通电。您可以通过在引脚 COIL1 和 COIL2 之间施加电压来为线圈供电。当线圈未通电时,P1 连接到 NC1,P2 连接到 NC2( NC 是指常闭)。线圈通电时,P1连接到NO1,P2连接到NO2(NO表示常开).下图总结了中继的状态:代码const int relayPin = 13;void setup() { pinMode( relayPin, OUTPUT);}void loop()原创 2022-03-12 09:32:35 · 3666 阅读 · 2 评论 -
【有源码可在线仿真】ardunio——超声波测距(数码管显示)
仿真电路图代码// HC-SR04 Ultrasonic Distance Sensor with 7 Segment Display#include <SevSeg.h>#define TRIG_PIN A3#define ECHO_PIN A4SevSeg sevseg;uint16_t duration = 0;uint32_t interval = 0;//间隔float distance = 0;void setup(){ uint8_t nu原创 2022-03-09 07:15:47 · 1545 阅读 · 0 评论 -
【有源码可在线仿真】ardunio——超声波测距(LCD1602显示)
电路图代码// YWROBOT// Compatible with the Arduino IDE 1.0// Library version:1.1#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,20,4);// set the LCD address to 0x27 for a 16 chars and 2 line displayfloat cm;float inches;long readUlt原创 2022-03-06 07:42:31 · 1949 阅读 · 3 评论 -
arduino——Arduino电容测量计
Arduino电容测量计点击Arduino电容测量计在线仿真定义电容被定义为身体存储电荷的能力。电容的单位是法拉(符号:F),以英国物理学家迈克尔·法拉第的名字命名。1 法拉电容器在充电时具有 1 库仑的电荷,其板之间的电位差为 1 伏。电容测量每个Arduino电容计都依赖于电容器的相同基本特性 - 时间常数。电容器的时间常数定义为电容器两端的电压在充满电时达到其电压的63.2%所需的时间。较大的电容器需要更长的时间来充电,因此具有较大的时间常数。Arduino可以测量电容,因为电容器充电所需的原创 2022-03-05 16:20:34 · 3632 阅读 · 0 评论 -
74HC595驱动数码管实现秒计时
【例4.4】74HC595驱动数码管实现秒计时1.输出数据用cy进位输出2.使用定时器定时1秒CY(Carry)在单片机里是进位标志。CY=0是无溢出,CY=1有溢出。用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0。对无符号数的运算,判断只需CY即可,对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。#include<AT89X52.h>#include<intrins.h>s原创 2022-02-26 14:42:47 · 1698 阅读 · 0 评论 -
arduino教程——PIND寄存器使用
PIND介绍arduino中使用Port操作PORTD映射到Arduino数字引脚0到7DDRD - 端口D数据方向寄存器 - 读/写PORTD - 端口D数据寄存器 - 读/写PIND - 端口D输入引脚寄存器 - 只读电路图#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27, 16, 2);void setup() { lcd.init(); lcd.backlight(); lcd.pri原创 2022-02-25 07:56:29 · 1998 阅读 · 0 评论 -
proteus——555 PWM 发生器
4.555 PWM Generator什么是 PWM 信号?脉宽调制(PWM)是一种数字信号,最常用于控制电路。该信号在预定义的时间和速度内设置为高(5v)和低(0v)。信号保持高电平的时间称为"导通时间",信号保持低电平的时间称为"关断时间"。PWM 有两个重要参数,如下所述:PWM 的占空比:PWM信号保持高电平(导通时间)的时间百分比称为占空比。如果信号始终导通,则为100%占空比,如果始终关闭,则为0%占空比。占空比 =导通时间/ (导通时间 + 关断时间)PWM 的频率:PWM信号原创 2022-02-22 09:09:08 · 8990 阅读 · 0 评论 -
proteus教程——DAC0832输出连续锯齿波
典型应用为了使DAC完全可行,我们需要控制所有5个控制引脚。引脚ILE应为高电平,其他控制引脚CS、WR1、WR2和XFER应为低电平,以使DAC正常工作。1.电路图2.代码#include<reg51.h>#include<absacc.h>void main(){unsigned char i;while(1){ for(i=0;i<=255;i++){ XBYTE[0xbfff]=i; if(i==255) break;} for(i=2原创 2022-02-21 16:22:46 · 5250 阅读 · 1 评论 -
proteus——采用 LM317 的稳压电源
采用 LM317 的稳压电源由于从事电子工作的工程师需要为不同的电子项目和组件提供不同的直流电源电压范围。由于连接到不同的电源的电线,它变得非常笨拙且难以管理,并且每个电源也消耗一个额外的电源插座。因此,在这个项目中,我们将克服这个问题,并学会制作一个可调节的直流电源,在这个电源中,我们将获得广泛的电压范围。所需组件一级降压变压器五个 1N4007 二极管一个 4700 微法拉德极化电容器一个 100 微法拉极化电容器3 个 0.1 微法拉非极性电容器一个 5 kΩ 电位计一个 22原创 2022-02-21 12:07:33 · 12521 阅读 · 2 评论 -
arduino教程——贪睡数字闹钟
5.UNO闹钟点击此处alarm-clock.ino - Wokwi Arduino and ESP32 Simulator开始在线仿真该数字闹钟在4位7段显示屏上显示时间。它具有以下特点:两个按钮用于设置当前时间(小时/分钟)具有贪睡功能的可编程警报报警声音可以在代码中轻松自定义,甚至可以播放旋律冒号闪烁以指示秒数可选RTC,使时钟更精确断电恢复:当前时间和报警设置存储在RTC中如何使用时钟要设置时间,请按分钟/小时按钮。按下警报按钮可启用/禁用警报。屏幕将通过显示单词"打开"原创 2022-02-20 09:38:17 · 14221 阅读 · 3 评论 -
proteus——ADC0832应用实例
1·模数转换器ADC0832应用实例2.工作时序图下图ADC0832串行A-D转换工作时序,从图中看出,其工作时序分为两和个阶段:第1阶段为起始和通道配置,由CPU发送,从ADC0832DI端输入;第2阶段为A-D转换数据输出,由ADC0832从DO端输出,CPU接收。(1)起始和通道配置该阶段由4个时钟组成。在片选CS满足条件(完成从高到低的跳变)后,第1个时钟脉冲的上升沿,测得DI=1,即启动ADC0832;第2、3个时钟上升沿输入A-D通道地址选择:00和01为差分输入,10和11为单端原创 2022-02-18 17:23:25 · 6661 阅读 · 0 评论 -
arduino——UINO的水位指示器
使用ARDUINO的水位指示器学到什么1.用UNO编写水位指示器程序2.理解水位传感器工作原理3.提供在线仿真点击使用ARDUINO的水位指示器开始在线仿真在这个项目中,我们将制作一个水位指示器。我们都知道它是最重要的产品之一,因为每个家庭或办公室都有很多水箱,其中大多数都不容易检查其中的水位,我认为我们大多数人都面临着诸如缺水之类的问题,因为我们没有任何东西来监测水箱中可用的确切水量,这会导致许多问题我们的日常生活。在此项目中,我们将使用以下组件Arduino UNO发光二极管水位原创 2022-02-18 11:38:29 · 4323 阅读 · 0 评论 -
arduino教程——UNO西蒙游戏
UNO——simom game学到什么1.用UNO编写simom game程序2.理解索引(Index)的用法点击simom game开始在线仿真西蒙是一个简单的电子记忆游戏:用户必须重复一个不断增长的颜色序列。通过点亮 LED 来显示序列。每种颜色还具有相应的色调。在每个回合中,游戏将播放序列,然后等待用户根据颜色序列按下按钮来重复序列。如果用户正确重复了序列,游戏将播放"升级"声音,在序列末尾添加新颜色,然后移动到下一个回合。游戏将继续,直到用户犯错。然后播放一个声音游戏,游戏重新启动。原创 2022-02-18 09:12:18 · 3956 阅读 · 0 评论 -
ADC0808确定地址及查询方式示例
地址高8位是P2口,0x7F地址低8位是P0口,0xF8因为P2.7控制读写端口WR、RD,0的时候选中芯片,因此必须P2.7必须是0,因为P0.0、P0.1、P0.2连接的是ADC0809的地址端口ADDA、ADDB、ADDC,当译码选中IN0通道的时候是000而其他引脚无用,默认是1,因此结果就是P2 P0=0 111 1111 1111 1 000(0x7FF8)3.2、 示例采用查询方式3.2.1、电路原理图查询方式多了一个译码器。3.2.2、代码#include <r.原创 2022-02-17 18:41:29 · 4567 阅读 · 4 评论 -
arduino——ATtiny85 SSD1306 + DHT
ATtiny85 SSD1306 + DHT学到什么1.ATtiny85 SSD1306 + DHT显示功能及温度2.理解arduino中的millis()函数点击ATtiny85 SSD1306 + DHT开始在线仿真源代码/* Why the heart icon? Because I thought it was cool and I want to use it in the future with some heartbeat sensor. I neede原创 2022-02-17 10:14:54 · 1108 阅读 · 0 评论 -
proteus——rs-232双机通讯
1.电路图MAX232为+5V单电源供电的RS-232电平转换芯片,内部集成电荷泵电路、能产生+12V和-12V两个电源,提供RS-232串口电平的需要,其引脚图如图5~20所示。其中,引脚1、2、3、4、5、6外接电容,组成电荷泵。T1in、T2in为TTL电平输入端,转换成RS-232电平后,分别从T1our、T2our输出;R1in、R2in为RS-232电平输入端,转换成TTL电平后,分别从R1our、R2our输出。2.代码#include<reg51.h>//包含访问sfr原创 2022-02-14 18:08:14 · 4118 阅读 · 0 评论 -
arduino教程——西蒙游戏
西蒙游戏 Simon Game《西蒙游戏》是一款益智休闲类小游戏,它的游戏规则是,让玩家记住不同颜色的灯的亮灯顺序后,依次点击灯,如果次序与AI给予的次序相同,则游戏继续并增加难度,否则游戏结束,重置游戏。在线arduino西蒙游戏代码/** Simon Game for ATTiny85 Copyright (C) 2018, Uri Shaked Licensed under the MIT License.*/#include <avr/sleep.h>原创 2022-02-13 13:40:47 · 3599 阅读 · 0 评论 -
proteus——串口通信奇偶标志方式
1.电路图2.代码(1)甲机发送#include<reg51.h>//包含访问sfr库函数rug51、hsbitP27=P2^7,//定义奇偶标志灯驱动端bit F=0;//定义乙机回复标志-并清0unsigned char i;//定义发送数据序号i(全局变量)unsigned char code c[10]=(//定义发送数据数组,并赋值0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xf8,0xf8,0x80,0x90);//0~9共阳享股码void ma原创 2022-02-12 15:44:01 · 862 阅读 · 0 评论 -
proteus——与门扩展中断
1.电路图2.代码要求某一按键闭合时,在P1口输出显示该键编号。#include<reg51.h>unsigned char n;//定义键序号n(全局变量)unsigned char code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义共阳字段码数组,并赋值unsigned char code k[8]=(0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f); //定义键原创 2022-02-11 15:28:11 · 1363 阅读 · 0 评论 -
proteus教程——出租车行驶里程计数
1.电路图2.代码#include<reg51.h>//#include<absacc.h>//unsigned long s=0;unsigned char code c[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};void chag6(unsigned long x, unsigned char y[6]){y[0]=x/100000;x=x%100000;y[1]=x/10000;原创 2022-02-08 15:27:21 · 829 阅读 · 2 评论 -
proteus教程——读写AT24C02
1.延时问题有些教材和技术资料对IIC基本信号的脉宽和延时有一定的时间要求,在上述基本信号和数据传送子函数中加入了若干延时操作指令;另一些教材和技术资料则无此要求。经编者实验验证,80 C51单片机在fosc=12 MHz条件下,基本信号子函数和单字节读写子函数中的波形延时指令可以略去但写N字节子函数中必须有页写缓冲延时,否则,写后若立即读AT24C02,将失败。有关AT24Cxx页写缓冲的概念说明如下:由于E⁹PROM的半导体工艺特性,对E²PROM的写入时间需要5~10ms,但AT24Cxx系列原创 2022-02-07 20:34:32 · 6449 阅读 · 3 评论 -
proteus教程——cc4014串行输入
1.CC4014简介CC4014与CC4021同为CMOS 4000系列并入串出”移位寄存器,区别在于置入并行数据的条件不同。CC4014除需要并入串出控制端P/S=1外,还需要CLK脉冲上升沿触发配合。CC4014引脚图如图3-33所示,功能表如表3-15所列。程序设计根据4014与4021置入并行数据条件的区别,只要在锁存并行口数据后,插入一个由TXD端发出的上升沿触发脉冲、其余相同3.程序设计(1)串行输入8位键状态信#include<reg51.h>sbit ps=P2~原创 2022-01-26 15:06:40 · 949 阅读 · 0 评论 -
proteus教程——cc4021串行输入
.原创 2022-01-25 15:29:31 · 944 阅读 · 0 评论 -
proteus教程——并行扩展静态RAM
一、静态ram和动态ram的区别动态RAM会周期性的刷新,静态RAM不进行刷新1、静态RAM,指SRAM:只要有供电,它保存的数据就不会丢失,且为高速存储器,如CPU中的高速缓存(cache)2、动态RAM,指DRAM:有供电,还要根据它要求的刷新时间参数,才能保持存储的数据不丢失,如电脑中的内存条静态RAM的优点:速度快,数据不易丢失,控制简单动态 RAM的优点:存储密度高静态RAM是靠双稳态触发器来记忆信息的;动态RAM是靠MOS电路中的栅极电容来记忆信息的。由于电容上的电荷会原创 2022-01-23 15:43:57 · 2620 阅读 · 0 评论 -
零成本学arduino教程——74hc165扩展寄存器教程
74HC165是一款具有8个并行输入的移位寄存器:它使您能够同时对8个输入引脚进行采样,然后一次读取一个位的结果。换句话说,这是扩展微控制器输入引脚数量的简单方法。移位寄存器有两种状态:采样和移位。PL 引脚选择活动状态。原创 2021-12-03 07:53:17 · 3982 阅读 · 3 评论 -
proteus教程——使能端口控制8255
**使能端口控制8255 *该教程代码是使能端口,而不是操作内存,操作内存WR和RDsbit wr = P3^6;sbit rd = P3^7;在我们使用 8255 可编程外设界面之前,我建议您查看它的工作原理、引脚图、模式、如何选择端口(A、B、C 和控制寄存器),以及如何为使能控制字端在这里,我们将使用 0 模式下的 8255 端口 A,使用引脚 P1.0 和 8051 的 P1.1 进行编程。sbit A0 = P1^0;sbit A1 = P1^1;电路图C 代码使用 825原创 2021-12-02 10:34:18 · 3559 阅读 · 0 评论 -
proteus教程——操作内存并行扩展8255
1.8255A芯片介绍点击芯片详细介绍或blog查看更多8255A 有三个端口,即 A 端口、B端口和 C端口。端口 A包含一个 8 位输出闩锁/缓冲器和一个 8 位输入缓冲。端口 B类似于 端口 A。端口 C可按控制字分为两个部分,即端口 C 下部 (PC0-PC3) 和端口 C 上部 (PC7-PC4)。8255共有40个引脚,采用双列直插式封装,各引脚功能如下:D0–D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。CS:片选信号线,低电平有效,表示芯片被选中。RD原创 2021-11-20 14:48:27 · 3669 阅读 · 0 评论 -
keil教程——用示波器解释数据总线 XBYTE[0X7FFF]和XBYTE[0XbFFF]
一、总线概述计算机的总线分为控制总线、地址总线和数据总线等三种。而数据总线用于传送数据,控制总线用于传送控制信号, 地址总线则用于选择存储单元或外设。在这里我们用到的是数据总线DB,它允许数据双向流通二.程序设计1.源码#include <absacc.h> //访问绝对地址必需函数库void main(){ unsigned long t; while(1){ DBYTE[0x30] = XBYTE[0x7fff]; //读入数据 for(t=0;t<1000.原创 2021-11-05 17:33:30 · 1247 阅读 · 0 评论 -
零成本——手机学arduino
零成本——手机学arduino虚拟在线Arduino模拟器和红外遥控器 + 红外接收器手头紧张,没钱买元器件,嘿,伙计不用着急,我将带你仅用手机或电脑零成本学习arduino及一些传感器可以学到什么:了解如何使用红外(红外)遥控器和LCD液晶屏。熟悉arduino的LCD和IR函数库;学会将遥控器的键值在LCD液晶屏显示我使用在线免费的arduino模拟器来演示它。让我们开始吧!!!需要组件Arduino Nano或者 (Arduino UNO)红外接收器红外发射机(红外遥控器原创 2021-11-04 19:53:51 · 649 阅读 · 0 评论 -
proteus仿真4路AD转换——pcf8591芯片
1.proteus原理图AIN0~AIN3:模拟信号输入端。A0~A2:引脚地址端。VDD、VSS:电源端。SDA、SCL:I2C 总线的数据线、时钟线。OSC:外部时钟输入端,内部时钟输出端。EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。AGND:模拟信号地。AOUT:D/A 转换输出端。VREF:基准电源端。...原创 2021-10-05 20:17:02 · 5997 阅读 · 3 评论 -
单片机MAX7219芯片仿真
MAX7219芯片在这篇blog里https://blog.csdn.net/m0_46152804/article/details/1204189291.目的使用MAX7219计时0~99s2.原理图3.软件#include<reg51.h>#include<stdio.h>sbit DIN=P3^0;sbit LOAD=P3^1;sbit CLK=P3^2;sbit key0=P1^0;sbit key1=P1^1;//寄存器宏定义 #defi原创 2021-09-22 19:35:03 · 778 阅读 · 2 评论 -
Proteus——测量脉冲频率
1.“频率”、“占空比”、“脉宽”三者之间的关系。:频率f=占空比δ/脉冲宽度t一、频率简介频率,是单位时间内完成周期性变化的次数,二、占空比简介占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。三、脉宽简介脉冲宽度就是高电平持续的时间2.原理图#include<reg51.h> //包含访问sfr库函数req51. #include<absacc.h> //包含绝对地址访问库函数bit T = 0; //一秒标志unsigned c原创 2021-07-20 21:12:01 · 5929 阅读 · 1 评论