自学嵌入式 day40 51单片机

发布于:2025-08-02 ⋅ 阅读:(56) ⋅ 点赞:(0)

一、嵌入式:以应用为中心,计算机为基础,软硬件可剪裁的专用计算机系统

二、MCU:Micro Controcler Unit 微控制单元->单片机

        1、特点:集成化高,集成到一块芯片

                        外设(GPIO、UART、ADC)

                        性能弱,成本低

                        控制领域,电机控制

注:1、外存:存放程序,代码,掉电数据不丢失,读写数据慢,价格便宜

        2、内存:临时数据,变量,掉电数据丢失,读写数据快

内核

栈区
堆区
数据区
文本区

三、CPU:Central Processing Unit 中央处理器

                指令处理,数据运算

四、MPU:Micro Processing Unit 微处理器

                单个cpu+外接内存+外接外设

五、SOC:System On Chip 片上系统

六、NPU:神经网络处理器

七、FPU:浮点数处理单元

八、ROM:只读存储器,存放单片机的程序、指令、掉电数据不丢失

九、RAM:随机访问存储器,存放随机变量

注:

        1、

        int a;

        int b;

        int c;

        c = a+b;

        1)、cpu去ram取a和b的值;

        2)、cpu去RAM取指令;

        3)、cpu进行数据运算;

        4)、再将运算后的数据写到RAM中;

        2、单片机应用场景:分布式传感采集:控制(电机控制)

        3、

十、位运算

        1、其他位不变,指定位清零:t = t & ~(1<<n)

        2、其他位不变,指定位置一:t = t |(1<<n)

十一、keil程序编写流程

        1、点击project选项,创建一个工程

        2、点击new project 创建文件

        3、在对应目录下创建一个文件

        4、创建文件名

        5、选择cpu芯片型号,Atmel -> At89c51

        6、点击否

        7、向Group中添加.c/.h文件

        8、编写程序

        9、点击上方Build编译程序

十二、程序

        1、流水灯

        (1)main.c

#include"delay.h"
#include"led.h"
int main()
{
    int i= 0;
    led_init();
    while(1)
    {
        for(i =0;i < 8;++i)
        {
            led_show(1<<i);
            delay(0x3fff);
            led_alloff();
        }    
        for(i = 7;i >=0;--i)
        {
            led_show(1<<i);
            delay(0x3fff);
            led_alloff();
        }
    }
    return 0;

}

        (2)led.c

#include<reg51.h>

void led_init(void)
{
     P2 = 0xff;
}

void led_allon(void)
{
    P2 = 0;
}

void led_alloff(void)
{
    P2 = 0xff;
}

void led_show(unsigned int n )
{
    P2 = ~(n);
}

        (4)delay.c

void delay(unsigned int time)
{
    while(time--)
    {
    
    }
}

2、计数

(1)main.c

#include "digiter.h"
#include "delay.h"
#include <reg51.h>

int main()
{
    int i =0;
    while(1)
    {
        digiter_show(i);
        i++;
        delay(0xafff);
        if(i == 9999)
        {
            i = 0;
        }
    }

}

        (2)digiter.c

#include<reg51.h>
#include "delay.h"
unsigned char seg[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void select_bit(unsigned int n)
{
    P1 = 0xf0;
    P1 |= 1<<n;
}

void select_seg(unsigned int n)
{
    P0 = seg[n]; 
}

void digiter_show(unsigned int n)
{
    int m =0;
    int i = 0;
    while(n != 0)
    {
        m = n%10;
        P0 = 0;
        select_bit(i++)
        select_seg(m);
        delay(0x3fff);
        n /=10;
    }
}

(3)delay.c

void delay(unsigned int time)
{
    while(time--);
}