当前位置: 首页 > news >正文

使用keil点亮stc8核心板的灯

点灯

二、点灯

在这里插入图片描述

步骤:

  • 配置IO口模式
  • 输出高低电平

2.1 点亮第一盏灯

2.1.1 点灯

在这里插入图片描述

  • 原理图

    • 通过控制 P5.3引脚输出高电平时,LED灯就点亮,输出低电平时LED灯就熄灭
  • IO配置操作

在这里插入图片描述

  • 烧录程序

    在这里插入图片描述

  • main 函数中没有死循环会导致程序执行完成后出现不可预料的行为

    1. 程序“跑飞”:
    main 函数返回后,CPU会继续执行后续内存中的内容。由于这些位置通常没有有效代码,程序会跳转到随机地址执行,导致行为失控。

    2. 系统崩溃:
    执行无效指令极易触发硬件异常、数据损坏或陷入新的死循环,最终导致系统复位或崩溃。

    3. 中断失效:
    系统依赖中断处理实时事件。如果主程序已经“跑飞”,系统就失去了稳定的运行环境,中断服务程序将无法正常执行或安全返回,导致功能失灵。

  • 代码错误解决

    在这里插入图片描述

在这里插入图片描述
写代码的顺序
在这里插入图片描述

2.1.2 Keil环境使用补充
  • 打开代码所在路径

    在这里插入图片描述

  • 如何打开项目

  • 打开头文件

  • 代码分屏

  • 需要保留的文件

    在这里插入图片描述

2.2 stc8h用户手册介绍

  • IO配置说明
    在这里插入图片描述

  • 如何外接上拉电阻

    在这里插入图片描述

2.3 IO四种工作模式

在这里插入图片描述

  • IO配置示例代码

    P5M1 &= ~0x08,	P5M0 &= ~0x08; //准双向口
    P5M1 &= ~0x08,	P5M0 |=  0x08; //推挽输出
    P5M1 |=  0x08,	P5M0 &= ~0x08; //高阻输入
    P5M1 |=  0x08,	P5M0 |=  0x08; //开漏输出
    
    • P5表示的是5号端口

    • 0x08表示的是3号引脚

      • 引脚编号和值的对应关系

        编号
        00x01
        10x02
        20x04
        30x08
        40x10
        50x20
        60x40
        70x80

2.4 软延时实现灯闪烁

在这里插入图片描述

常见时间单位换算:

  • 1秒 = 1000 毫秒(ms)

  • 1秒 = 1, 000, 000 微秒(μs)

  • 1秒 = 1, 000, 000, 000 纳秒(ns)

#include "STC8H.H"
//延长时间
void Delay500ms(void)	//@11.0592MHz
{unsigned char data i, j, k;i = 29;j = 14;k = 54;do{do{while (--k);} while (--j);} while (--i);
}void main()
{//准双向P5M0 &=~(1<<3) ; P5M1 &=~(1<<3) ; 		//P5M0 &= ~0x08; P5M1 &= ~0x08; //推挽输出//P5M0 |=(1<<3) ; P5M1 &=~(1<<3) ; 	//P5M0 |= 0x08; P5M1 &= ~0x08; //高阻输出//P5M0 &=~(1<<3) ; P5M1 |=(1<<3) ; 	//P5M0 &= ~0x08; P5M1 |= 0x08; //   开漏输出//P5M0 |=(1<<3) ;P5M1 |=(1<<3) ;//P5M0 |= 0x08; P5M1 |= 0x08; //P53 = 1;while (1){P53 = 0;Delay500ms();P53 = 1;Delay500ms();}
}

2.5 寄存器点灯

在这里插入图片描述
在这里插入图片描述

//#include "STC8H.H"
//通过寄存器在头文件的的信息
//数据类型		变量名										硬件的地址
sfr         P5          =           0xc8;
sbit    	P53         =           P5^3;
sfr         P5M1        =           0xc9;
sfr         P5M0        =           0xca;
void Delay500ms(void)	//@11.0592MHz
{unsigned char data i, j, k;i = 29;j = 14;k = 54;do{do{while (--k);} while (--j);} while (--i);
}void main()
{//准双向P5M0 &=~(1<<3) ; P5M1 &=~(1<<3) ; 		//P5M0 &= ~0x08; P5M1 &= ~0x08; //推挽输出//P5M0 |=(1<<3) ; P5M1 &=~(1<<3) ; 	//P5M0 |= 0x08; P5M1 &= ~0x08; //高阻输出//P5M0 &=~(1<<3) ; P5M1 |=(1<<3) ; 	//P5M0 &= ~0x08; P5M1 |= 0x08; //   开漏输出//P5M0 |=(1<<3) ;P5M1 |=(1<<3) ;//P5M0 |= 0x08; P5M1 |= 0x08; //P53 = 1;while (1){P53 = 0;Delay500ms();P53 = 1;Delay500ms();}
}
  • 地址的H只是十六进制的标志,不是数字的有效组成部分

  • sfr和sbit和关键字:

    关键字定义作用示例
    sfr特殊功能寄存器 (Special Function Register)定义单片机内部特定功能模块所对应的寄存器,如端口、定时器等。sfr P5M1 = 0xC9; // P5 端口配置寄存器 1 sfr P5M0 = 0xCA; // P5 端口配置寄存器 0 sfr P5 = 0xC8; // P5 端口寄存器
    sbit位 (Bit)定义特定寄存器中的某一位,便于对寄存器的单个位进行操作。sbit P53 = P5^3; // 定义 P5.3 引脚
    // P为大写,不是不是小写
    // 定义 端口 = 地址
    // 声明:P5端口配置寄存器1
    sfr P5M1 = 0xC9;// 特殊功能寄存器
    // 声明:P5端口配置寄存器0
    sfr P5M0 = 0xCA;// 特殊功能寄存器// 声明:P5端口寄存器 = 地址
    sfr P5	 = 0xC8; 
    // 定义: 引脚 = 地址
    sbit P53 = P5^3;
    

2.6 库函数的使用

  • 库函数代码下载位置

    在这里插入图片描述

  • 库函数资料说明

在这里插入图片描述

2.6.1 库函数点灯
  • 烧录程序的主频

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 拷贝文件

在这里插入图片描述

在这里插入图片描述

  • 宏定义初始化

    在这里插入图片描述

    在这里插入图片描述

  • 结构体传参初始化

    在这里插入图片描述

2.6.2 L16警告解除

在这里插入图片描述

2.6.2 delay模块使用

在这里插入图片描述

#include "GPIO.h"
#include	"Delay.h"void GPIO_config(void) {GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义GPIO_InitStructure.Pin  = GPIO_Pin_3;		//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P5, &GPIO_InitStructure);//初始化
}void main() {GPIO_config();//双向io//P5_MODE_IO_PU(GPIO_Pin_3);//推挽输出//P5_MODE_OUT_PP(GPIO_Pin_3);//P53是p5的第3个引脚//P53 = 1;while (1){P53 = 1;delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250);P53 = 0;delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250);}return ;
}

2.7 代码常见错误

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/311511.html

相关文章:

  • 逻辑回归 银行贷款资格判断案列优化 交叉验证,调整阈值,下采样与过采样方法
  • MQTT 入门教程:MQTT工具调式
  • 堆----2.前 K 个高频元素
  • VirtualBox 的 HOST 键(主机键)是 右Ctrl 键(即键盘右侧的 Ctrl 键)笔记250802
  • 学习笔记:无锁队列的原理以及c++实现
  • Linux 高级 I/O 系统调用详解
  • Vue 响应式基础全解析2
  • Node.js中path模块的使用指南
  • InfluxDB 与 Node.js 框架:Express 集成方案(二)
  • 如何在`<link type=“icon“ href=`的`href`中写SVG并使用path标签? 笔记250802
  • 嵌入式 C 语言入门:递归与变量作用域学习笔记 —— 从概念到内存特性
  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发
  • Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat
  • 技术文章:覆铜板的阻燃性
  • UniappDay07
  • 【AI】AIService(基本使用与指令定制)
  • cv快速input
  • 【云计算】云主机的亲和性策略(三):云主机 宿主机
  • Springboot原理和Maven高级
  • 操作系统:远程过程调用( Remote Procedure Call,RPC)
  • MQTT 入门教程:三步从 Docker 部署到 Java 客户端实现
  • Linux基础学习笔记二
  • MySQL PostgreSQL JDBC URL 配置允许批量操作
  • C语言输入安全10大边界漏洞解析与防御
  • 基于LSTM模型与加权链路预测的动态热门商品成长性分析
  • SpringBoot相关注解
  • 项目管理平台是什么?概念、定义、作用、主流厂商解读
  • docker:将python开发的大模型应用,打成docker容器
  • C#中的除法
  • PostGIS面试题及详细答案120道之 (081-090 )