C51单片机C语言学习入门资料

合集下载

51单片机C语言教程

51单片机C语言教程
实验电路的基础上增加几个 LED 组成的,也就是用 P1 口的全部引脚分别驱动一个 LED,电 路如图 4-1 所示。
新建一个 RunLED 的项目,主程序如下: #include //预处理文件里面定义了特殊寄存器的名称如 P1 口定义为 P1 void main(void) { //定义花样数据 const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF, 0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0, 0xE7,0xDB,0xBD,0x7E,0xFF}; unsigned int a; //定义循环用的变量 unsigned char b; //在 c51 编程中因内存有限尽可能注意变量类型的使用 //尽可能使用少字节的类型,在大型的程序中很受用 do{ for (b=0; b<32; b++)
8.sfr16 16 位特殊功能寄存器
sfr16 占用两个内存单元,值域为 0~65535。sfr16 和 sfr 一样用于操作特殊功能寄存 器,所不一样的 是它用于操作占两个字节的寄存器,如定时器 T0 和 T1。
9. sbit 可录址位
sbit 同样是 单片机 c 语言 中的一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址
5. 位标量,它的值是一个二进制。
转义字符 \o \n \r \t \b \f \ \" \\
含义 空字符(NULL) 换行符(LF) 回车符(CR) 水平制表符(HT) 退格符(BS) 换页符(FF) 单引号 双引号 反斜杠

单片机的C51语言 教学PPT课件

单片机的C51语言 教学PPT课件
uchar i; while(x--) { for(i = 0;i < 120; i++); } }
(4)标准C语言没有处理单片机中断的定义。 (5)Keil C51与标准C的库函数有较大的不同。
由于标准C的中的部分库函数不适于嵌入式处理器系 统,因此被排除在Keil C51之外,如字符屏幕和图形函 数。
6
C51与标准C的主要区别
(6)目标代码
电脑生成.exe格式,编译完成后直接在电脑上运行, 单片机编译生成.bin代码文件,需要烧写到单片机中并 结合外围电路执行。
5
C51与标准C的主要区别
(3)数据存储类型的不同。C语言最初是为通用计算机设 计的,在通用计算机中只有一个程序和数据统一寻址 的内存空间,而51系列单片机有片内、外程序存储器, 还有片内、外数据存储器。标准C并没有提供这部分 存储器的地址范围的定义。此外,对于51单片机中大 量的特殊功能寄存器也没有定义。
程序中的任何部分作注释。 • 可以在行末用//追加注释。
10
C51的程序结构
C51程序大体上是 例:文件led.c内的代码如下: 若干函数的集合
#include <reg51.h> void delay ( ) {
……; } void main ( ) {
delay(); P0 = 0x33; }
(7)仿真调试 单片机的C程序在电脑上进行编译,然后需通过仿真
器连接后进行仿真调试,近年来随着电路仿真软件的 不断完善,也可通过proteus等软件直接在电脑上进行 仿真调试。
7
Keil C51的开发工具
(1)编译器:由源代码文件生成目标文件
8051单片机所使用的C语言编译器简称为 Cx51 KEIL C51

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语言教程

51单片机c语言教程单片机是一种集成了处理器、存储器和各种输入输出接口的微型计算机。

它可以用来完成各种任务,如控制电机、采集数据、控制显示等。

在单片机中,C语言是一种常用的编程语言,通过使用C语言来编写单片机程序,可以更加方便快捷地完成各种功能。

单片机使用C语言进行编程的主要流程如下:首先,需要搭建一个适合的开发环境。

在使用C语言编写单片机程序之前,需要安装相应的开发工具,如Keil C51、IAR Embedded Workbench等。

这些开发工具可以提供编译、调试等功能,方便我们进行程序开发和调试。

接下来,需要了解单片机的硬件平台。

在编写单片机程序之前,需要了解单片机的硬件结构和各个引脚的功能。

单片机的硬件平台通常包括定时器、串口、数字转换等模块,通过对这些模块的理解,可以更好地利用它们完成各种任务。

然后,可以开始编写C语言程序。

C语言是一种结构化的高级语言,通过使用C语言,可以更方便地完成单片机程序的编写。

在编写C语言程序之前,需要了解C语言的语法和常用的函数库,如输入输出函数库、定时器函数库等。

通过灵活地使用这些函数,可以更加快速地实现想要的功能。

在编写C语言程序时,需要注意一些常见的问题。

比如,需要合理地分配内存空间,避免内存溢出等问题;需要注意函数的调用顺序,保证程序的正确执行;需要考虑编程的效率,避免不必要的计算和资源浪费;需要进行适当的程序调试,确保程序的正确性等。

最后,需要进行程序的下载和调试。

在编写完成单片机程序后,需要将程序下载到单片机的存储器中,并进行相应的调试工作,确保程序能够正常运行。

调试过程中,可以通过调试工具查看程序的执行过程,可以进行单步调试、变量跟踪等操作,帮助我们找出程序中的错误和问题,并进行修正。

通过以上步骤,可以更加方便地使用C语言来编写单片机程序。

当然,单片机的应用非常广泛,不仅仅限于C语言的编程,还可以使用汇编语言、基于图形化编程语言的开发工具等。

单片机C语言编程基础知识专题培训课件

单片机C语言编程基础知识专题培训课件

单双字节
-03~2726585~+32767
unsigsnfre1d6 long
双四字节
0~462595439567295
signsebditlong
四位字节
-02或1417483648~+2147483647
7
1.char字符类型
char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。char 字符类型分为无符号字符类型(unsigned char)和有符号字符类型(signed char),默认值为signed char类型。
结束。
4
1.标识符
标识符是用来表示源程序中自定义对象名称的符号。其中的自定义对象可以是 常量、变量、数组、结构、语句标号以及函数等。
在C51语言中,标识符可以由字母(a~z,A~Z)、数字(0~9)和下划线“_” 组成,最多可支持32个字符。
C51标识符的定义不是随意的,应遵循“简洁”和“见名知意”的原则,并需要 符合一定的规则: 标识符的第一个字符必须是字母或者下划线,不能为数字。由于有些编译系统 专用的标识符以下划线开头,所以用户在定义标识符时一般不要以下划线开头。 C51的标识符区分大小写,例如“ch1”和“Ch1”表示两个不同的标识符。 用户自定义的标识符不能与系统保留的关键字重复。
49 #Cd程e序fin中e的(一宏个定函义数)需。要在调C程用序另中一,个可子以函指数定时一,标另志一符个去函定数义应一写个在常前量面或, 字否符则串应。声明。
150
主C程函序数书名写必格须式为自m由ai,n(一)。行C可程写序一通个过语函句数或调几用个去语执句行。指每定个的语工句作结。尾用“;”
cosivngfoutoninsrdeiudneg 数程据re序类e语型nt句说ra明nt 转无构有向类成符x下型f号odr一数a循t次据,a环循二结环进构制数据c的o最m高pa位ct为符号位

单片机C51语言基础

单片机C51语言基础

signed long
float *
四字节
四字节 1~3 字节
-2147483648~+2147483647
±1.175 494E-38~±3.402 823E+38 对象的地址
bit
sbit sfr sfr16

位 单字节 双字节
0或1
0或1 0~255 0~65535
• • • • • • • • • • •
变量应该先定义后使用,定义格式如下: 数据类型 变量标识符[ =初值 ] 变量定义通常放在函数的开头部分,但也可以放在函数的外部或复合语句的 开头。以unsigned int 为例,变量的定义方式主要有以下3 种。 unsigned int k; // 定义变量k 为无符号整型 unsigned int i, j, k; // 定义变量i, j, k 为无符号整型 unsigned int i=6, j; // 定义变量的同时给变量赋初值,变量初始化 当在一个表达式中出现不同数据类型的变量时,必须进行数据类型转换。 C51 语言中数据类型的转换有两种方式:自动类型转换和强制类型转换。 (1) 自动类型转换。 不同数据类型的变量在运算时,由编译系统自动将它们转换成同一数据类型, 再进行运算。自动转换规则如下: bit→char→int→long→float signed→unsigned
bit
sbit sfr sfr16 interrupt reentrant using -at-task定义中断函数 定义再入函数 定义当前工作寄存器组 地址定位 任务声明 定义数据类型
定义一个位变量
定义一个位变量 定义一个8 位的SFR 定义一个16 位的SFR 声明一个函数为中断服务函数 声明一个函数为再入函数 指定当前使用的工作寄存器组 为变量进行存储器绝对地址空间定位 定义实时多任务函数

51单片机c语言教程全集

51单片机c语言教程全集第一课建立你的第一个KeilC51项目·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;·不懂得单片机的指令集,也能够编写完美的单片机程序;·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;·提供auto、tatic、cont等存储类型和专门针对8051单片机的data、idata、pdata、某data、code等存储类型,自动为变量合理地分配地址;·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。

C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏·提供常用的标准函数库,以供用户直接使用;·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。

·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;以上简单介绍了KEILC51软件,要使用KEILC51软件,必需先要安装它,这也是学习单片机编程语言所要求的第一步――建立学习环境。

首先当然是运行KEIL软件,接着按下面的步骤建立您的第一个项目:(1)点击Project菜单,选择弹出的下拉式菜单中的NewProject,如图1-2。

接着弹出一个标准Window文件对话窗口,如图1-3。

在“文件名”中输入您的第一个C程序项目名称,这里我们用“tet”。

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

单片机的C51语言基础

单片机的C51语言基础在现代电子技术领域,单片机的应用可谓无处不在。

从智能家居设备到工业自动化控制系统,从医疗仪器到汽车电子,单片机都发挥着至关重要的作用。

而要让单片机按照我们的意愿工作,就需要使用合适的编程语言对其进行编程。

C51 语言就是其中一种广泛应用于单片机编程的语言。

C51 语言是在标准 C 语言的基础上发展而来的,专门针对 8051 系列单片机进行了优化和扩展。

它继承了 C 语言简洁、高效、灵活的特点,同时又具备了与单片机硬件直接交互的能力。

要学习 C51 语言,首先得了解它的数据类型。

C51 语言中的数据类型包括基本数据类型和扩展数据类型。

基本数据类型有整型(int)、字符型(char)、浮点型(float)等。

而扩展数据类型则是针对单片机的特殊需求而定义的,比如位类型(bit)、特殊功能寄存器类型(sfr)、特殊功能寄存器位类型(sbit)等。

整型数据用于表示整数,其长度和取值范围根据不同的类型有所不同。

字符型数据通常用来存储单个字符,占用一个字节的存储空间。

浮点型数据则用于表示带有小数部分的数值,但在单片机中,由于资源有限,使用浮点运算可能会比较耗费资源,所以要谨慎使用。

位类型可以用来操作单个二进制位,这在控制单片机的引脚状态等方面非常有用。

特殊功能寄存器类型和特殊功能寄存器位类型则用于直接访问单片机内部的特殊功能寄存器,从而实现对单片机各种硬件功能的控制。

变量和常量也是 C51 语言中的重要概念。

变量是在程序运行过程中其值可以改变的量,而常量则是在程序运行过程中其值保持不变的量。

在定义变量时,需要指定其数据类型和名称,例如:`int num;`这里定义了一个整型变量`num` 。

常量可以用宏定义来实现,比如:`define PI 314159` ,这样在程序中使用`PI` 就相当于使用了`314159` 。

C51 语言的运算符与标准 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 循环语言版权声明:(部分资料图片来源网络)。

单片机C51课件

单片机C51课件一、引言单片机作为现代电子技术领域的重要组成部分,在众多领域都有着广泛的应用。

C51 作为一种常用的单片机编程语言,对于初学者来说,掌握其基础知识和编程技巧至关重要。

本课件将系统地介绍单片机C51 的相关内容,帮助您逐步建立起对单片机编程的认识和理解。

二、单片机概述(一)单片机的定义与特点单片机是一种将中央处理器(CPU)、存储器、输入输出接口等集成在一块芯片上的微型计算机。

它具有体积小、成本低、可靠性高、易于开发等特点,广泛应用于工业控制、智能仪器仪表、家用电器等领域。

(二)单片机的发展历程从早期的 4 位、8 位单片机,到如今的 16 位、32 位单片机,其性能不断提升,功能也越来越强大。

三、C51 编程语言基础(一)C51 程序的结构一个完整的 C51 程序通常包括预处理指令、全局变量声明、函数声明和定义等部分。

其基本结构如下:```cinclude <reg51h> //包含头文件void main()//主函数{//程序主体}void function_name()//自定义函数{//函数体}```(二)数据类型C51 支持多种数据类型,如整型(int)、字符型(char)、浮点型(float)等。

不同的数据类型在存储空间和取值范围上有所不同。

(三)运算符与表达式包括算术运算符(+、、、/、%)、关系运算符(>、<、==、!=)、逻辑运算符(&&、||、!)等。

(四)控制语句1、顺序结构:程序按照语句的先后顺序依次执行。

2、选择结构:通过 ifelse 语句、switch 语句实现程序的分支选择。

3、循环结构:for 循环、while 循环、dowhile 循环用于重复执行一段代码。

四、单片机的硬件资源(一)中央处理器(CPU)负责执行程序指令和进行数据运算。

(二)存储器包括程序存储器(ROM)和数据存储器(RAM)。

(三)输入输出接口如并行 I/O 口(P0 P3)、串行通信接口等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

前言 ............................................................... 错误!未定义书签。 基础知识:单片机编程基础 ............................................................ 1 第一节:单数码管按键显示 ............................................................ 3 第二节:双数码管可调秒表 ............................................................ 5 第三节:十字路口交通灯 .............................................................. 6 第四节:数码管驱动 .................................................................. 7 第五节:键盘驱动 .................................................................... 8 第六节:低频频率计 ................................................................. 14 第七节:电子表 ..................................................................... 17 第八节:串行口应用 ................................................................. 18

基础知识:单片机编程基础 单片机的外部结构: 1、 DIP40双列直插; 2、 P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、 电源VCC(PIN40)和地线GND(PIN20); 4、 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1

单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、 一个串行通信接口;(SCON,SBUF) 4、 一个中断控制器;(IE,IP)

针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。

C语言编程基础: 1、 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、 ++var表示对变量var先增一;var—表示对变量后减一。 4、 x |= 0x0f;表示为 x = x | 0x0f; 5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、 While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}

在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC While( 1 ); //死循环,相当 LOOP: goto LOOP; } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。

在某引脚输出低电平的编程方法:(比如P2.7引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND While( 1 ); //死循环,相当 LOOP: goto LOOP; }

在某引脚输出方波编程方法:(比如P3.1引脚) #include //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 { P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND } //由于一直为真,所以不断输出高、低、高、低„„,从而形成方波 }

将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) ) #include //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平 While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 { if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC { P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND else //否则P1.1输入为低电平GND //{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND { P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC } //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平 }

将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) ) #include //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3 void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 { P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平 While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 { //取反的方法是异或1,而不取反的方法则是异或0 P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出 } //由于一直为真,所以不断将P3取反输出到P2 } 注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。

第一节:单数码管按键显示 单片机最小系统的硬件原理接线图: 1、 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF 2、 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF 3、 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理 4、 接配置:EA(PIN31)。说明原因。

发光二极的控控制:单片机I/O输出 将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。

开关双键的输入:输入先输出高 一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。 #include #define LED P1^1 //用符号LED代替P1_1 #define KEY_ON P1^6 //用符号KEY_ON代替P1_6 #define KEY_OFF P1^7 //用符号KEY_OFF代替P1_7 void main( void ) //单片机复位后的执行入口,void表示空,无输入参数,无返回值 { KEY_ON = 1; //作为输入,首先输出高,接下KEY_ON,P1.6则接地为0,否则输入为1 KEY_OFF = 1; //作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为1 While( 1 ) //永远为真,所以永远循环执行如下括号内所有语句 { if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1输出高,LED亮 if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1输出低,LED灭 } //松开键后,都不给LED赋值,所以LED保持最后按键状态。 //同时按下时,LED不断亮灭,各占一半时间,交替频率很快,由于人眼惯性,看上去为半亮态 }

相关文档
最新文档