《嵌入式硬件(一):裸机概念与80c51单片机基础》

系统与操作特性

裸机系统通常不包含操作系统,依赖直接硬件操作。RAM(随机存取存储器)用于临时数据存储,读写速度快但断电后数据丢失。

处理单元分类表
缩写 全称 功能描述
SoC System on Chip 高性能处理单元(集成CPU/GPU/内存的高性能芯片)
MCU Microcontroller Unit 微小控制单元->单片机(集成存储与外设的单片机)
MPU Microprocessor Unit 微处理单元(需外接存储的处理核心)
GPU Graphics Processing Unit 图像处理单元(专用于图形计算)
CPU Central Processing Unit 中央处理单元(通用计算核心)
数据类型规范
  • int类型占用2字节存储空间(16位系统)
  • unsigned int取值范围为0到65535(2^16-1)
  • 十六进制常量表示如0xFFFF对应十进制65535
寄存器操作原理

寄存器(外设):是指能够操作硬件的,具有固定地址的内存空间

通用寄存器(如P0-P3)可通过数据类型直接映射:

c 复制代码
unsigned char P0 = 0x00;  // 8位寄存器声明

特殊功能寄存器(SFR)具有固定物理地址,51架构中通过sfr关键字定义:

c 复制代码
str P0 = 0x80;  // 地址0x80的端口寄存器
硬件接口标准
  • 原理图网络编号规则:红色标识相同电气节点
  • 电源符号标准:Vcc表示正电源,GND为地线
  • 外设接口类型:
    • GPIO:可编程输入/输出引脚
    • UART:异步串行通信接口
    • TIMER:硬件定时器模块
电平逻辑规范

共阴极LED晶体管:高电平时整个晶体亮

代码

main.c

cs 复制代码
#include <reg52.h>
#include "led.h"
#include "digiter.h"
#include "delay.h"

int main(void)
{
	int i;//必须定义在前面
	//led_on_all();//打开所有灯

	//led_off_on();//关闭所有灯

	//P2 &= ~((1 << 4)| (1 << 6) | (1 << 2) | (1 << 0));//开灯

	//P2 |= ((1 << 4)| (1 << 6) | (1 << 2) | (1 << 0));//关灯(需要先关灯)

	//P0 = t[9];
	//bit_select(1);//位选
	
	

	while(1)
	{
		//P2 ^= 0x0F;
		//delay(60000);//延时
		
		
		/*for(i = 0;i < 8;++i)
		{
			led_on(~(1 << i));//开某个灯
			delay(3000);
		}		
		for(i = 6;i >0; --i)
		{
			led_on(~(1 << i));
			delay(3000);
		}	*/

		/*for(i = 0;i < 10;++i)
		{
			seqment_select(i);//段选
			delay(50000);
		} */ 

		//show_number(1234);输出1234
		show_number(i++);计时器0~9999
	}
}

led.h

cs 复制代码
#ifndef _LED_H_
#define _LED_H_

extern void led_on_all(void);
extern void led_off_on(void);
extern void led_on(unsigned int n);
#endif

led.c

cs 复制代码
#include <reg52.h>

void led_on_all(void)
{
	P2 = 0;
}


void led_off_on(void)
{
	P2 = 0xFF;
}

void led_on(unsigned int n)
{
	P2 = n;
}

digiter.h

cs 复制代码
#ifndef _DIGITER_H_
#define _DIGITER_H_

extern void bit_select(int n);
extern void seqment_select(int n);
extern void show_number(int n);

#endif

digiter.c

cs 复制代码
#include <reg52.h>
#include "delay.h"
#include "digiter"

void bit_select(int n)
{
	P1 &= ~(0x0F << 0);
	P1 |= (1 << n);
}


void seqment_select(int n)
{
	unsigned char t[10] = {0X3F, 0X06, 0X5B, 0X4F, 0x66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F};
	P0 = t[n];
	delay(100);
	P0 = 0;
	delay(100);
}

void show_number(int n)
{	if(n > 9999)
	{
		return;
	}
	else if(n == 0)
	{
		 bit_select(0);
		 seqment_select(0);
	}
	else
	{
		int t = 0;
		while(n)
		{
			bit_select(t++);
			seqment_select(n % 10);
			n /= 10;
		}
	}
}

delay.h

cs 复制代码
#ifndef _DELAY_H_
#define _DELAY_H_

extern void delay(unsigned int n);

#endif

delay.c

cs 复制代码
#include <reg52.h>
#include "delay.h"

void delay(unsigned int n)
{
	while(n--);
}
相关推荐
♞沉寂10 小时前
51单片机:发光二极管与动态数码管控制
单片机·嵌入式硬件·51单片机
jianqiang.xue11 小时前
Proteus8 + STM32CubeMX 实现 STM32F103R6 串口通信教程
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·proteus
DebugKitty14 小时前
硬件开发1-51单片机3-串口
单片机·嵌入式硬件·51单片机·串口·全双工·同步通信·串口寄存器
hazy1k15 小时前
8051单片机-成为点灯大师
驱动开发·嵌入式硬件·51单片机
Coision.1 天前
硬件:51单片机
单片机·嵌入式硬件·51单片机
Coision.1 天前
硬件:51单片机的按键、中断、定时器、PWM及蜂鸣器
linux·嵌入式硬件·51单片机
不懂机器人1 天前
51单片机----LED与数码管模块
单片机·嵌入式硬件·51单片机
Janspran2 天前
嵌入式硬件 - 51单片机2
单片机·嵌入式硬件·51单片机
2401_888423092 天前
51单片机-LED与数码管模块
单片机·嵌入式硬件·51单片机