目录

一、开发环境

1、Keil5和STC-ISP

(1)keil5创建工程并设置生成.hex文件

(2)STC-ISP烧写keil编译生成的程序到单片机

二、点亮单片机的LED灯

1、关于sbit、sfr和bit

2、延时函数实现led闪烁

3、按键控制led亮灭(一开一关)

▶按键消抖方法:

▶标志位控制灯:

4.单按键控制led亮灭(I/O状态翻转)

▶ I/O状态翻转


一、开发环境

1、Keil5STC-ISP

(PS:本篇不涉及安装、汉化和破解等)

(1)keil5创建工程并设置生成.hex文件

①在任意位置创建项目工程文件夹命名为template(当做模板)

②在文件夹template中创建main.c

③打开keil工具栏project->new uVision project->选择第一步的工程文件夹位置->输入工程名

字->选择芯片类型AT89c52->会提示是否拷贝STARTUP.A51,选择是->生成了工程目录->在工程目

录Source Group1上右键鼠标->add Exiting file to Source Group1...->选择代码文件main.c

④Alt+F7打开设置选项,勾选create HEX file,确认即可

(2)STC-ISP烧写keil编译生成的程序到单片机

①单片机通过type-C数据线和电脑连接(如果不识别,安装ch340驱动,在资料包中选择单片机型

号STC89C52RC。

②选择生成的执行程序文件.hex

③点击"下载/编程"按钮

④单片机开关拨动重新上电

二、点亮单片机的LED

1、关于sbitsfrbit

▶sbit定义特殊功能寄存器的位变量(定义寻址对象,如访问特殊功能寄存器的某一个位)

▶sfr访问单片机内部所有特殊功能寄存器(如sfr P1 = 0x90这一句定P1为P1端口在片内寄存器)

▶bit定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。 bit和int char之类的差不多,只不过char=8位, bit=1位而已,都是变量。

(sbit、bit和sfr都是C51的扩充数据类型)

2、延时函数实现led闪烁

#include "reg52.h"
#include <intrins.h>#define ON   0
#define OFF   1sbit led_1 = P3^7;
void Delay1000ms()      //@11.0592MHz
{
unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}
void main(){while(1){led_1 = ON;Delay1000ms();led_1 = OFF;Delay1000ms();}
}

3、按键控制led亮灭(一开一关)

#include "reg52.h"
#include <intrins.h>
#define ON  0
#define OFF 1
sbit led_2 = P3^6;
sbit key_1 = P2^1;
sbit key_0 = P2^0; void Delay10ms()        //@11.0592MHz
{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);
}
void estimateLedMark(int ledMark){if(ledMark == ON){led_2 = 0;}else{led_2 = 1;}
}
void main(){int ledMark = OFF;while(1){    if(key_0 == ON){Delay10ms();           //延迟后再进行一次键位检测if(key_0 == ON)ledMark = ON;          //这里不直接灯亮,而是改变标志位的值}else if(key_1 == ON){Delay10ms();if(key_1 == ON)ledMark = OFF;}estimateLedMark(ledMark);    //在这里判断标志位值,再进行灯亮灭}
}

▶按键消抖方法:

(详见单片机按键“消抖”的思考_守恒的博客-CSDN博客_单片机按键消抖)

①延时消抖:最简单的消抖原理,当检测到按键状态变化后,先等待一个 10ms 左右的延时时间,

让抖动消失后再进行一次按键状态检测,如果与刚才检测到的状态相同,就可以确认按键已经稳定

的动作。

②状态机消抖(略)

▶标志位控制灯

实现:在具体实现亮灯时,不直接将其置为低电平,而是通过赋值表示状态的变量,然后通过判断

该状态的值实现灯亮灭。

好处:这样的按键处理,让程序减少了while的松手检测,这对于程序是十分有利的。

(虽然这里并未体现得特别明显)

4.单按键控制led亮灭(I/O状态翻转)

#include "reg52.h"
#include <intrins.h>#define ON   0
#define OFF  1sbit key_1 = P2^1;
sbit led_2 = P3^6;
void Delay500ms(){
unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}
void main(){led_2 = OFF;while(1){if(key_1 == 0){Delay500ms();led_2 = ~led_2;     //当按键按下,高低电平互相翻转}   }
}

 I/O状态翻转

第一篇 51单片机入门篇相关推荐

  1. 51单片机入门篇-LED点亮以及流水灯

    目录 一.发光二极管简介 1.二极管工作工作原理 2.单片机点亮LED原理 二.硬件电路连接 三.程序部分 3.1 点亮一个LED 3.2 点亮多个LED 3.3 闪烁一个LED 3.4 不同频率闪烁 ...

  2. 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程

    跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍         本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...

  3. 学习笔记之51单片机键盘篇(非编码键盘与编码键盘、非编码键盘的扫描方式、独立键盘、矩阵键盘)

    这篇博文主要记录51单片机键盘篇(非编码键盘与编码键盘.非编码键盘的扫描方式.独立键盘.矩阵键盘.键盘消抖等)包含原理图.代码等 (一)基础补充 1.键盘的任务 2.键盘的识别 3.如何消除按键的抖动 ...

  4. 第一章:Django入门篇

    文章目录 第一章:Django入门篇 一. web应用 二.HTTP协议(重要) 请求协议 响应协议 响应状态码 URL简介 三.django简介 3.2 目录介绍 3.3 启动项目 3.4 简单示例 ...

  5. 单片机stm32LED流水灯C语言,STM32单片机入门 篇二:单片机编程:从点亮LED灯开始(二)...

    STM32单片机入门 篇二:单片机编程:从点亮LED灯开始(二) 2019-04-26 13:21:48 19点赞 73收藏 19评论 写在前面的话:本篇是承接上一篇文章,属于小白向. 没看过的朋友点 ...

  6. 视频教程-跟着王进老师学开发之Python篇第一季:基础入门篇-Python

    跟着王进老师学开发之Python篇第一季:基础入门篇 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  7. 51单片机入门——数字时钟

    文章目录 1. 前言 1.1. 设计要求 2. 硬件原理 2.1. 时钟信号(晶振) 2.2. 按键开关 2.3. 数码管显示 3. 原理图 3.1. 仿真原理图 3.2. AD原理图 3.3. PC ...

  8. C语言极速学习开发——51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学习的精神之灯-下)

    系列文章目录 提示:本文章为系列文章,系列文章的所有文章的目录后期会时刻更新,喜欢的朋友请收藏好 <第一章 C语言极速学习开发--51单片机入门编程之使用KeilC51进行代码编译(点亮你心中学 ...

  9. 51单片机入门教程(6)——外部中断

    51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...

最新文章

  1. Developer Express XtraGrid使用技巧
  2. sigterm sigint sigkill 区别
  3. 高频变压器的磁饱和及变压器最大电流测量
  4. 又一个智商税产品“路由器防辐射笼”,信号都没了,还能火爆全网...
  5. java 并发编程第七章:取消和关闭
  6. Docker Review - docker 容器 常用命令
  7. 小谈RTMP中AMF3类型的Command message
  8. WPF 2D绘图(2)Geometry
  9. PIE SDK矢量数据编辑的撤销和回退
  10. ABAP基础篇-语法-数据类型
  11. 20一个自定义集合的自述
  12. Linux-tomcat版本升级
  13. http状态码大全(最全整理)
  14. 微信获取openid的时候报40163错的原因
  15. 美团网2015秋季校园招聘面试题(上)
  16. X16 - 999、中国近代史纲要、03708
  17. mac QQ 语音或视频时其他声音变小的解决办法
  18. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》观后感精彩影评5篇450字
  19. 苹果手机里微信数据删除怎么恢复?
  20. win10关闭windows聚焦_Windows 10聚焦怎么用?教你玩转Windows聚焦功能

热门文章

  1. 【数学公式】LaTex常用的数学字体
  2. 全网最详细最齐全的序列化技术及深度解析与应用实战
  3. python3安装pygame_Python pygame如何安装?
  4. (三十五:2021.01.12)MICCAI 2019学习(一)《前列腺近距离放射治疗中粒子定位的深度回归模型》
  5. ppt编辑器android,演示文稿编辑器 PPTWork PPT 幻灯片_v1.7.5
  6. buuctf (网鼎杯)wdb_2018_3rd_pesp realloc_hook, unlink,写入bss段3种方法记录
  7. M1版MacBook不能兼容所有的X86软件
  8. 反正切函数的一个重要性质
  9. 台服大航海OL竟然要合服?!看来要稍微应付一下了……
  10. 双击计算机找不到工具一项,桌面上计算机图标不见了怎么办?2种方法教你找回计算机图标...