51单片机C语言入门教程详细解说
51单片机及C语言入门教程
51单片机及C语言入门教程
本教程将介绍51单片机及C语言的入门知识,帮助初学者快速掌握这两个方面的基本内容。以下是本教程的详细内容:
一、51单片机概述(200字)
51单片机是由Intel公司推出的一种常见的单片机芯片,具有广泛应用的特点。它采用了Harvard结构,具有8位数据总线和16位地址总线。其主要特点是结构简单、易于学习、应用广泛,适用于各种嵌入式系统。
二、C语言基础(300字)
C语言是一种高级编程语言,具有跨平台、可移植性强等特点,被广泛应用于各种软件开发和嵌入式系统中。学习C语言的基础知识是学习51单片机编程的必要前提。
C语言基础知识主要包括数据类型、变量、常量、运算符、表达式、流程控制语句等内容。这些知识是学习C语言和51单片机编程的基础,需要仔细理解和掌握。
三、51单片机编程入门(400字)
1. 搭建开发环境:首先需要安装51单片机的开发工具,如Keil
C51等。然后,连接单片机开发板和电脑,确保硬件连接正确。
2.了解开发板:学习使用51单片机的开发板是学习51单片机编程的第一步。具体包括开发板上各个接口的功能和使用方法。
3.编写第一个程序:根据教材或教程,编写第一个简单的程序,如让LED灯闪烁等。学习如何通过C语言编写程序,将其烧录到单片机中,并运行和调试。
四、C语言与51单片机的应用(300字)
在学习了C语言和51单片机的基础知识之后,可以进一步学习它们的应用。
1.输入输出操作:学习如何通过51单片机与外部设备进行输入输出操作,如控制LED灯的亮灭、读取按键输入等。
手把手教你学51单片机(C语言)
2. “或”运算
“或”运算是实现“只要其中之一有, 就有” 这种逻辑关系的一种运算, 其运算符为“+”。 “或”运算规则如下: 0+0=0, 0+1=1+0=1, 1+1=1
3. “非”运算
“非”运算是实现“求反”这种逻辑的一种运 算,如变量A的“非”运算记作 其运算规则如下: 。
格式:void main() 特点:无返回值,无参。 任何一个C程序有且仅有一个main函数,它是整 个程序开始执行的入口。 例:void main() { 总程序从这里开始执行; 其他语句; }
C语言中的基本数据类型
类型 符号 关键字 (signed) int (signed) short (signed) long 无 unsigned int unsigned short int unsigned long int float double char unsigned char 数的表示范围 所占位数 16 -32768~32767 16 -32768~32767 32 16 16 32 32 -2147483648~2147483647 0~65535
80C51的引脚封装
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST/VPD P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD XTAL2 XTAL1 VSS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VPP ALE/PROG PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 RST P3.0/RXD P3.1/TXD XTAL2 XTAL1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 GND 1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11 VCC P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1/AIN1 P1.0/AIN0 P3.7
51单片机汇编语言入门教程
51单片机汇编语言入门教程什么是51单片机
51单片机指的是英特尔公司推出的一种单片机芯片种类,其名字为“AT89S52”。后来,这种芯片因其使用广泛,被人们简称为“51单片机”。
为什么要研究汇编语言
研究汇编语言能够让我们更好地理解机器是如何执行指令的,
从而更好地优化程序,提高程序运行效率。
汇编语言基础知识
数据类型
- 字节:一个字节是8位二进制数,可以表示0~255之间的数。
- 字:一个字是16位二进制数,可以表示0~之间的数。
- 双字:一个双字是32位二进制数,可以表示0~之间的数。
指令集
51单片机有大约100条汇编指令,这些指令可以完成各种操作,如运算、数据传输、中断处理等。
寄存器
51单片机有4个8位的通用寄存器(寄存器0~3)和2个16
位的通用寄存器(DPTR和PC)。
程序结构
51单片机只有一种程序结构——线性结构。程序从0地址开始执行,一条一条地执行,直到程序结束。
编写第一个汇编程序
以下是一个简单的汇编程序示例:
ORG 0H ;设置程序起始地址为0H
MOV P1, #55H ;将55H赋值给P1口
END ;程序结束指令
这个程序的作用是将55H赋值给P1口。
总结
通过学习本教程,我们了解了基本的汇编语言知识,包括数据
类型、指令集、寄存器、程序结构以及编写程序的基本步骤。希望
这份教程可以帮助初学者顺利掌握51单片机汇编语言编程的基础。
C51单片机基础学习教程
C51单片机基础学习教程
C51单片机是一种常用的8位单片机,广泛应用于工业控制、家用电器和电子产品等领域。若想学习C51单片机,首先需要掌握C语言的基础知识。以下是一个C51单片机基础学习教程,介绍了C语言的相关内容,并给出了一个简单的例子。
一、C语言基础
1.数据类型:C语言中主要有整型、字符型、浮点型等数据类型。可以使用关键字来定义变量并赋值。
示例:int num = 10;
char ch = 'A';
float f = 3.14;
2.运算符:C语言中有算术运算符、逻辑运算符、关系运算符等。可以用于对变量进行运算和比较。
示例:int a = 10, b = 5;
int sum = a + b;
int result = (a > b) ? a : b;
3.控制语句:C语言中有顺序结构、分支结构和循环结构。可以用于控制程序的执行流程。
示例:
if (num > 0)
printf("The number is positive.");
} else if (num < 0)
printf("The number is negative.");
} else
printf("The number is zero.");
4.函数:C语言中可以使用函数将代码模块化,并且可以通过参数和返回值传递数据。
示例:int add(int a, int b)
return a + b;
二、C51单片机入门
2. 创建新项目:在Keil软件中创建一个新的项目,并选择C51单片机作为目标芯片。
3. 编写程序:在新建的项目中打开main.c文件,编写C语言程序。可以使用C语言的代码编写方式。
51单片机C语言入门教程
51单片机C语言入门教程
单片机是一种集成电路,可以完成各种功能。C语言是一种高级编程语言,可以用来编写单片机的程序。本文将介绍51单片机C语言的入门教程。
一、选择合适的开发环境
选择合适的开发环境是学习51单片机C语言的第一步。常用的开发环境有Keil C51、SDCC、IAR Embedded Workbench等。这些开发环境都提供了开发工具和编译器,方便编写和调试代码。
二、了解51单片机的基本结构
三、学习C语言的基本语法
学习C语言的基本语法是学习51单片机C语言的基础。C语言包括数据类型、变量、运算符、控制流语句等等。学习C语言的基本语法可以参考相关的C语言教程。
四、掌握51单片机的特殊功能寄存器
51单片机具有一些特殊功能寄存器,可以实现各种功能。例如,P0是一个I/O口,可以用来控制外部设备的输入和输出;TMOD和TCON分别是定时器/计数器的模式和控制寄存器,可以实现定时和计数功能。掌握这些特殊功能寄存器可以为后面的单片机编程做好准备。
五、编写第一个51单片机C语言程序
编写第一个51单片机C语言程序可以帮助巩固前面学习的知识。可以从简单的LED闪烁程序开始,逐步扩展到其他功能。编写程序的过程中要注意语法的正确性和逻辑的合理性。
六、调试程序
调试程序是保证程序正确运行的关键。可以使用仿真器或者调试器对
程序进行调试。调试程序可以查看程序的运行状态、变量的值等等,帮助
定位错误并进行修复。
七、深入学习更高级的C语言特性
一旦掌握了基本的51单片机C语言编程,可以深入学习更高级的C
语言特性。例如,函数的使用、数组的应用、结构体和指针等等。这些高
51单片机C语言编程入门(详讲版)
中国科学技术大学业余无线电协会编
目 录
§1 前言 (1)
§2 单片机简介 (2)
2.1 数字电路简介 (2)
2.2 MCS-51单片机简介 (2)
2.3 Easy 51 Kit Pro简介 (5)
2.4 Easy 51 Kit Pro电路功能分析 (5)
§3 MCS-51单片机的C语言编程 (8)
3.1 汇编语言 (8)
3.2 建立你的第一个C项目 (8)
3.3 生成hex文件 (12)
3.4 Keil C语言 (14)
3.5 单片机I/O (18)
3.6 中断 (25)
3.7 定时器/计数器 (27)
3.8 定时器的应用举例 (29)
3.9 外部中断 (34)
3.10 串行通信 (38)
3.11 定时器2 (43)
3.12 看门狗 (47)
3.13 空闲模式和掉电模式 (50)
§4 MCS-51单片机C语言编程应用进阶 (51)
4.1 扫描式键盘 (51)
4.2 EEPROM芯片AT93C46的读写 (55)
4.3 Keil C的高级使用 (63)
§5 编写高质量的单片机C程序 (64)
5.1 文件结构 (64)
5.2 程序的版式 (66)
5.3 单片机程序命名规则与变量选择 (70)
5.4 表达式和基本语句 (73)
5.5 函数设计 (77)
5.6 单片机程序框架 (79)
附图:Easy 51 Kit Pro电路图(最小系统板) (80)
附图:Easy 51 Kit Pro电路图(学习板) (81)
§1 前言
什么是单片机,目前还没有一个确切的定义。普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。简称为单片微机或单片机。利用单片机程序,可以实现对硬件系统的小型化的智能控制。由于单片机的硬件结构与指令系统都是按工业控制要求设计的,常用于工业的检测、控制装置中,因而也称为微控制器(Micro-Controller)或嵌入式控制器(Embedded-Controller)。
菜鸟学51单片机C语言
间要有适当的延时,时间过短或过长都会导致显示混乱。
2011. 02
73
制作入门
FOLLOW ME
40 延时子函数,是带参数的函数。子函数中是两
个嵌套的 for 语句,两个 for 语句是不同的。一个后面 有分号而另一个没有。第一个 for 语句后没有分号,编 译器默认第二个 for 语句是第一个 for 语句的内部语句,
功 能 寄 存 器 和 位 寄 存 器。 常 用 的 有 3 个,Reg51.
h、Reg52.h 和 Intrins.h。 头 文 件 有 两 种 表 示 方 法,
#include<reg51.h> 和 #include”reg51.h”一般用前者。
注意 :(1)编写程序时要将输入法切换成英文半
角状态。(2)每次编译前要先保存文件,避免编译时,
4 9 至
Sbit---- 声明某一个特殊功能寄存器的
某一位。与头文件中定义位的用法相同。自定义的地址 要与硬件连接相对应。例 sbit key1=P1^0,说明按键 1 连接的是单片机的 P1^0 口。8 和 9 定义数码管位锁存 器的使能控制端和数码管段锁存器的使能控制端。表明 单片机的 P1^5 口和 P1^6 口分别连接两个锁存器的使能
ห้องสมุดไป่ตู้
2011. 02
71
制作入门
FOLLOW ME
51单片机c语言开发详解
51单片机c语言开发详解
51单片机C语言开发详解:
一、51单片机特点
1、51单片机具有56种指令,有通用、特殊功能,支持多种模式。
2、51单片机有多种数据处理单元,可以自行编写程序,完成复杂控制。
3、51单片机使用时可以降低系统成本,如用少量的外设件就可实现全功能,故经
济性较好。
二、51单片机的存储器
1、核心存储器:
51单片机的核心存储器主要有ROM、EPROM、OTP等。其中ROM是只读存储器,可以重复使用,不易损坏,可用于编程存储;EPROM和OTP这两种是可以重写入的,但其不可以重复使用。
2、程序存储器:
51单片机的程序存储器是指依照指令进行存储的存储器,它可以利用指令执行指
定的程序或者指令。
3、数据存储器:
51单片机数据存储器是用来存储临时变量的存储器,如RAM、S-RAM、E-RAM 等。
三、51单片机开发常见工具
1、编程语言:
51单片机使用C语言、ASM语言来编程,可以通过相应的编译语言来进行编程。2、汇编工具:
汇编工具用于进行具体的编程,它可以将程序编程后输出为.hex文件,方便程序的处理和使用;
3、仿真工具:
仿真工具可以用于检验程序的功能,查看程序的运行情况,从而排除程序的错误,是保证程序得以发挥性能的重要工具。
四、51单片机开发步骤
1、硬件设计:
在硬件设计阶段,主要是根据系统功能进行硬件设计,确定硬件芯片的使用,及系统的外设连接;
2、软件设计:
软件设计过程就是根据硬件阶段决定的内例设计的,通过C语言、ASM语言来进行程序的设计;
3、程序烧写:
在程序烧写阶段,首先将程序用汇编软件编译后,将其转换为.hex文件,可以用对应的烧写软件将其转换到单片机中;
51单片机及C语言入门教程
51单片机及C语言入门教程
一、了解51单片机
1.硬件介绍
2.体系结构
3.编程语言
二、掌握C语言基础
C语言是一种结构化的高级编程语言,易于学习和应用。以下是C语言的基础知识。
1.数据类型
C语言支持多种数据类型,包括整型、浮点型、字符型等。根据需要选择合适的数据类型进行变量的声明和使用。
2.运算符
C语言提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。熟悉并正确使用这些运算符是进行编程的关键。
3.控制语句
控制语句是C语言中用于控制程序流程的重要语法结构。常见的控制语句有条件语句(if-else)、循环语句(for、while、do-while)等。
4.函数
函数是C语言中的基本代码单位,可以实现代码的模块化和复用。编写函数时,需要明确函数的返回类型、参数列表和函数体。
三、开发环境搭建
在进行51单片机和C语言的开发之前,需要准备好相应的开发工具和环境。
1.集成开发环境(IDE)
2.单片机编程器
3.相关资料
在学习和开发过程中,需要查阅相关的资料和教程。可以通过互联网相关的电子书籍、论坛和博客等。
四、编写第一个程序
在搭建好开发环境之后,可以编写并运行第一个C语言程序。
1.创建工程
使用IDE创建一个新的工程,并选择适合的目标单片机型号。
2.编写代码
在IDE中,创建一个新的C语言源文件,并编写代码。例如,可以编写一个led闪烁的程序。
```
#include<reg51.h>
void main
P1=0x00;//设置P1口为输出
while(1)
P1 = 0xff; // P1口所有引脚输出高电平
51单片机C语言编程入门(详讲版)
中国科学技术大学业余无线电协会编
目 录
§1 前言 (1)
§2 单片机简介 (2)
2.1 数字电路简介 (2)
2.2 MCS-51单片机简介 (2)
2.3 Easy 51 Kit Pro简介 (5)
2.4 Easy 51 Kit Pro电路功能分析 (5)
§3 MCS-51单片机的C语言编程 (8)
3.1 汇编语言 (8)
3.2 建立你的第一个C项目 (8)
3.3 生成hex文件 (12)
3.4 Keil C语言 (14)
3.5 单片机I/O (18)
3.6 中断 (25)
3.7 定时器/计数器 (27)
3.8 定时器的应用举例 (29)
3.9 外部中断 (34)
3.10 串行通信 (38)
3.11 定时器2 (43)
3.12 看门狗 (47)
3.13 空闲模式和掉电模式 (50)
§4 MCS-51单片机C语言编程应用进阶 (51)
4.1 扫描式键盘 (51)
4.2 EEPROM芯片AT93C46的读写 (55)
4.3 Keil C的高级使用 (63)
§5 编写高质量的单片机C程序 (64)
5.1 文件结构 (64)
5.2 程序的版式 (66)
5.3 单片机程序命名规则与变量选择 (70)
5.4 表达式和基本语句 (73)
5.5 函数设计 (77)
5.6 单片机程序框架 (79)
附图:Easy 51 Kit Pro电路图(最小系统板) (80)
附图:Easy 51 Kit Pro电路图(学习板) (81)
§1 前言
什么是单片机,目前还没有一个确切的定义。普通认为单片机是将CPU、RAM、ROM、定时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。简称为单片微机或单片机。利用单片机程序,可以实现对硬件系统的小型化的智能控制。由于单片机的硬件结构与指令系统都是按工业控制要求设计的,常用于工业的检测、控制装置中,因而也称为微控制器(Micro-Controller)或嵌入式控制器(Embedded-Controller)。
MCS51单片机C语言
– MOV direct,#data ;(direct)←data
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.2.1 数据传送和交换类指令
– 〔4〕以存放器间接地址为目的的传送指令:
– MOV @Ri,A
;((Ri))←(A)
– MOV @Ri,direct ;((Ri))←(direct)
• ORG 0000H • MOV R0,#40H ;R0←40H • MOV 40H,#10 ;(40H)←10 • MOV @R0,#00H ;((R0))←00H • END • 解:(R0)=40H,(40H)=00H
第2章 MCS-51系列单片机的指令统及汇编语言程序设计
2.2.1 数据传送和交换类指令
2.1.2 MCS-51单片机寻址方式
– 位寻址方式的寻址范围包括以下两种情况: – 〔1〕内部RAM中的位寻址区。单元地址为
20H~2FH,共16个单元,128个位,位地址 为00H~7FH。 – 〔2〕特殊功能存放器中的可寻址位。可供位 寻址的特殊功能存放器有11个,共有88个位, 其中5位没有定义,所以有可寻址位83位。
给
SCON,即
SCON←00H
– 操作数直接在指令中给出,它是指令代码一局 部,是存放在程序存储器内的一个常数,这种 寻址方式就称为立即寻址。
– 注意:立即数的前面必有“#〞标志。
C51单片机基础学习教程(C语言)
作,晶振信号经 12 分频后形成机器周期。 当单片机的时钟系统工作正常的时候,在 ALE 引脚可以观察到稳定的脉冲
信号,其频率为:晶振频率/6。
机器周期TCY
S1 S2 S3 S4 S5 S6
振荡器
分 P1 频 80C51 器 P2
晶振周期
S状态
图 1.13 单片机工作的基本时序图 机器周期和指令周期
3
读锁存器
地址
控制 C
VCC
R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X引脚
读引脚
图 1.8 P2 口作为数据总线图 1.4 P1 口的内部结构
P1 口是 80C51 的唯一的单功能口,仅能用作数据输入输出口,它由一个输出 锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。同 P2 口相同, 内部设有上拉电阻(约 30KΩ)。
读锁存器
VCC
R
内部总线 写锁存器
D
Q
CL
P1.X 锁存器
_ Q
P1.X引脚 T
读引脚
图 1.9 P1 口的内部结构图 1.5 P3 口的内部结构
读锁存器
第二输出_功__能W___ (TXD、WR、RD)
VCC
R
内部总线 写锁存器
手把手教你学51单片机(C语言版)
11.6 通信实例与 ASCII码
11 UART串口通 信
11.7 练习题
11.5.1 通信的三种基本类 型
11.5.3 UART串口程序
11 UART串口通信
11.5 UART串口通信的基本应用
11.5.2 UART模块介绍
13
Part One
12 指针基础与1602液晶的初步认识
12 指针基础与1602液晶的初步认识
14.3 E2PR OM的 学习
14.3.1 E2PROM单字 节读写操作时序
14.3.2 E2PROM多字 节读写操作时序
14.3.3 E2PROM的页
写入
14.4 I2C和 E2PRO M的综合 实验学习
14.5 练习
题
16
Part One
15 实时时钟DS1302
15 实时时钟DS1302
A
6.5.2 定时器中断 的应用
B
6.5.3 中断的优先 级
C
6 中断与数码管动态显示
6.5 单片机中断系统
08
Part One
7 变量进阶与点阵LED
7 变量进阶与点阵LED
7.1 变 量的作
用域
7.1.1 局部变 量
7.1.2 全局变 量
7.2 变 量的存 储类别
7.3 点 阵的初 步认识
51单片机c语言模块化编程的步骤和方法
51单片机c语言模块化编程的步骤和方法
模块化编程是一种编程方法,它将程序划分为独立的、可重用的模块,每个模块执行特定的功能。对于51单片机来说,C语言是常用的编程语言。下
面是一般的步骤和方法,以实现C语言的模块化编程:
1. 明确需求和功能模块:首先,你需要明确你的程序需要完成哪些功能。将这些功能划分为独立的模块,每个模块执行一个特定的任务。
2. 创建模块:为每个功能模块创建一个C文件。例如,如果你有一个控制LED的模块,你可以创建一个名为``的文件。
3. 编写模块函数:在每个模块的C文件中,编写实现该模块功能的函数。
这些函数应该是模块的一部分,并且应该是模块化的。
4. 编写头文件:为每个模块创建一个头文件。头文件应该包含该模块的函数声明和任何公共变量。例如,``可能包含控制LED的函数的声明。
5. 主程序调用模块函数:在主程序中,你需要包含适当的头文件,并调用需要的模块函数。主程序应该将所有模块组合在一起,以实现所需的功能。
6. 编译和链接:使用适当的编译器将所有C文件编译为目标文件。然后,
使用链接器将这些目标文件链接在一起,生成最终的可执行文件。
7. 测试和调试:在目标硬件上测试和调试程序。确保每个模块都按预期工作,并且所有模块都能协同工作。
这只是一个基本的步骤和方法。具体的实现可能会根据硬件、需求和其他因素有所不同。不过,基本的模块化编程原则应该是相同的。
C语言的51单片机基础学习教程
4
P3.1: TXD 串行口输出 P3.2: INT0 外部 中断 0 输入 P3.3: INT1 外部 中断 1 输入 P3.4 T0 定时器 0 外部 输入 P3.5: T1 定时器 1 外部 输入 P3.6: WR 外部写 控制 P3.7: RD 外部读 控制 1.6 单片机 最小系统
读引脚
图 1.7 P2 口作为地址 总线图 在系统扩展 片外 程序 存 储器扩展 数据存 储器且 容量超 过 256B时,CPU发出控 制电 平“ 1”,使多 路开关 MUX倒 内部 地址线。
3
读锁存器
地址
控制 C
VCC
R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X 引脚
读引脚
图 1.8 P2 口作为数据 总线图 1.4 P1 口的 内部 结构
P1 口 是 80C51的唯一的单 功能 口,仅能 用作数据输入输出口, 它由一个输出 锁存器、两个三态输入缓冲器和输出驱动电路组成 ---- 准双向 口。同 P2 口相同 , 内部设 有 上拉 电 阻( 约 30KΩ)。
VCC
(1) 振荡周期 : 也称时钟周期 , 是指 为单片机 提供 时 钟脉冲信号 的振荡源 的 周期 .
(2) 状态周期 : 每个 状态周期 为时 钟周期 的 2 倍, 是振荡周期 经二分频后 得 到的。
(2024年)51单片机C语言学习教程
对每个模块进行独立测试确保功能正确后再 进行模块集成和整体测试。
2024/3/26
22
05
外部设备接口与通信协议实现
Chapter
2024/3/26
23
串行通信接口UART/USART原理及编程实现
UART/USART基本原理
介绍串行通信的基本概念,UART/USART的通信原理,包括数据格式、波特率设置等。
51单片机UART/USART硬件资源
讲解51单片机中UART/USART相关的硬件资源,如串行通信控制器、引脚功能等。
2024/3/26
编程实现UART/USART通信
提供UART/USART通信的C语言编程示例,包括初始化串行通信、发送和接收数据等。
24
I2C总线接口原理及编程实现
01
I2C总线基本原理
项目背景
介绍红外遥控技术在各个领域的 应用及其接收解码器的设计要点
。
调试与优化
讲解红外遥控接收器的选型、接 口电路设计以及与单片机的连接
方式。
2024/3/26
硬件设计
阐述如何使用C语言编写红外遥 控接收解码程序,包括红外信号 的接收、解码、识别和响应等。
软件编程
分享项目调试过程中遇到的问题 及解决方案,以及如何优化程序 以提高红外遥控的灵敏度和可靠 性。
Chapter
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(三)
上面我们讲了如何使 LED 产生流动,但是你是否发现一个问题:写的太冗长了!能不能 再简单点呢?可以!可以使用 C51 的内部函数 INTRINS.H 实现。函数 unsigned char _crol_(unsigned char a, unsigned char n) 可以使变量 a 循环左移 n 位,如果我们先给 P1 口赋 0000 0001 那么当 n 为 1 时,便会产生和上面一样的效果! #include<intrins.h> #include<reg51.h>
{ while(1) { P1_0 = 0;
Delay(250); P1_0 = 1;
P1_1 = 0; Delay(250);
P1_1 = 1;
P1_2 = 0; Delay(250);
P1_2 = 1;
P1_3 = 0; Delay(250);
P1_3 = 1;
P1_4 = 0; Delay(250);
creating hex file from "XXX"... "XXX" - 0 Error(s), 0 Waring(s). 表示编译和生成 HEX 文件成功!接下来的就是把 HEX 文件烧到单片机中,或是仿真器上, 看是否达到预先的目的! 嘿嘿!现在是否自己好有成就感了,如果让你去做个流水彩灯,开发一个简单的产品,只要 加上驱动电路,就可以做出漂亮的流动彩灯 了!到现在为止,你应该知道单片机的功能有多强大了吧,如果单纯的用数字电路或模拟电 路的知识去设计一个流动彩灯,可能要花点工夫 和时间才行,有了单片机,那就不一样了,你只要写程序控制他就行!有人说过这样一句话, 也并不无道理的,学单片机,程序思想很重要!
void Delay(unsigned char a)
{
unsigned char i;
Baidu Nhomakorabea
while( --a != 0)
{
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU 空转。
}
//i 从 0 加到 125,CPU 大概就耗时 1 毫秒
}
void main(void)
对了,讲了那么多,有些朋友一定还不知道编译软件怎么用?这里给大家介绍几个吧? WAVE(伟福)大家一定听说过吧!还有一个 就是 KEIL2,我用的就是 KEIL2,下面就来讲讲如何使用 KEIL2 这个编译软件! 1.安装软件,这个应该不用再讲了吧! 2.安装完后,启动 KEIL 软件左击 Project-->New Project-->输入文件名-->选择我们所以使用
//在 Keil 安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把 LED 反过来接那么就是高电平有效 } }
就那么简单,我们就把接在单片机 P1_0 上的 LED 点亮了,当然 LED 是低电平,才能点 亮。因为我们把 LED 的正通过电阻接至 VCC。
首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书, 而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这 之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你 可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我 全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当 时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应 该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。
第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆 拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的 PC 上完成,但是软件毕竟是软件,从某 个特定的意义上来说是并不能代替硬件的),即使
你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料, 一定会对以下几个词见的比较多,但是具体的概 念还是比较模糊,现作如下说明: (1)编程器 编程器是用来烧单片机芯片的,是把 HEX 或者 BIN 文件烧到单片机 ROM 里 的,供单片机运行的。 (2)实验板 实验板是专为初学者根据某些要求而特做的板,一般上面就有一个单片机的最 小系统,使用者只需写好程序,烧好芯片,放 到上面加以验证的这么一个工具。有了实验板,对与初学者来说,省去了焊个最小系统的麻 烦。但是对于电子开发人员来说,作用并不是很大 (3)仿真器 仿真器是直接把 HEX 或者 BIN 文件暂时放在一个芯片里,再通过这个芯片的 引脚连接到实验板或者系统上工作。这样以来,可 以省去了来回插拔芯片带来的不必要麻烦。
单片机 c 语言入门
相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说 他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的 微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、 实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现 在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是 把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽 量少走些弯路而已!
我们在单片机最小系统上接个 LED,看我们能否点亮它!对了,上面也有好几次提到过单片 机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST 即可, 一般情况下,AT89C51 的 31 脚须接高电平。
#include<reg51.h> //头文件定义。或用#include<at89x51.h>其具体的区别在于:后者定义 了更多的地址空间。
我一开始也不知道上面 3 个的概念和作用,嘿嘿,原本想买个实验板(不想焊板,因为不可能 为了点亮几个流水灯,而去焊个单片机的最小系统) 的,可是结果,确和我想的正好相反,人家出售的是编程器。等货物寄到后,才知道自己搞错了! 汗。。。嘿嘿。现在想想实在是又气又笑。我花 了 160 大样买了个编程器(很不幸的是,这个编程器更本用不了,一烧芯片,芯片就烧坏了) 把我给气的,这个编程器,现在还躺在我的抽屉里 呢不过,现在想想,唯一让我觉得欣慰的是,那个老板每次能解答我的问题,连那种超级幼 稚的问题,他也能不嫌麻烦地尽量帮我解答!这点让 我很感动!
sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7;
P1_4 = 1;
P1_5 = 0; Delay(250);
P1_5 = 1;
P1_6 = 0; Delay(250);
P1_6 = 1;
P1_7 = 0; Delay(250); P1_7 = 1; } }
sbit 定义位变量,unsigned char a 定义无符字符型变量 a,以节省单片机内部资源,其有 效值为 0~255。main 函数调用 Delay()函数。 Delay 函数使单片机空转,LED 持续点亮后,再灭,下一个 LED 亮。while(1)产生循环。
当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为 单片机编写程序呢?这个问题,困扰了我好久。具 体选择 C51 还是 A51 呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容 易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学 C51,毕竟 C51 和我们课上讲的 C 语言,有些类似, 编程的思想可以说是相通的。而且 C51 还有更大的优点就是编写大程序时的优越性更不言 而喻,当然在那时,我并没有想的那么深远,C51 的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了 C51,那么请继续往下看, 如果你选择了 A51,那么你可以不要看了!因为下面讲 的全是 C 方面的,完全在浪费你的时间! 呵呵 ^_^
第三,想学单片机的必需品--PC。因为写程序,编译或者是仿真都是通过 PC 完成的。 如果没有 PC,什么也做不了!!!有了 PC 最好还要可 以上网,因为如果你没有可以和你交流单片机的人,遇到自己解决不了的问题,一直都想不 通,那么估计你学习单片机的热情就会随着时间的 推移而慢慢耗尽。如果你能上网通过论坛或者 QQ 群,问题就很快得到解决。这样的学习效 率一定很高!真正的高手是从论坛中泡出来的!
有了上述 3 个条件后,你就可以开始学你的单片机了。但是,真的做起来并没有我所说 的那么简单。你一定会遇到很多很多的问题。比如 为了让单片机实现某个功能,你可能不知道怎么去写某个程序。或是你看懂了资料上某个相 似的程序,你自己却写不出来。遇到类似的情况, 记住:千万不要急噪,就行!
(二)
说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上 面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个 LED(搞电子的应该知道 LED 是什么 吧^_^)
的芯片(这里我们一般用到 Atmel 的 AT89C51 或 AT89C2051,点确定。 3.点 File-->New-->输入我们编写的程序,保存为.C 文件。(一般情况下,我们保存的文件名 和前面的工程名一样。)
4.展开 Target 1 -->右击 Source Group 1 -->Add Files to Group 'Source Group 1'-->选择刚才保存 的.C 文件点击 ADD 后,关闭对 话框。这样.C 文件就被加到了 Source Group 1 下。 5.右击 Target 1-->Options for 'Target 1' -->Target 中填写晶体的大小,Output 中,在 Create HEX Files 前打上钩,点确 定。 6.点 Project-->Rebuild All Traget Files ,若提示
P1 = _crol_(b, 1); b = P1;
Delay(250); } } }
INTRINS.H 函数中的 unsigned char _cror_(unsigned char a, unsigned char n)右移也可以实 现同样的效果!这里就不再累述。
流水灯的花样很多,我还写过那种拉幕式的流动等,程序很简单,有兴趣的朋友,可以 自己试着写写!
P1_0 = 0; 类似与 C 语言中的赋值语句,即把 0 赋给单片机的 P1_0 引脚,让它输出相应 的电平。那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其 他的 LED,也类似上述语句。这里就不再讲了。
点亮了几个 LED 后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可 以让几个 LED 依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个 LED 灭后,另一个立即亮,依次轮流下去。 假设我们有 8 个 LED 分别接在 P1 口的 8 个引脚上。硬件连接,在 P1_1--P1_7 上再接 7 个 LED 即可。例程如下: #include<reg51.h>
void Delay(unsigned char a) { unsigned char i; while( --a != 0) { for(i = 0; i < 125; i++); } }
void main(void) { unsigned char b, i; while(1) { b = 0xfe; for(i = 0; i < 8; i++) {