IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机学习笔记_2 LED 模块 -> 正文阅读

[嵌入式]51单片机学习笔记_2 LED 模块

程序编写前言

新建项目 new μversion project

选择 CPU 型号:Atmel 中的 AT89C52 即可,不用把8051启动文件添加到工程中。

新建好后有一个文件夹:source group,代码文件都在其中。

选中该文件夹,右键新建new item,新建c语言文件。可以选c/cpp/asm

在魔术棒 Output 选项中添加 “ create HEX file".

程序框架

#include "reg52.h"
void main()
{
    while(1)
    {
    }
}

编译:translate按钮

建立:build按钮,也有编译的作用,只编译发生变动的文件。

重新建立:rebuild,编译所有文件(速度慢不建议)。

报错如果显示:缺少root segment根段,即没有找到主函数。

头文件作用

#include<reg52.h>和`#include “reg52.h"都可以。区别在于<>直接去软件安装处搜索头文件,而”"先在该项目下查找头文件,找不到再去软件安装处,再找不到就报错。

查看头文件可以在左侧的结构树对应的c文件目录下打开,或者右键“reg52.h" open 打开。

该头文件中定义了52单片机内部所有功能寄存器,把地址值如0x80赋值给P0等端口。

HELLO WORLD——LED部分

点亮 LED

GPIO(general purpose input output) 即通用输入输出端口,可以通过软件控制其输入和输出.

在这里插入图片描述

  • 电源引脚: Vcc, GND
  • 晶振引脚:XTAL1 2
  • 复位引脚:RST VPD,不做其他功能。
  • 下载引脚:TXD RXD
  • GPIO引脚:Px.x的都是 GPIO 引脚,大致分为P0 P1 P2 P3,每组8个IO,P3还有附加功能,比如串口、外部中 断、计数器等。每个引脚每次只能使用一个功能。
/****************************************************************
********************** 实验名称:点亮第一个 LED
接线说明:
实验现象:下载程序后“LED 模块”的 D1 指示灯点亮
注意事项:
*****************************************************************
**********************/
#include "reg52.h"
sbit LED1=P2^0; //将 P2.0 管脚定义为 LED1
/****************************************************************
***************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*****************************************************************
**************/
void main()
{
    LED1=0; //LED1 端口设置为低电平,就会被点亮
    while(1)
    {
    }
}

编译结果里面的几个数据的意义:

code:表示程序所占用 FLASH 的大小。

data:数据储存器内部 RAM 占用大小。

xdata:数据储存器外部 RAM 占用大小。

LED 闪烁

只需要点亮——延时——熄灭——延时循环即可。

延时可以写一个这样的函数:

typedef unsigned int u16
void delay(u16 ten_us){
    while(ten_us--);
}

u16 代表16位的无符号整型数据。当 ten_us 超出 u16 的范围后,跳出 while 循环。

然后就LED1=0;delay(50000);LED1=1;delay(50000);循环即可.

传入参数=1时,延时大概是10μs,然而50000参数延时不是500ms左右,实际是450ms左右。

Keil 软件仿真

使用仿真功能查看 LED 闪烁案例中的实际延时时间。

  1. 点击魔术棒,选择 Target 选项卡,设置 Xtal 为12M或11.0592M,根据开发板晶振修改对应值。
  2. 点击黑色放大镜中有红色d的仿真按钮,进入仿真页面

在这里插入图片描述

我们要关注的参数是sec。

  1. 点击RST按钮重新复位系统参数,sec 变为0。然后在要调试的行前双击,就会出现红色块的断点,点击8运行时就会直接运行到断点处。再次点击就会运行到下一处断点处。
  2. 点击红色标记8运行,运行到36行时显示用时:0.00039s,再次点击运行到37行,用时:0.45s
  3. 可见delay花费时间约为0.45s

LED 流水灯

就是给P2的所有端口赋值为:1111 1110,每次只有一个为0即点亮,这个点亮的0从最高位逐渐降到最低位。

取反后即为:

1000 0000

0100 0000

0010 0000

0001 0000

0000 1000

0000 0100

0000 0010

0000 0001

也就是一个移位运算,0x01<<i的循环。

#include "reg52.h"
# define LED P2
void delay(unsigned int i){
	while(i--){}
}
void main()
{
    
    while(1)
    {
			int i=0;
			for(i;i<8;i++){
				LED=~(0x01<<i);
				delay(50000);
			}
    }
}

移位函数

位运算的移位操作只能补0,但是 Keil C51 软件内有对应的移位库函数,左移_crol_(),右移_cror_(),包含在 intrins.h 库中。

移位函数会把移出去的位补到空位,一个循环。

#include "reg52.h"
#include "intrins.h"
# define LED P2
void delay(unsigned int i){
	while(i--){}
}
void main()
{
    LED=~(0x01);
	delay(50000);
    while(1)
    {
			LED=_crol_(LED,1);
			delay(50000);
    }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:33:13  更:2022-09-13 11:35:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:58:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码