(1小时学会C语言51单片机)C语言入门教程

合集下载

c51单片机c语言教程

c51单片机c语言教程

51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。

在众多单片机中51 架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。

51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。

对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。

综合以上 C 语言的优点,我在学习时选择了 C 语言。

以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。

*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。

明浩2003-3-30mailto:pnzwzw@ wzw@第一课建立您的第一个C项目使用C 语言肯定要使用到C 编译器,以便把写好的C 程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51 软件,要使用KEIL51 软件,必需先要安装它。

KEIL51 是一个商业的软件,对于我们这些普通爱好者可以到KEIL 中国代理周立功公司的网站上下载一份能编译2K 的DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。

51单片机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)。

简称为单片微机或单片机。

利用单片机程序,可以实现对硬件系统的小型化的智能控制。

手把手教你学51单片机(C语言)

手把手教你学51单片机(C语言)




C-51的数据类型扩充定义
sfr:特殊功能寄存器声明 sfr16:sfr的16位数据声明 sbit:特殊功能位声明 bit:位变量声明 例:sfr SCON = 0X98; sfr16 T2 = 0xCC; sbit OV = PSW^2;

C-51的包含的头文件
通常有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h reg52.h (定义特殊功能寄存器和位寄存器); math.h (定义常用数学运算);
总线(BUS)是计算机各部件之间传送信息 的公共通道。微机中有内部总线和外部总 线两类。内部总线是CPU内部之间的连线。 外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DB(Data Bus), 地址总线 AB(Address Bus)和 控制总线 CBControl Bus)。
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单片机C语言入门教程

51单片机C语言入门教程

51单片机C语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。

在众多单片机中51架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。

51的编程语言常用的有二种,一种是汇编语言,一种是C语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。

对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。

综合以上C语言的优点,我在学习时选择了C语言。

以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。

*注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。

明浩2003-3-30pnzwzw@第一课建立您的第一个C项目使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。

KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。

51单片机编程开发之c语言基础

51单片机编程开发之c语言基础

51单片机编程开发之c语言基础51单片机是一种非常常用的单片机,而C语言是51单片机编程的基础。

本文将从C语言基础的角度,介绍如何在51单片机上进行编程开发。

我们需要了解C语言的基本语法和数据类型。

C语言是一种结构化的、高级的编程语言,它不仅可以进行底层的操作,还具备高级语言的特性。

在C语言中,我们可以使用各种数据类型来存储和处理数据,例如整型、浮点型、字符型等。

同时,C语言还提供了丰富的运算符和控制语句,使得程序的编写更加灵活和高效。

在51单片机上进行C语言编程,我们需要使用相关的开发工具和编译器。

目前,市面上有很多种开发工具可供选择,例如Keil、IAR 等。

这些开发工具可以帮助我们创建、编辑和编译C语言程序,并将其下载到51单片机上运行。

在开始编写程序之前,我们需要对51单片机的硬件结构有一定的了解。

51单片机由CPU、存储器、外设等组成。

我们可以通过C语言编写程序来控制这些硬件,实现各种功能。

例如,我们可以通过C 语言控制LED灯的亮灭、读取按键的状态、驱动液晶屏显示等。

在编写程序时,我们需要熟悉51单片机的寄存器和外设的相关操作。

51单片机的寄存器用于控制和配置各种硬件,我们可以通过C语言对寄存器进行读写操作,来实现对硬件的控制。

同时,51单片机还提供了丰富的外设接口,例如串口、定时器、ADC等,我们可以通过C语言编写程序来实现对这些外设的配置和操作。

在编写程序时,我们需要使用51单片机的特定的编程语法和函数库。

51单片机的编程语法与标准C语言有一些差异,我们需要了解这些差异并进行相应的调整。

同时,51单片机还提供了一些特定的函数库,例如LCD显示库、PWM波形库等,我们可以使用这些函数库来简化编程的过程。

在编写程序时,我们需要注意一些常见的问题和技巧。

例如,51单片机是一种8位的单片机,其存储器空间有限,我们需要合理利用存储空间,避免浪费。

同时,由于51单片机的时钟频率有限,我们需要注意程序的效率,避免出现性能瓶颈。

手把手教你学51单片机(C语言版)

手把手教你学51单片机(C语言版)
12.3 字符数组和字 符指针

12.3.1 常量和符 号常量
A
12.3.2 字符和字 符串数组实例
B
12 指针基础与1602液晶的初步认识
1
12.4.1 1602液晶的硬件接口 介绍
2
12.4.2 1602液晶的读写时序 介绍
3
12.4.3 1602液晶的指令介绍
4
12.4.4 1602液晶简单实例
01
8.1.1 电 源
02
8.1.2 晶 振
03
8.1.3 复 位电路
8.1 单片机最小系统
0 1
8.4.1 独立按

0 2
8.4.2 矩阵按

0 3
8.4.3 独立按
键的扫描
0 4
8.4.4 按键消

0 5
8.4.5 矩阵按
键的扫描
8 函数进阶与按键
8.4 按键
10
Part One
9 步进电机与蜂鸣器
11.3 USB转串口 通信
11.4 IO口模拟 UART串口通信
11.5 UART串口 通信的基本应用
11.6 通信实例与 ASCII码
11 UART串口通 信
11.7 练习题
11.5.1 通信的三种基本类 型
11.5.3 UART串口程序
11 UART串口通信
11.5 UART串口通信的基本应用
10.1.3 字节操作修改位的 技巧
10.1.5 秒表程序
10 实例练习与经验积累
10.1 数字秒表实例
10.1.2 定时时间精准性调 整
10.1.4 数码管扫描函数算 法改进
12
Part One

51单片机C语言教程

51单片机C语言教程

手把手教你学51单片机C语言教程(C语言基础)电平特性数字电路中只有两种电平:高和低(本学习笔记中)定义单片机为TTL电平:高+5V 低 0VRS232电平:计算机的串口电平:高 -12V 低+12V所以计算机与单片机之间通讯时需要加电平转换芯片max232。

二进制只有2个数字 0 同1 数字电路中也用1 表标高电平用0表示底电平。

十六进制二进制的简短表示形式,十进制中的0-15用十六进制表示为0、1、2、3、4、5、6、7、8、9、A、B、C、D 、E、F各种进位制的对应关系二进制数的逻辑运算“与”运算类似于数值“X”运算0·0=0 0·1=1·0=0 1·1=1“或”运算“或”运算是实现“只要其中之一有,就有”这种逻辑关系的一种运算, 其运算符为“+”。

“或”运算规则如下:0+0=0, 0+1=1+0=1, 1+1=1C-51的程序结构与一般C语言的结构相同,以main()函数为程序人口,程序体中包含若干语句还可以包含若干函数。

C-51函数的一般格式类型函数名(参数表){数据说明部分语句执行部分}C-51的数据类型基本数据类型C语言中的基本数据类型C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明例:sfr SCON = 0X98;sfr16 T2 = 0xCC;sbit OV = PSW^2;C-51数据的存储类型C-51数据的存储类型(续)例:数据类型存储类型变量char data var1;bit data flags;unsigned char xdata vextor[10];C-51的包含的头文件通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h (定义特殊功能寄存器和位寄存器);math.h (定义常用数学运算);C-51的运算符与C语言基本相同:+ - * / (加减乘除)> >= < <= (大于大于等于小于小于等于)== != (测试等于测试不等于)&& || ! (逻辑与逻辑或逻辑非)>> << (位右移位左移)& | (按位与按位或)^ ~ (按位异或按位取反)位右移位左移按位与按位或C-51的基本语句与标准C语言基本相同:if 选择语言switch/case 多分支选择语言while 循环语言do-while 循环语言for 循环语言版权声明:(部分资料图片来源网络)。

单片机C语言入门教程

单片机C语言入门教程

单片机C语言入门教程一、简介在现代电子技术领域中,单片机是一种关键的组成部分。

而C语言是一种强大的编程语言,被广泛应用于单片机开发中。

本教程旨在帮助读者快速入门单片机C语言编程。

二、C语言概述C语言是一种面向过程的编程语言,它结合了高级语言和汇编语言的特点。

C语言具有简洁、灵活和可移植的特点,非常适合单片机开发。

三、环境搭建在进行单片机C语言编程之前,我们需要搭建开发环境。

首先,我们需要选择一款合适的集成开发环境(IDE),例如Keil、IAR等。

然后,安装相应的编译器和调试工具。

最后,连接硬件设备并配置相应的开发板。

四、C语言基础1. 变量和数据类型:在C语言中,我们需要先声明变量并指定数据类型,然后才能进行相应的操作。

C语言中常用的数据类型包括整型、浮点型、字符型等。

2. 运算符和表达式:C语言支持多种运算符,包括算术运算符、赋值运算符、比较运算符等。

通过运算符和表达式的组合,我们可以实现各种复杂的逻辑操作。

3. 控制语句:控制语句用于控制程序的流程,常见的控制语句包括条件语句、循环语句和跳转语句。

通过合理使用这些语句,我们可以实现程序的灵活控制。

五、单片机编程基础1. 引脚配置:在进行单片机开发时,我们需要配置相应的引脚功能,包括输入、输出、中断等。

通过合理配置引脚,我们可以与外部设备进行交互。

2. 中断编程:中断是一种常用的单片机编程技术,它可以在特定的事件发生时,立即中断当前程序的执行,转而去处理中断服务程序。

通过合理使用中断,我们可以实现实时响应和处理外部事件。

3. 定时器编程:定时器是单片机中重要的计时功能模块,它可以用来生成精确的时间延时、产生周期性的定时事件等。

通过合理利用定时器,我们可以实现各种时间相关的功能。

六、案例实践在学习了C语言的基础知识和单片机编程技巧后,我们可以通过一些实践案例来加深对知识的理解和应用。

例如,通过控制LED灯的亮度或者控制舵机的角度等实践,来巩固所学内容。

经典的51C语言快速入门

经典的51C语言快速入门
以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它。KEIL51 是一个 商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份 能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。(安装的方 法和普通软件相当这里就不做介绍了)
图 1-2 New Project 菜单
图 1-3 文件窗口 (2)选择所要的单片机,这里我们选择常用的 Ateml 公司的 AT89C51。此时屏幕如图 1-4 所示。AT89C51 有什么功能、特点呢?不用急,看图中右边有简单的介绍,稍后的章 节会作较详细的介绍。完成上面步骤后,我们就可以进行程序的编写了。 (3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程 序,那么就要新建一个程序文件。在 KEIL 中有一些程序的 Demo,在这里我们还是以一个 C 程序为例介绍如何新建一个 C 程序和如何加到您的第一个项目中吧。点击图 1-5 中 1 的 新建文件的快捷按钮,在 2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单 File
图 2-1 中是 AT89C51 和 AT89C2051 的引脚功能图。而表 2-1 中则是它们的主要性能表。 以上可以看出它们是大体相同的,由于 AT89C2051 的 IO 线很少,导致它无法外加 RAM 和程 序 ROM,片内 Flash 存储器也少,但它的体积比 AT89C51 小很多,以后大家可根据实际需要 来选用。它们各有其特点但其核心是一样的,下面就来看看 AT89C51 的引脚具体功能。
1.电源引脚 Vcc 40 电源端 GND 20 接地端 *工作电压为 5V,另有 AT89LV51 工作电压则是 2.7-6V, 引脚功能一样。

51单片机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)。

简称为单片微机或单片机。

利用单片机程序,可以实现对硬件系统的小型化的智能控制。

51单片机C语言入门教程

51单片机C语言入门教程

51 单片机C 语言入门教程使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和 C 语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发 51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它。

KEIL51 是一个商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。

(安装的方法和普通大型软件相当这里就不做介绍了)。

(1)点击Project 菜单,选择弹出的下拉式菜单中的New Project,如图接着弹出一个标准Windows 文件对话窗口,如图这个东东想必大家是见了N 次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。

在“文件名”中输入您的第一个C 程序项目名称,这里我们用“test”,这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows 文件规则的文件名都行。

“保存”后的文件扩展名为uv2,这是KEIL uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。

( 2)选择所要的单片机,这里我们选择常用的 Ateml 公司的 AT89C51。

此时屏幕( 3)首先我们要在项目中创建新的程序文件或加入旧程序文件。

如果您没有现成的程序,那么就要新建一个程序文件。

在 KEIL 中有一些程序的 Demo,在这里我们还是以一个C 程序为例介绍如何新建一个 C 程序和如何加到您的第一个项目中吧。

手把手教你学51单片机(C语言版)

手把手教你学51单片机(C语言版)
10.1 数字秒表实例
10.1.2 定时时间精准性调 整
10.1.4 数码管扫描函数算 法改进
12
Part One
11 UART串口通信
11 UART串口通信
11.1 串行通信的 初步认识
11.2 RS-232通 信接口
11.3 USB转串口 通信
11.4 IO口模拟 UART串口通信
11.5 UART串口 通信的基本应用
A
C
E
13.2 1602整屏 移动
13.4 计算器实 例
13.6 练习题
13.1 通信时序 解析
13.3 多.c文件 的初步认识
B
13.5 串口通信机制 和实用的串口例程
D
F
15
Part One
14 I^2C总线与E^2PROM
14 I^2C总线与E^2PROM
14.1 I2C时 序初步 认识
14.2 I2C寻 址模式
18 RS-485通信与Modbus协议
01
18.1 RS485通信
02
18.2 Modbus 通信协议介绍
18.2.1 Modbus协议 特点 18.2.2 RTU协议帧数 据
03
18.3 Modbus 多机通信例程
04
18.4 练习题
20
Part One
19 实践项目开发——多功能电子钟
19 实践项目开发——多功能电子钟
1.6 答读者问
03
Part One
2 点亮你的LED
2 点亮你的LED
2.1 单片机的 内部资源
2.2 单片机最 小系统
2.3 LED小灯
2.6 练习题
2.5 程序下载

从零开始入门学习51单片机教程

从零开始入门学习51单片机教程

从零开始入门学习51单片机教程51单片机是一种经典的通用型单片机,广泛应用于嵌入式系统开发中。

入门学习51单片机需要从基础知识开始,逐步深入学习各种功能和应用。

本篇文章将从以下几个方面介绍如何从零开始入门学习51单片机。

一、基础知识1.了解单片机的概念和基本原理,包括什么是单片机、单片机的工作原理以及单片机的分类等。

2.学习基本的电子元器件的知识,如电阻、电容、二极管、晶体等。

二、软硬件环境搭建1.了解51单片机的硬件开发环境,如开发板、仿真器、编程器等。

2. 学习搭建51单片机开发环境,包括安装Keil C语言开发环境和Proteus仿真软件。

三、C语言基础1.学习C语言的基本语法和程序设计思想,包括变量、数据类型、运算符、控制语句、函数等。

2.掌握C语言的常用库函数,如输入输出函数、字符串处理函数、数学函数等。

四、51单片机编程基础1.学习51单片机的内部结构和寄存器的使用,了解各个寄存器的功能和地址。

2.学习如何编写简单的51单片机程序,包括LED点亮、按键输入、数码管显示等。

五、扩展功能学习1.学习使用外部中断、定时器、串口通信等扩展功能,掌握其使用方法和应用场景。

2.学习使用各种外设模块,如LCD液晶显示屏、ADC模数转换、DAC数模转换等。

六、综合实践项目1.完成一些简单的实践项目,如LED呼吸灯、温度测量、遥控器等。

2.深入学习一些复杂的实践项目,如多功能数字钟、智能温控系统等。

七、优化与调试1.学习如何调试51单片机程序,包括使用调试器、查看寄存器值、打印调试信息等。

2.学习如何进行程序优化,提高程序的执行效率和资源利用率。

总结希望通过本篇文章的介绍,你能够了解到从零开始入门学习51单片机的基本步骤和内容。

入门学习51单片机需要系统性的学习和实践,不仅要学习基础知识,还需要深入理解其原理和应用。

通过反复实践和项目练习,不断提升编程能力和硬件调试技巧,才能够熟练掌握51单片机的开发和应用。

C语言的51单片机基础学习教程

C语言的51单片机基础学习教程

其他语句 ;
}
2.2 数据 类型
1.C-51 数据的存 储类型
例 :数据 类型
变量名
char
miao;
bit
flag;
unsigned char code table[]={};
int
led;
注意 :变 量名不 能用 C 语言 中的关键 字表 示。
2.C- 51 的数据 类型扩 充定 义
sfr: 特殊 功能 寄 存器 声明
2
误。
读锁存器
地址 /数据 1
控制 C &
内部总线 写锁存器
D
Q
P0.X
CL 锁存器
_ Q
1 0 MUX
VCC
T1 P0.X 引脚
T2
读引脚 读锁存器
图 1.5 P0 口作为 普通 I/O 口( 输入口 )
地址 /数据
控制 C
VCC
&
1
T1
内部总线
写锁存器
D
Q
P0.X CL 锁存器
_ Q
1 0 MUX
图 1.10 P3 口的 内部 结构图 作为 通用 I/O 口与 P1 口类似 ---- 准双向 口 (W=1) P1 口 是 80C51的唯 一的单 功能 口,仅能 用作数据输入输出口,它由一个输出锁存器、三个输入缓冲器、一 个与 非门和输出驱动电路组成。 同 P2 口相同 ,内部设 有上拉 电阻( 约 30KΩ)。 P3 第二功能各 引脚 功能 定义:
读锁存器
R
内部总线 写锁存器
D
Q
CL
P1.X 锁存器
_ Q
P1.X引脚 T
读引脚
图 1.9 P1 口的 内部 结构图 1.5 P3 口的 内部 结构
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(四)说到这里,我们来讲讲数码管的显示方式,可分为两种:动态扫描和静态显示。

上面我们所说的即为静态显示。

但是如果我们采用动态扫描显示,那么就可以解决上面的问题,即可以显示多个数码管了。

上面我们所说的静态显示把数码管的COM脚接至VCC或GND端,其他的接至PX口上,这样只要PX口上输出相应的高低电平,就可以显示对应的数字或字符。

但是如果我们采用动态扫描的方法,比如显示6个数码管,硬件连接可以这样解决:a--dp还是接至P0.0--P0.7上,还有6个COM脚再接至另外口的P2.0--P2.5。

P0口作段选(控制数字字符)P2口作位选(选通哪个数码管导通)这样我们控制P0和P2口就可以控制6个数码管了。

但是,细心的朋友,会问这样的问题:P2位选,是让数码管一个一个亮的,那还是不能控制6个一起亮或灭嘛!?^_^ 想想好象是对的哦?怎么办...难道错了?嘿嘿,问你个问题?黑夜里,拿着一支烟,在你面前快速的晃动,你会发现什么样的现象?是不是原本不连续的点变成了一条看上去连续的曲线或者直线!再回过头来,仔细想想我们的数码管!原理是一样的,你可别忘了,我们的单片机可是一个计算机哦,计算机的运算速度,大家可想而知吧!这里再说说51单片机的机器周期和时钟周期等概念。

所谓机器周期就是访问一次存储器的时间。

而1个机器周期包括12个时钟周期。

如果单片机工作在12M晶体下,那么一个时钟周期为:1/12微妙。

一个机器周期12*1/12 = 1微妙。

如果晶体为6M,时钟周期和机器周期各是多少呢?在汇编中,我们还要关心,指令执行的机器周期长短不一,有1个周期、2个周期和4个周期等。

说着说着,跑了这么远了...还是回到原来的话题,如果我们把位选的P2也看作上面的“烟”一划而过,那么我们看到的是不是6个一起亮或一起灭了!^_^ 哈哈,原来如此... 记住,在任何某一时刻,有且只有一个数码管能发光。

如果你能把这句话理解了,你是真明白我的意思了!朋友,现在给你个任务,让6个数码管分别显示1、2、3、4、5、6。

看你自己可以搞定不?你自己先试着写写看咯...#include<reg51.h>void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++);}}void main(void)while(1){P0 = 0x06;//1的码段P2 = 0x01;//选通一位,或者P2_0 = 1;Delay(20);//延时约20毫秒P0 = 0X00;//关闭显示P0 = 0x5b;//2的码段P2 = 0x02; //选通一位,或者P2_1 = 1;Delay(20);P0 = 0X00;P0 = 0x4f;//3的码段P2 = 0x04; //选通一位,或者P2_2 = 1;Delay(20);P0 = 0X00;P0 = 0x66;//4的码段P2 = 0x08; //选通一位,或者P2_3 = 1;Delay(20);P0 = 0X00;P0 = 0x6d;//5的码段P2 = 0x10;//选通一位,或者P2_4 = 1;Delay(20);P0 = 0X00;P0 = 0x7d;//6的码段P2 = 0x20;//选通一位,或者P2_5 = 1;Delay(20);P0 = 0X00;}}(五)相信大家一定见过数字时钟,教学楼大厅一定有吧。

每次路过,基本上只是随便瞟上一眼,根本没去想过他的工作原理什么。

但是今天你也可以把他做出来了,是不是觉得自己很有成就感呢!呵呵!^_^接上面所讲的,我们先来做个简单的实验:在一个数码管上轮流显示0--9这10个数字。

还楞着干什么,快动手写程序呀!好象有点难哦,要不先不要往下看了,嘿嘿,关机吧,自己先去想想,怎么样?#include<reg51.h>unsigned char code SEG_TAB[ ] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9数字void Delay(unsigned int a) //unsigned int 定义为无符整形,取值范围为0--32768{unsigned char i;while( --a != 0){for(i = 0; i < 125; i++);}}void main(void){unsigned char i;while(1){for(i = 0; i < 10; i++){P0 = SEG_TAB[ i ]; //取SEG_TAB数组中的值P2 = 0X01;Delay(1000);}}}是不是显示从0--9,跳动显示,你的心是不是也跟着一起跳呀,离我们的目标又迈进了一步!不错,继续努力!上面只显示了一个数码管的数字0--9,但是怎么样要让他显示6个数字呢?这样我们就可以做个时钟出来玩玩了!还记不记得我们前面讲过的P2口的位选作用!嘿嘿,没忘记就好!#include<reg51.h>unsigned char hour = 12, min = 0, sec = 0;unsigned char code SEG_TAB[ ] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9数字void Delay(unsigned char a){unsigned char i;while( --a != 0)for(i = 0; i < 125; i++);}}void disp(void){P0 = SEG_TAB[ sec % 10 ];//显示秒的个位P2 = 0X01;Delay(15);P2 = 0;P0 = SEG_TAB[ sec / 10 ];//显示秒的十位P2 = 0X02;Delay(15);P2 = 0;P0 = SEG_TAB[ min % 10 ];//显示分的个位P2 = 0X04;Delay(15);P2 = 0;P0 = SEG_TAB[ min / 10 ];//显示分的十位P2 = 0X08;Delay(15);P2 = 0;P0 = SEG_TAB[ hour % 10 ];//显示时的个位P2 = 0X10;Delay(15);P2 = 0;P0 = SEG_TAB[ hour / 10 ];//显示时的十位P2 = 0X20;Delay(15);P2 = 0;}void main(void){while( 1 ){disp( );}编译烧录芯片后,观察运行现象。

矣...怎么一直显示12:00:00,难道是时钟没有启动?还是,另外的原因呢?哦,原来是3个变量sec,min,hour初始化后,其值一直没有改变!那我们怎么样才能让他改变数值呢?有的朋友一定会这么认为:让秒个位延时1秒,后加1,而秒十位延时10秒后,再加1,一直加到6,分个位加1,依次类推...这样的想法是不错,但是朋友你有没有想过C语言的一般延时(除非你把他放到中断里)极不精确!这样累计下来,一天24小时的误差,肯定很大很大,我曾经也用延时的方法写过时钟,1个小时误差8秒,那是个什么概念!一天24小时就要24*8=192,约为3分钟,一个月就是10分钟...有没有其他的方法可以改进些呢?有!这里就要涉及到单片机中另一个比较重要的核心部分:单片机的中断和定时器的运用!想写出比较精确(这里说的只的相对前面的做法而言比较精确而已,如果要做更加精确的时钟,用时钟芯片比较好点,常用的有DS12887和DS1302等)的时钟程序,就一定要调用中断和定时器。

还是大家先看看教材和书吧,毕竟人家出的书,肯定比我要写的系统多了,下面我们再来简单的讲讲!(六)什么是中断呢?讲个比较通俗的例子:比如你正在家中看电视,突然电话响了,你的第一反应是什么?是不是先跑过去接电话!接完电话后,继续看电视。

这就是个中断的例子,中断是由电话引起了,你跑过去就是响应中断,接电话就是中断的处理!接完电话后,接续看电视,即恢复中断,等待下个中断的到来!但是这个好象和单片机没什么联系呀?有的朋友或许会这样疑问。

是的。

单片机当然不会看电视了,也不会接电话了!^_^ 但是,类比一下:比如单片机正在执行某个任务,突然要有更重要的事件,要求单片机响应,单片机就会应答响应,去执行更为重要的任务(中断处理),原来的任务就继续等待(现场的保护)。

执行完更重要的任务后,回到中断的入口处,继续执行原来的任务(现场中断的恢复)。

51系列的单片机共有5个中断源,分别为:外中断0 、定时器T0中断、外中断1、定时器T1中断、串口中断。

或许,有些朋友已经大概领会了其中的意思,有些朋友还迷迷糊糊。

不过不要紧,我们继续往下看,下面我们来讲讲单片机的定时器是什么?如何工作的?定时器,大家从字面上就可以看出其大概的意思吧?简单的说:就是起定时作用!也就是让单片机计数。

定时器分为:方式0方式1、方式2和方式3等4种工作方式。

有些朋友一定会问:定时器如何启动?风扇的定时器,相信大家一定都用过吧!但是单片机的定时器,该如何启动呢?总不该也用手一拧定时器吧! ^_^ 当然不是,我们只要给单片机一些指令,就可以启动定时器了!下面我们就定时器0,来说说怎么启动定时器0。

TMOD = 0X01;//设置定时器0 工作方式0TH0 = (65536 - 5000) / 256;//载入高8位初值TL0 = (65536 - 5000) % 256;//载入低8位初值TR0 = 1; //启动定时器^_^,简单吧,这样我们就可以把定时器启动了。

其中TMOD为T/C方式控制寄存器:D7 D6 D5 D4 D3 D2 D1 D0_ _GA TE C/T M1 M0 GA TE C/T M1 M0|_________ __________| |_________ __________|| T/C1 | | T/C0 |C/T就是counter(记数器)和timer(定时器)的选择位,若值为1,则作计数器用。

为0,则为定时期用!GATE为门控位。

M1和M0工作方式的选择:若M1=0;M0=0 则为方式0:13位定时/记数器。

若M1=0;M0=1则为方式1,16定时/记数器。

若M1=1;M0=0则为方式2,自动装载8位定时/记数器。

若M1=1;M0=1则为方式3,只适用于T/C0,2个8位定时/记数器。

说了一大堆,感到有点困惑了吧。

那我们还是来说说上面的。

TMOD= 0X01;//至于为什么是0X01,大家看:我们选择的是定时器0方式0,所以T/C1全为0,而T/C0的M1为0。

相关文档
最新文档