Proteus软件初学笔记一

简介: Proteus软件初学笔记一

@[toc]

Proteus软件初学

一、常用元器件

在这里插入图片描述

二、学习视频

Proteus使用教程可以查看该视频链接,我觉得讲的挺好的:https://www.bilibili.com/video/BV1Y7411N7YK?p=2

Keil5 结合Proteus 的使用可以看一下该视频:
https://www.bilibili.com/video/BV1H7411n7AY?p=4&spm_id_from=pageDriver
在这里插入图片描述
在这里插入图片描述

三、Project

1、晶振电路和复位电路

时钟电路

  • 芯片:AYM89C51
  • 晶振:CRY,12M
  • 电容:CAP,22pf
  • 作用:晶振电路是给单片机提供时钟信号的。晶振电路产生单片机必须要用到的时钟频率,单片机发送的所有指令都是建立在这个基础上的
  • 晶振的时钟频率越高,单片机的运行速度越快。它是一条条的从ROM中获取指令,然后再去执行。单片机每访问一次存储的时间叫做机器周期,机器周期又被分为12个时钟周期

复位电路:上电复位,按键复位

  • 电阻:RES
  • 作用:利用它把电路恢复到起始状态,像计算器的清零按钮的作用一样,以便回到原始状态,重新进行计算。

在这里插入图片描述

2、LED流水灯的实现

2.1、LED原理

LED,选带ACTIVE的,可以看得到元器件的可视化,是亮还是灭
电流方向:P ----> N
如果是硅,0.7V,如果是锗,0.3V在这里插入图片描述

2.2、供阳极接法和供阴极接法

==供阳极接法==:将所有LED的P极接一起,此时N极需要接低电平,低电平亮,高电平灭,==低电平有效==
==供阴极接法==:将所有LED的N极接一起,此时P极需要接高电平,==高电平有效==
单片机可以吸入的电流为20mA,所以阳极接法需要有电阻(电阻阻值不得小于250)才能与单片机相连

在这里插入图片描述

2.3、呼吸灯实现闪烁的代码

#include"reg51.h"
// sbit 表示对位进行控制 
sbit LED0 = P2^0;
/*
 * 延时函数 
 * 延时函数`delay()`的本质:通过空语句占用程序的时间,从而达到延时的效果
*/
void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

void main()
{
   
   
    while(1)
    {
   
   
        LED0 = 0;//亮
        delay(5);//加入延时函数
        LED0 = 1;//灭
        delay(5);//加入延时函数
    }
}

2.4、呼吸灯实现代码(供阳极和供阴极接法)

#include"reg51.h"
// sbit 表示对位进行控制 
sbit LED0 = P2^0;
/*
 * 延时函数 
*/
void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

/*
 * 实现流水灯效果
*/
void led()
{
   
   
    int i=0;
    for(i=0;i<8;i++)
    {
   
   
        /*
        * 因为是低电平亮,所以进行取反操作,
        * 因为实现流水灯操作,所以进行移位操作
        * P2 为供阳极接法
        * P1 为供阴极接法
        */
        P2=~(0x01<<i);//~0000 0001 ->0000 0010 -> 0000 0100    
        P1=(0x01<<i);//~0000 0001 ->0000 0010 -> 0000 0100        
        delay(50);
    }
}

void main()
{
   
   
    while(1)
    {
   
   
        led();
    }
}

2.5、通用流水灯的操作

将输出的数据用数组进行表示,用 for循环将其遍历出来
代码如下:

#include"reg51.h"
// 轮流滚动的小灯数据
unsigned char leddat[]={
   
   0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

void led()
{
   
   
    int i=0;
    for(i=0;i<8;i++)
    {
   
   
        P2=~leddat[i];
        delay(100);
    }
}

void main()
{
   
   
    // 保证程序能够不断运行
    while(1)
    {
   
   
        led();
    }
}

2.6、实现花式流水灯效果

#include"reg51.h"
unsigned char leddat[50]={
   
   
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x81,0x82,
0x84,0x88,0x90,0xA0,0xC0,0xC1,0xC2,0xC4,0xC8,0xD0,
0xE0,0xE1,0xE2,0xE4,0xE8,0xF0,0xF1,0xF2,0xF4,0xF8,    
0xF9,0xFA,0xFC,0xFD,0xFE,0xFF,0xFF,0x00,0xFF,0x00
};

/*延迟函数 */
void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

void led()
{
   
   
    int i=0;
    for(i=0;i<50;i++)
    {
   
   
        P2 = ~leddat[i];
        delay(100);
    }
}

void main()
{
   
   
    while(1)
    {
   
   
        led();
    }
}

3、数码管

3.1、数码管的结构和原理

在这里插入图片描述

3.2、数码管上显示字母和数字

在这里插入图片描述

  • dp:是小数点位置
    在这里插入图片描述

    3.3、LED数码管的静态显示和动态显示

    1、静态显示方式

在这里插入图片描述

2、特点

  1. 公共端直接接地(供阴极)或接电源(供阳极)
  2. 每个数码的段选线与一组 I/O 接口线相连
  3. 每个数码管一直显示

3、实现效果 :从0--9反复变化的电路图

以阴极接法为例
在这里插入图片描述

4、代码

#include"reg51.h"
unsigned char s[]={
   
   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 供阴0--9



/*
 * 延迟函数
*/
void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

/*
 * 显示函数
*/
void seg()
{
   
   
    //P2 = 0x3F;//0011 1111
    int i =0;
    for(i=0;i<10;i++)
    {
   
   
        P2 = s[i];
        delay(300);
    }
}

void main()
{
   
   
    while(1)
    {
   
   
        seg();
    }
}

==注意:供阳极接法同上,需要更换的是数码管,接法以及代码中的取反==

3.4、LED数码管的动态显示

1、原理

在这里插入图片描述

  • 特点
  1. 从下到上依次为:a,b,c,d,e,f,,g,db
  2. 所有数码管的段选线与一组 I/O 接口线并连在一起
  3. 每个数码管的公共端由一根 I/O 线控制
  4. 显示为逐个显示

2、实现效果

在这里插入图片描述

3、代码

#include"reg51.h"
unsigned char s[]={
   
   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 供阴0--9
unsigned char str[]={
   
   0x76,0x79,0x38,0x38,0x3F};// HELLO
unsigned char wei[]={
   
   0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//显示不同的位
// 若将显示器1-8直接与单片机10-17连接,显示不同的位使用以下这种
// unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


/*
 * 延迟函数
*/
void delay(unsigned int n)
{
   
   
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
    {
   
   
        for(j=0;j<120;j++);
    }
}

/*
 * 显示函数
*/
void seg()
{
   
   
    //P2 = 0x3F;//0011 1111
    int i =0;
    for(i=0;i<5;i++)
    {
   
   
        P3=wei[i];
        P2 = str[i];//0011 1111
        delay(5);
    }
}

void main()
{
   
   
    while(1)
    {
   
   
        seg();
    }
}

延时函数delay()的本质:通过空语句占用程序的时间,从而达到延时的效果

相关文章
|
7月前
Proteus软件初学笔记二
Proteus软件初学笔记二
167 1
Proteus软件初学笔记二
|
7月前
Proteus添加新的元件库
Proteus添加新的元件库
173 0
一文教你学会keil软件仿真
一文教你学会keil软件仿真
758 1
|
开发者 Windows
笔记软件OneNote起死回生?居然还能这么用。
笔记软件OneNote起死回生?居然还能这么用。
|
传感器 数据采集 机器学习/深度学习
【毕业设计之树莓派系列】基于树莓派的智能小车设计
【毕业设计之树莓派系列】基于树莓派的智能小车设计
923 0
|
芯片
quartus ii引脚分配再学习下
quartus ii引脚分配再学习下
335 0
quartus ii引脚分配再学习下
|
IDE 算法 开发工具
labview下位机软件编程笔记
labview下位机软件编程笔记
187 0
|
Shell 网络安全 数据安全/隐私保护
树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
|
固态存储 Unix 异构计算
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
|
区块链 数据安全/隐私保护 计算机视觉
好工具推荐系列:看图软件irfanview和Honeyview
好工具推荐系列:看图软件irfanview和Honeyview
1013 0