C51程序设计与仿真LED流水灯

学习Proteus软件的知识、如何安装、如何使用,熟悉Proteus电路仿真软件,并完成一个51程序设计和仿真

目录

前言

1、51程序设计与仿真

1、摆放原件

2、编写51程序

1)创建一个工程

2)编写main.c文件

3、开始仿真

4、使用MDK编译stm32简单程序(闪烁LED)

1.新建工程

5、STM32系列芯片的原理

1.STM32系列芯片的地址映射和寄存器映射原理

6、总结

7、参考文献



前言

Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。虽然国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。 Proteus是英国著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DSPIC33、AVR、

1、51程序设计与仿真

1、添加原件

在 Keywords 处输入 AT89C51 ,然后在中间的窗口内双击AT89C51芯片,即可添加到元件列表中,而后依次添加LED-YELLOW、RES

1、摆放原件

(1)左击元件列表窗内的 AT89C51 芯片,然后再原理图编辑窗口内左击摆放。

(2)左击元件列表内的 LED-YELLOW ,再点击 旋转按钮 ,可以在预览窗内看见元件顺时针旋转了下,再在原理图编辑框内一次摆放LED灯共8个。

(3)再按照(2)的步骤依次摆放8个电阻,然后左键双击“10K”,弹出修改值的对话框,将10K修改为300,以至于让LED更亮。

(4)拉一条主线。

(5)连接管脚。

(6)点击终端接口→选择POWER,放置电源,然后左键双击电源图标,修改为VCC,再点击OK。

(7)使用 LBL 为支线标记编号,连接到主线的支线,需要对支线进行编号才能正常连接,否则后面需要正常实验成功

这样,一个LED流水灯原理图就制作完成了。

2、编写51程序
1)创建一个工程

(1)打开 Keil 软件,点击 Project → New uVision Project …

(2)然后将下列代码复制粘贴到Text1

`//51单片机编程常用的头文件
    #include <reg51.h>
    #include <intrins.h>
    //延迟函数
    void delay_ms(int a)
    {
        int i,j;
        for(i=0;i<a;i++)
        {
            for(j=0;j<1000;j++) _nop_();}
}
​
void main(void)
{
    while(1)
    {
        P0=0xfe;
        delay_ms(50);
        P0=0xfd;
        delay_ms(50);
        P0=0xfb;
        delay_ms(50);
        P0=0xf7;
        delay_ms(50);
        P0=0xef;
        delay_ms(50);
        P0=0xdf;
        delay_ms(50);
        P0=0xbf;
        delay_ms(50);
        P0=0x7f;
        delay_ms(50);
    }
}`

(3)点击保存按钮,再命名为main.c文件,右键点击 Source Group 1 ,再点击 Add Existing Files to Group “Source Group 1”,选中刚刚创建的 main.c 文件,并点击 Add 。

2)编写main.c文件

(1)点击魔法棒,在弹出的窗口内选择 Output ,再勾选 Create HEX File ,然后点击 OK,点击编译按钮,进行编译,编译成功并生成了两个头文件

3、开始仿真

(1)回到Proteus软件的原理图内,双击 AT89C51 芯片后,在弹出的窗口的 Program File 一栏从刚才 keil 软件编译后的路径中添加 .hex 文件,再点击 OK 。

(2)点击调试按钮,开始仿真,仿真结果如下!!

4、使用MDK编译stm32简单程序(闪烁LED)

1.新建工程

在菜单栏点击Project中的New uVision Project,在想要的存储地址新建文件夹名为“点亮LED”

进入该文件夹将项目命名为project并保存,之后选择我们的单片机–STM32F103RB(在我们的STM32最小板的芯片上写了相应的型号),之后点击OK,

在菜单栏点击File–New,将其保存命名为mian.c(注意:这里命名的名字后面一定要加“.c”)

输入以下代码

`//用来存放STM寄存器映射 #define PERIPH_BASE ((unsigned int)0x40000000)//AHB #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) //GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址 #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) //GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址 #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) //GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址 #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) //GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址 #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) //GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址 #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) //GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址 #define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) //GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))

#define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8)) //#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8 //定义typedef类型别名 typedef struct { volatile unsigned int CR; volatile unsigned int CFGR; volatile unsigned int CIR; volatile unsigned int APB2RSTR; volatile unsigned int APB1RSTR; volatile unsigned int AHBENR; volatile unsigned int APB2ENR; volatile unsigned int APB1ENR; volatile unsigned int BDCR; volatile unsigned int CSR; } RCC_TypeDef;

#define RCC ((RCC_TypeDef *)0x40021000) //定义typedef类型别名 typedef struct { volatile unsigned int CRL; volatile unsigned int CRH; volatile unsigned int IDR; volatile unsigned int ODR; volatile unsigned int BSRR; volatile unsigned int BRR; volatile unsigned int LCKR; } GPIO_TypeDef; //GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为GPIO_TypeDef #define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)

void LEDInit( void ) { RCC->APB2ENR|=1<<2; //GPIOA ???? GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; }

//延时 void Delay_ms( volatile unsigned int t) { unsigned int i,n; for (n=0;n<t;n++) for (i=0;i<800;i++); }

int main(void) { LEDInit(); while (1) { LED0=0;//LED灭 Delay_ms(500);//延时 LED0=1;//LED亮 Delay_ms(500);//延时 } }`

在右边的工具栏中找到Source Goupe 1,右击,点击Add Existing Files to Group ‘Source Goupe 1’

点击Keil工具箱的魔术棒,点击Debug里的ST-Link Debuggeer,点击旁边的Settings,勾选ST-LINK/V2和SW

后点击确定,进行编译,编译成功后点击LOAD即可看到LED闪烁

5、STM32系列芯片的原理

1.STM32系列芯片的地址映射和寄存器映射原理

地址映射原理:为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。

Cortex™-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字

映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操

作的相同效果。

在STM32F10xxx里,外设寄存器和SRAM都被映射到一个位段区里,这允许执行单一的位段的

写和读操作。

下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:

bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4)

其中:

bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。

bit_band_base是别名区的起始地址。

byte_offset是包含目标位的字节在位段里的序号

bit_number是目标位所在位置(0-31)

2.嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作有哪些相同与差别? 相同:

(1)存储位置:内存中的变量和外部设备都需要使用特定的存储位置。变量在内存中有自己的地址,而外部设备通常通过特定的寄存器与处理器或控制器连接,并且每个寄存器都有一个地址。 (2)数据传输:在代码中,变量的修改或外部设备的操作都需要进行数据传输。无论是将值存储到变量中还是将数据发送到外部设备的寄存器中,都需要进行数据传输。

不同:

(1)访问权限:对于内存中的变量,C程序可以直接读取和修改其值,除非变量被声明为常量或指针限定符限制了访问权限。而对于外部设备,其寄存器的访问权限可能受到硬件保护机制的限制,需要通过特定的接口和指令来访问。 (2)时间延迟:对内存中的变量的修改是即时的,读取和写入的延迟很小,因为内存通常是与处理器直接连接的。而对外部设备的操作通常涉及与设备之间的通信,可能需要等待设备响应,因此有时会出现较大的时间延迟。 (3)编程接口:对于内存中的变量,可以通过直接访问变量的地址来读取和修改其值。而对于外部设备,通常需要使用特定的接口和寄存器操作来与设备进行通信和控制。这些操作可能需要使用特定的寄存器配置、位操作或特殊指令来实现正确的设备控制。

总之,尽管在代码层面上,对内存中的变量和外部设备的操作可能存在一些相似之处,但在底层实现和使用接口上存在明显的差异。合理理解和处理这些差异对于编写嵌入式系统中的操作是很重要的。

3.为什么51单片机的LED点灯变成要比STM32的简单? (1)编译语言:

因为STM32比51的外设、时钟等高出许多,51单片机结构相对简单,所以通常多使用汇编语言和C语言编程,而STM32系列的开发工作,不会采用汇编语言,因为工程量巨大,寄存器太多,位数也多

(2)编程方式: 51单片机只需要配置寄存器打开就可以编程,而STM32系列单片机需要先打开对应的时钟,包括开启后打开外部时钟才开始工作

(3)资源不同:

STM32的内部资源(寄存器和外设功能)较普通的51单片机都要多,所以在编程上有更多的选择

(四)C程序中变量修饰符的作用 1.与PC平台上的一般程序不同,嵌入式C程序经常会看见 register和volatile 关键字,请解释这两个变量修饰符的作用,并用C代码示例进行说明。 在嵌入式C程序中,经常会看到register和volatile这两个变量修饰符,它们用于对变量的行为和存储进行修饰。

(1)register关键字:

register关键字建议编译器将变量存储在寄存器中,以便快速访问。它提供了一种提示,但并不保证编译器会将变量存储在寄存器中。这是因为寄存器的数量有限,编译器可能会根据优化策略和当前的寄存器分配情况来决定是否将变量存储在寄存器中。 register修饰符的使用场景通常是对频繁访问的变量进行优化,以减少内存访问的开销。例如,循环中的计数器变量可以使用register关键字修饰。 (2)volatile关键字:

volatile关键字告诉编译器该变量可能会在意料之外的情况下被修改,因此在编译器进行优化时应该避免对该变量进行过度优化。 volatile修饰符用于变量在多线程环境、硬件寄存器、中断服务程序等需要及时更新变量值的场景。因为这些情况下,变量的值可能由于外部因素而发生变化,而编译器通常无法感知到这些变化。

6、总结

  通过阅读本文章,学习到了如何使用Proteus创建工程、原理图界面的使用、设计一个简单的51原理图、使用Keil软件编译Hex文件,Proteus仿真软件使用起来十分方便,学习到了如何安装MDK软件、建立工程、编写代码、编译程序、仿真调试。

7、参考文献

Proteus使用教程并仿真51程序——LED流水灯_proteus仿真-CSDN博客

ARM开发:使用MDK编译stm32简单程序(闪烁LED)_stm32点亮led灯的mdk-arm-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第一章:AVR单片机C语言程序设计概述 1.1 AVR单片机简介 1.2 AVR Studio+WinAVR开发环境安装及应用 1.3 AVR-GCC程序设计基础 1.4 程序与数据内存访问 1.5 I/O端口编程 1.6 外设相关寄存器及应用 1.7 中断服务程序 1.8 GCC在AVR单片机应用系统开发中的优势 第二章:PROTEUS操作基础 2.1 PROTEUS操作界面简介 2.2 仿真电路原理图设计 2.3 元件选择 2.4 仿真运行 2.5 PROTEUS与AVR Studio的联合调试 2.6 PROTEUS在AVR单片机应用系统开发中的优势 第三章:基础程序设计 3.1 闪烁的LED 3.2 左右来回的流水 3.3 花样流水 3.4 LED模拟交通 3.5 单只数码管循环显示0~9 3.6 8只数码管滚动显示单个数字 3.7 8只数码管显示多个不同字符 3.8 K1~K4控制LED移位 3.9 数码管显示4×4键盘矩阵按键 3.10 数码管显示拨码开关编码 3.11 继电器控制照明设备 3.12 开关控制报警器 3.13 按键发音 3.14 INT0中断计数 3.15 INT0及INT1中断计数 3.16 TIMER0控制单只LED闪烁 3.17 TIMER0控制的流水 3.18 TIMER0控制数码管扫描显示 3.19 TIMER1控制交通指示 3.20 TIMER1与TIMER2控制十字路口秒计时显示屏 3.21 用工作于计数方式的T/C0实现100以内的按键计数 3.22 用定时器设计的门铃 3.23 报警器与旋转 3.24 100000秒以内的计时程序 3.25 用TIMER1输入捕获功能设计的频率计 3.26 用工作于异步模式的T/C2控制的可调式数码管电子钟 3.27 TIMER1定时器比较匹配中断控制音阶播放 3.28 用TIMER1输出比较功能调节频率输出 3.29 TIMER1控制的PWM脉宽调制器 3.30 数码管显示两路A/D转换结果 3.31 模拟比较器测试 3.32 EEPROM读写与数码管显示 3.33 Flash程序空间中的数据访问 3.34 单片机与PC机双向串口通讯仿真 3.35 看门狗应用 第四章:硬件应用 4.1 74HC138与74HC154译码器应用 4.2 74HC595串入并出芯片应用 4.3 用74LS148与74LS21扩展中断 4.4 62256扩展内存 4.5 用8255实现接口扩展 4.6 可编程接口芯片8155应用 4.7 可编程外围定时计数器8253应用 4.8 数码管BCD解码驱动器7447与4511应用 4.9 8×8LED点阵屏显示数字 4.10 8位数码管段位复用串行驱动芯片MAX6951应用 4.11串行共阴显示驱动器MAX7219与7221应用 4.12 16段数码管演示 4.13 16键解码芯片74C922应用 4.14 1602字符液晶测试程序 4.15 1602液晶显示DS1302实时时钟 4.16 1602液晶工作于四位模式实时显示当前时间 4.17 2×20串行字符液晶演示 4.18 LGM12864液晶显示程序 4.19 PG160128A液晶图文演示 4.21 TG126410液晶串行模式演示 4.21 用带SPI接口的MCP23S17扩展16位通用IO端口 4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器 4.23 用TWI接口控制MAX6955驱动16段数码管显示 4.24 用DAC0832生成多种波形 4.25 用带SPI接口的数模转换芯片MAX515调节LED亮度 4.26 正反转可控的直流电机 4.27正反转可控的步进电机 4.28 DS18B20温度传感器测试 4.29 SPI接口温度传感器TC72应用测试 4.30 SHT75温湿度传感器应用 4.31 用SPI接口读写AT25F1024 4.32 用TWI接口读写24C04 4.33 MPX4250压力传感器测试 4.34 MMC存储卡测试 4.35 红外遥控发射与解码仿真 第五章:综合设计 5.1 多首电子音乐的选播 5.2 电子琴仿真 5.3 普通电话机拨号键盘应用 5.4 手机键盘仿真 5.5 数码管模拟显示乘法口诀 5.6 用DS1302与数码管设计的可调电子钟 5.7 用DS1302与LGM12864设计的可调式中文电子日历 5.8 用PG12864LCD设计的指针式电子钟 5.9 高仿真数码管电子钟 5.10 1602LCD显示的秒表 5.11 用DS18B20与MAX6951驱动数码管设计的温度报警器 5.12 用1602LCD与DS18B20设计的温度报警器 5.13 温控电机在L298驱动下改变速度与方向运行 5.14 PG160128中文显示日期时间及带刻度显示当前温度 5.15 液晶屏曲线显示两路模数转换结果 5.16 用74LS595与74LS154设计的16×16点阵屏 5.17 用8255与74LS154设计的16×16点阵屏 5.18 8×8LED点阵屏仿电梯数字滚动显示 5.19 用内置EEPROM与1602液晶设计的MD5加密电子密码锁 5.20 12864LCD显示24C08保存的开机画面 5.21 12864LCD显示EPROM27C256保存的开机画面 5.22 IIC-AT24C1024×2硬字库应用 5.23 SPI-AT25F2048硬件字库应用 5.24 带液晶显示的红外遥控调速仿真 5.25 能接收串口信息的带中英文硬字库的80×16点阵显示屏 5.26 用AVR与1601LCD设计的计算器 5.27 电子秤仿真设计 5.28 模拟射击训练游戏 5.29 PC机通过485远程控制单片机 5.30 用IE访问AVR+RTL8019设计的以太网应用系统
原理: MCS- 51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。每组I/O口内部都有8位数据 输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。四组并行I/O端口即可以按字 节操作,又可以按位操作。当系统没有扩展外部器件时,I/O端口用作双向输入输出口; P0、P1、P2和P3接口均具有普通I/0口的功能,P0、P2口还可以作系统地址和数据总线、 P3口有第二功能,P3口的第二功能大多与其内部功能部件有关,RD、WR是外部数据存储 器的写、读控制信号,它与MCS-51的内部功能器件配合使用。 本实验用到的P1口内部结构如图1所示。作输出时:输出0即(P1.x=0)时,将0输出 到内部总线上,在写锁存器信号控制下写入锁存器,锁存器的反向输出端输出1,下面的 场效应管导通,输出引脚成低电平。输出1时,下面的场效应管截止,上面的上拉电阻使 输出为1。作输入时:P1端口引脚信号通过一个输入三态缓冲器接入内部总线,再读引脚 信号控制下,引脚电平出现在内部总线上。为了能读到真实的引脚信号,下面的场效应 管必须截止,即锁存器的内容必须是1。为了能正确读取引脚信号,锁存器必须先写1。 通过C51程序的编写,可以使I/O口的每根引脚在不同的时间输出不同的0、1信号,从而 控制外部的设备。 归纳四个并行口使用的注意事项如下: 1、如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个 口均可作I/O口使用。 2、四个口在作输入口使用时,均应先对其写"1",以避免误读。 3、P0口作I/O口使用时应外接10K的上拉电阻,其它口则可不必。 4、P2可某几根线作地址使用时,剩下的线不能作I/O口线使用。 5、P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。 内容及过程: 用proteus设计流水电路,将仿真实验板上51单片机的P1口的8根线与实验板上的8 位LED连接,I/O口的一根引脚控制一个LED。根据实验板上LED的硬件连接,编写 程序使8个LED从最低位依次点亮,每次只亮一盏。依此循环。 一、在此基础上编写程序使用一根I/O线接一开关控制流水流向。 1、用keil软件编写流水程序: (1)、启动Keil仿真软件后,点击Project菜单新建项目(new project); (2)、新建项目后,选择仿真单片机型号,并新建、保存、然后加入程序文件(add files to group"source group") (3)、编写言程序程序如下: #include "reg51.h" main() #include "intrins.h" { #define uchar unsigned char temp=0xFE; #define uint unsigned int for(i=0;i<8;i++) uchar temp,i; { void delay(uint z) P0=temp; { temp=_crol_(temp,1); uint x,y; delay(400); for(x=z;x>0;x--) } for(y=110;y>0;y--);//延时函数 } } (4)、程序写好后,进行连接、编译、生成hex文件,如图2、图3所示: 图2 单击output,然后点击creat hex fi: 图3 生成led.Hex文件 2、用proteus仿真软件画出流水的电路图,用到的元器件有:AT89C51RB2、CAP、八个 LED-BLUE、CRYSTAL、RES、BUTTON及电源和接地。图如4所示: 图4 proteus流水仿真电路图 3、双击单片机,导入程序,如图5所示: 图5 导入流水的hex文件 二、在此基础上编写程序使8个LED从两边向中间循环点亮。 1、用keil软件编写从两端向中间移动流水程序: (1)、启动Keil仿真软件后,点击Project菜单新建项目(new project); (2)、新建项目后,选择仿真单片机型号,并新建、保存、然后加入程序文件(add files to group"source group") (3)、编写言程序程序如下: #include"reg51.h" #include"intrins.h" #define uchar unsigned char #define uint unsigned int uchar a,b,i; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=240;y>0;y--); } main() { while(1) { for(i=0;i<5;i++) { a=(~(0x01<<i))&0x0f; b=(~(0x80>>i)
300个C51单片机设计proteus仿真源码软件源码: 100000秒以内的计时程序 10秒的秒表 12864LCD图形滚动演示 128X64LED 160128LCD图文演示 1602字符液晶滚动演示程序 1602液晶显示的DS1302实时时钟 16×16点阵(滚动显示) 16×16点阵2(滚动显示) 2io5键盘模拟音量数码管显示 2×20串行字符液晶演示 32x16汉字 44行列键盘 485全双工通信 4×4键盘矩阵控制条形LED显示 4个独立式按键控制LED开关 4个独立式按键控制LED移位 4只数码管滚动显示0~3 555可调PWM发生器 555的应用 6264扩展内存 6个16×16点阵 74HC154译码器应用 74HC595 74HC595串入并出芯片应用 74LS138译码器应用 74LS148扩展中断 8051双机通信简例 8255并行口扩展实例 89C51PWM 8x8LED汉字显示 8x8点阵做的贪吃蛇游戏 8×8LED点阵屏显示数字 8只数码管同时显示不同字符 8只数码管显示多个不同字符 8只数码管滚动显示8~F 8只数码管滚动显示单个数字 8只数码管滚动显示数字串 8只数码管闪烁显示 8通道自动温度检测系统仿真(含原程序) ADC0808 PWM实验 ADC0809模数转换与显示 ADC0832模数转换与显示 AT89C51对直流电动机的驱动 AVR_Uart BCD译码数码管显示数字 c51 可预设电压的数控电源(功能强大) clock Conter CPU控制的独立式键盘扫描实验 da、ad。液晶,传递函数模型综合应用的实例 DIY51式数控电源 DS1621温度传感器实验 ds18b20 DS18B20温度传感器实验 DS18B20温度检测及其液晶显示 HorseLight I2C IIC-24C04与数码管 IIC-24C04与蜂鸣器 INT0与INT1中断计数 INT0中断3位计数 INT0及INT1中断计数 INT0和INT1控制条形LED INT1中断5位计数 IO并行口直接驱动单个数码管 K1-K4 分组控制LED K1-K4 控制LED移位 K1-K4 控制数码管加减演示 K1-K4 控制数码管移位显示 K1-K4 键状态显示 key_lcd ks0108 液晶12864 LCD频率计仿真 LED代码查询V1[1].1 LED模拟交通 LED闪烁 M16_AN_Compare M16_EEPROM M16_Horse MAX7221控制数码管动态显示 my16key_c NT0中断控制LED NT0中断计数 NumberDisplay P3口流水 PCF8574 PCF8583+LCD1602 PCF8591模数与数模转换实验 proteus ADDC的练习程序 PWM PWMLED PWM控制LED的亮度仿真程序 PWM控制马达的方法 PWM波输出(可调) PWM电机正反转 pwm程序实例 PWM调温 RAM扩展练习 sscom32串口调试 TIMER0与TIMER1控制条形LED TIMER0控制LED二进制计数 TIMER0控制单只LED闪烁 TIMER0控制四只LED滚动闪烁 TIMER0控制流水 ULN2803 usart_t 《lcd1602仿真实例》 一个数控直流稳压电源 一个步进电机的仿真 一步一步教你51_PC串口通信 万能逻辑电路实验 三机通讯 串口仿真mcu_pc 串口方式1 串行数据转换为并行数据 交通 从左到右的流水 光藕隔离驱动电机 内部函数intrins.h应用举例 净水控制器仿真电路 刚做好的十个字的led屏模拟有程序 包含单片机寄存器的头文件 单只按键控制单只数码管滚动显示 单只数码管循环显示0-9 单只数码管循环显示0~F 单片机与PC机串口通讯仿真 单片机之间双向通信 单片机向PC发送数据 单片机向主机发送字符串 单片机接收PC发出的数据 单片机控制的电动自行车驱动系统 单片机数据发送程序 发一个用定时器做的PWM 基于1602+ds12b80+ds1302+音乐+电子书+流水的多功能电子表 基于ADC0832的数字电压表 基于AT24C02的多机通信 基于AT89C51+MAX7219的频率计 附带proteus仿真电路图 实际硬件电路测试通过 基于DS1302的日历时钟 基于yjwpm测试过的DS18B20仿真实例 多功能电子钟 多点温度测量 多路开关状态指示 大屏幕仿真 子电路做的一个H型电机驱动电路 字符串函数string.h应用举例 字符函数ctype.h应用举例 宏定义应用举例 定时器中断控制的独立式键盘扫描实验 定时器控制交通指示 定时器控制数码动态显示 定时器控制数码管动管显示 对I2C总线上挂接多个AT24C0

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值