本文主要是介绍AutoLeaders控制组—李佳旭 单片机学习笔记(LED灯 独立按键 数码管),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一 环境搭建
- 1.开发软件Keil5C51
- 2.烧录软件
- 3.普中51单片机开发板
- 二 单片机简介
- 1 基本介绍
- 2 命名规则
- 3 管脚图
- 4 逻辑运算
- 三 实操一:点亮一个LED
- 1 创建工程
- 2 创建文件
- 3 LED原理图
- 4 写程序
- 5 烧录
- 四 实操二 LED闪烁
- 1 利用stc烧录软件
- 2 函数名
- 3 编写程序
- 实操三:独立按键的运用
- 1 独立按键原理图
- 2 消抖
- 3 独立按键控制LED灯状态
- 实操四: 数码管的运用
- 1 数码管原理图
- 2 消影
- 3 程序
- 4 数码管段码表(十六进制)
一 环境搭建
1.开发软件Keil5C51
2.烧录软件
3.普中51单片机开发板
1 LED数码管
2 点阵
3 蜂鸣器
4 复位键
5 模数转换器
6 独立按键
7 无线模块
8 红外设备
9 矩阵按键
10 LED灯
这里推荐一下B站视频教学,内容很详细。
https://www.bilibili.com/video/BV1Mb411e7re?p=1
二 单片机简介
1 基本介绍
-
单片机(Micro Controller Unit ,即MCU)
-
MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机,是把CPU的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制,诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。
结构图如下
CPU:(中央处理单元)负责处理和执行指令 CPU的核心是从程序或应用程序获取指令并执行计算。该过程分为三个关键阶段:获取,解码和执行。CPU从RAM中提取指令,对指令的实际含义进行解码,然后使用CPU的相关部分执行指令。
RAM: RAM是随机存取存储器(random access memory),是计算机内部存储器中的一种,也是其中最重要的,计算机和手机中一般把其叫做(运行)内存,它的速度要比硬盘快得多,所以用运行程序在RAM中,而存放运行时不用的数据则在硬盘中,什么时候需要数据,便把数据从硬盘中拿到内存,但同时RAM断电会丢失数据,所以我们电脑如果断电了就会丢失原来正在运行的数据。
ROM:ROM是只读存储器(Read-Only Memory),它具有断电不丢失数据的特性。
2 命名规则
以我们学的stc 89 c 52 rc 40 I-PDIP 40为例
stc公司 12t/6t8051系列 工作电压5.5v到3.8v 8k字节程序空间及512ram空间 工作频率40mhz 工作温度范围-40℃到85℃ 封装类型为PDIP 管脚40
3 管脚图
P1/2 :用于连接外部设备
Vcc: 电源正极
Gnd:电源负极
XTAL: 晶振,用于给单片机提高时间,驱动代码运行
RST: 用于复位
4 逻辑运算
在写程序时,我觉得逻辑运算符会比较重要。
特别注意以下六个运算符
0001 & 0010 -> 0000
0001 | 0010 -> 0011
0001 ^ 0010 -> 0011
~0011 1000 -> 1100 0111
0000 0011 << 0000 1100 //需要移位的数字 << 移位的次数
0000 1011 >> 0000 0010 //右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。
三 实操一:点亮一个LED
1 创建工程
点new project
新建文件夹
创建工程名称
选择单片机类型
均可,建议选否。
2 创建文件
3 LED原理图
在图中,我们可以看到LED最终连到了单片机管脚上。单片机控制电路输出高低电频来控制LED的亮灭。(因为这个单片机LED模块是共阳的,所以输入0LED灯才会亮)
4 写程序
#include <STC89C5xRC.H>void main()
{P2 = 0xFE; //1111 1110
}
5 烧录
Keil一般默认不打开create hex file。(使用我们需要打开这个设置)
之后打开stc烧录软件 先选择并调试好对应的单片机类型和程序,最后下载编程。
成功一般有这个标识。
四 实操二 LED闪烁
1 利用stc烧录软件
编写延时代码
2 函数名
有nop时应该添加 #include <INTRINS.H>
3 编写程序
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2=0xFE;Delay500ms();P2=0xFF;Delay500ms();}
}
实操三:独立按键的运用
1 独立按键原理图
- 独立按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
- 注意按键的顺序与L/O口顺序并不相同,第一个按键由P31控制
2 消抖
- 原因:当按键时,由于机械触电的弹性作用,一个开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开,所以开关闭合及断开会伴随一连串的抖动。
消抖一般操作:
if(P3_1==0){Delay(20); //消除下降沿抖动while(P3_1==0); Delay(20); //消除上升沿抖动P2_0=~P2_0;
3 独立按键控制LED灯状态
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int ms )
{unsigned char i, j;
while(ms){_nop_();i = 2;j = 199;do{while (--j);} while (--i);ms--;
}}void main()
{while(1){if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);P2_0=~P2_0;}}
}
实操四: 数码管的运用
1 数码管原理图
138译码器控制数码管
首先, 控制P22 P23 P24来控制数码管,然后选数码管的笔画,最终呈现数据。
2 消影
原因 :每次位选和段选之间几乎没有延迟,而且还没有对上次运行进行清零,就会导致运行时紊乱,出现重影。
一般解决方法:在每次显示后进行delay(时间不能太长,才能保证数码管的亮度),然后再P0=0x00.进行清零
P0=nixietable[num];delay(1);P0=0x00;
3 程序
#include <REGX52.H>
void delay(unsigned char ms) //@11.0592MHz
{while(ms--){unsigned char i, j;i = 2;j = 199;do{while (--j);} while (--i);}}
unsigned char nixietable[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void nixie(unsigned char loc,num)
{switch(loc){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=nixietable[num];delay(1); P0=0x00;
}
void main()
{
nixie(7,2);
while(1)
{}
}
4 数码管段码表(十六进制)
这篇关于AutoLeaders控制组—李佳旭 单片机学习笔记(LED灯 独立按键 数码管)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!