2024零基础入门(一)
1.1开发软件
- keilC51
- ISP
- protues
1.2新建工程
图 1 新建工程步骤
1.3认识LED原理图
图 2-1 原理图参考1图 2-2 原理图参考2
点灯原理:
- 结合原理图知,P1_0-P1_7输出低电平时,灯亮
74HC573 原理说明
74HC573是一款常用的八路三态输出透明D型锁存器集成电路芯片。它的核心功能是在特定时刻锁存并保持数据信号,简单来说,它像一个可以控制开合的数据闸门或一个临时数据仓库。
图 3 74HC573下表详细说明了其各个引脚的功能:
| 引脚名称 | 功能描述 |
|---|---|
| D0-D7 | 8位数据输入线。 |
| Q0-Q7 | 8位数据输出线。 |
| LE | 锁存使能端。当此引脚为高电平时,芯片处于“透明”模式,输出Q端直接跟随输入D端的变化;当从高电平跳变为低电平时,将输入数据锁存并保持。 |
| OE | 输出使能端,低电平有效。当为低电平时,允许数据从锁存器输出;当为高电平时,输出端为高阻态,相当于与外部电路断开连接。 |
| VCC | 电源正极(典型工作电压范围为2.0V~6.0V)。 |
| GND | 电源负极(地)。 |
74HC573 真值表
真值表清晰地展示了在不同控制信号组合下,芯片的输出行为。
| OE (输出使能) | LE (锁存使能) | D (数据输入) | Q (数据输出) |
|---|---|---|---|
| L (低电平) | H (高电平) | L (低电平) | L (低电平) |
| L (低电平) | H (高电平) | H (高电平) | H (高电平) |
| L (低电平) | L (低电平) | X (任意) | Q0 (保持锁存的数据) |
| H (高电平) | X (任意) | X (任意) | Z (高阻态) |
工作模式解读:
- 透明模式 (OE=L, LE=H):输出Q实时反映输入D的状态,数据直接通过。
- 锁存模式 (OE=L, LE=L):输出Q锁存并保持在LE引脚从高电平变为低电平前一瞬间所对应的输入D的值,之后无论D如何变化,Q都保持不变。
- 高阻态 (OE=H):输出端无效,呈高阻态,相当于与总线断开,不影响其他设备。
*** 注意:不同型号的单片机,由于其原理图不同,实现相同功能时,需要结合具体电路连接方式修改程序,而非直接复制。***
1.4编写程序
步骤:
1、右键点击User栏添加用户主程序(main.c)
2、右键引用51头文件
3、编写程序主体框架
4、按照原理图编写程序
图 4 程序结构图1点灯
注:本部分展示代码都在while(1)里
- 方法1:直接对P1整体配置电平
说明:可以直接在计算器中,打开程序员模式
图 5 计算器参考图1图 6 计算器参考图2
P1=0x5A; //0101 1010 (高位)亮灭亮灭 灭亮灭亮
- 方法2:对P1的每个引脚单独配置电平
P1_0=0;
P1_6=0;
流水灯
首先我们需要使用ISP生成延时函数,如图
图 7 使用ISP生成延时函数
- 延时函数生成:
-
打开STC-ISP烧录工具
-
打开软件延时计算器
-
系统频率选择12MHz 定时长度选择500毫秒 指令集选择STC-Y1
-
生成C代码,粘贴至工程文件中,并删除nop语句
修改代码,使得能通过参数调整延时的时间:
/*延时函数 ms*/
void Delayms(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
接下来开始写while(1):
- 方法1:每次对需要电量的灯配置低电平,给需要熄灭的灯配置高电平,再添加延时函数
Delayms(1000);
P1_3=0;
Delayms(1000);
P1_3=1;
- 方法2:每次对P1的8个引脚整体配置电平
P1=0x5A;
Delayms(1000);
P1=0xFF;
Delayms(1000);
-
方法3:使用内置库函数,达到移位操作
-
循环左移 (
_crol_) 将数据的二进制位整体向左移动指定的位数。-
关键特点:从最高位移出的位会循环补充到最低位。
-
示例:若变量
a的二进制为10100101,执行_crol_(a, 1)后,结果变为01001011。最左边的1移到了最右边。
-
-
循环右移 (
_cror_) 将数据的二进制位整体向右移动指定的位数。- 关键特点:从最低位移出的位会循环补充到最高位。
-
这与普通的移位运算符(
<<和>>)有本质区别:普通移位时,移出的位会丢失,空出的位补0,可能改变数据中1和0的数量。
-
-
核心库:intrins.h
intrins.h是C51单片机编程中一个非常重要的头文件,它提供了一系列与底层硬件操作密切相关的函数,这些函数能直接生成高效的汇编指令。- 作用:让C语言编写者能够像使用汇编语言一样,方便地进行位操作、短延时等。
- 包含函数:除了循环移位函数,还包括
_nop_()(空操作,用于精确短延时)和_testbit_()(测试并清零位)等。
注意:使用这些函数前,必须在程序开头包含该头文件:#include <intrins.h>。
ucLed = _crol_(ucLed,1); // 循环左移一位
P1 = ucLed; // 将新的LED状态输出到P1口
Delayms(500); // 延时500毫秒
1.5完整程序示例
- 示例1:
/* 头文件声明区域*/
#include <REGX52.H>
#include <intrins.h>
/*延时函数 ms*/
void Delayms(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
/*变量声明区域*/
unsigned char ucLed = 0xfe;
/* main*/
void main()
{
while(1)
{
ucLed = _crol_(ucLed,1);
P1=ucLed;
Delayms(500);
}
}//左括号,2个回车,右括号
- 示例2:
/*预处理区*/
#include <REGX52.H>
/*延时函数区*/
void Delayms(unsigned int xms)//@12.000MHz
{
while(xms--)
{
unsigned char data i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
/*变量声明*/
/*main*/
void main()
{
while(1)
{
P1=0xFE;
Delayms(500);
P1=0xFD;
Delayms(500);
P1=0xFB;
Delayms(500);
P1=0xF7;
Delayms(500);
P1=0xEF;
Delayms(500);
P1=0xDF;
Delayms(500);
P1=0xBF;
Delayms(500);
P1=0x7F;
Delayms(500);
}
}



