版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、跟我学单片机系列教程51单片机C语言程序设计前言单片机以其价格低廉、功能强大、体积小、性能稳定等优点,深受广大电子设计爱好者喜爱。目前,各类产品中都能看到单片机的身影,如门铃、报警器、玩具,以及各类数据采集系统和控制终端等。单片机是现代电子设计中使用最广泛的电子元件。而其中的51系列单片机是最早兴起的一类。51系列单片机功能完备、指令系统丰富,发展的最为成熟。这套培训实验教程是以51单片机的应用为主,以培养读者的硬件动手能力和C语言程序开发基础为目的而编写的。由于水平有限,如有不当之处还请多多指教。 主编:彭跃明 南昌日升电子 电话:0791-(公司)0791-(彭跃明)地址:南昌市长运电子市
2、场(长途汽车站旁)B座39号目录前言第一章:了解51单片机1单片机的概念2单片机的用途3怎么学单片机4为什么选择51单片机作为单片机学习的入门第二章:学前预备知识1电平特性2与、或、非的基本运算3二进制、十进制、十六进制的表示及相互转换480c51单片机简介551单片机内部结构框图651单片机引脚功能751单片机最小系统8硬件知识第三章:相关软件和实验板的使用方法1Keil软件的使用2烧软件及实验板的使用3Proteus软件的使用4Protel 99 se软件的使用第四章:51单片机之LED显示实验1位定义操作LED2主函数直接操作LED3LED彩灯程序设计4LED流水灯程序设计第五章:51单
3、片机之独立式键盘控制LED显示实验1用按键控制LED亮灭的程序设计2用按键控制LED彩灯变化的程序设计3LED可控流水灯的程序设计第六章:51单片机之LED数码管实验1数码管静态显示实验2数码管动态显示实验3指针实验4中断实验5(电子钟)定时器/计数器实验第七章:51单片机之矩阵式键盘控制LED数码管显示实验第八章:51单片机之串口通信实验1PC机与单片机串口通信2单片机与单片机串口通信第九章:51单片机工程实例(1602+DS1302+4个按键+闹铃的电子钟)第一章了解51单片机一单片机的概念:在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。二
4、单片机的用途:工业自动化:数据采集,测控技术;智能仪器仪表:数字示波器、数字信号源、数字万用表、感应电流表等;消费类电子产品:洗衣机、电冰箱、空调机、手机等;凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳,80C51,arm等。三怎么学单片机:实践第一;补充必要的理论知识,即缺什么补什么;做工程项目积累经验。(可在网络上搜索些题目,也可自己有什么想法大胆的去试验。)。四为什么选择51单片机作为单片机学习的入门:学51单片机成本低,而且51单片机技术最成熟、资料最丰富、学习难度相对比较低。第二章学前预备
5、知识一电平特性:数字电路中只有两种电平:高和低(本课程中)定义单片机为TTL电平:高+5V、低0V。RS232电平:计算机的串口,高-12V、低+12V。所以单片机与计算机之间进行通讯时需要加电平转换芯片max232。二与、或、非及异或的基本运算:逻辑“与”:0*0=01*0=0 0*1=01*1=1 “必须都有,否则就没有”逻辑“或”:0+0=01+0=10+1=11+1=1“只要其中之一有,就有”逻辑“非” :非0=1非1=0 “求反”逻辑“异或”:00=010=101=111=0“必须不同,否则就没有”三二进制、十进制、十六进制的表示及相互转换:十 二 十六 十 二 十六 十 二 十六
6、十 二 十六000000401004810008121100C100011501015910019131101D200102601106101010A141110E300113701117111011B151111F四.80c51单片机简介:Inter公司推出了MCS-51系列单片机:集成8位CPU、4K字节ROM、128字节RAM、4个八位并口、一个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。单板机单片机。80C51是MCS-51系列中的典型品种;其它厂商以80C51为基核开发出的CMOS(场效应管)工艺单片机产品统称为80C51系列。五51单片机内部
7、结构框图:六51单片机的引脚功能:AT89S52的引脚功能介绍:电源引脚:(40脚)电源正极VCC;(20脚)电源负极GND。复位引脚:(9脚)复位引脚RST。时钟信号输入输出引脚:(19脚)XTAL1;(18脚)XTAL2;外部ROM的读选通引脚:(29脚)PSEN(低电平有效)。地址锁存和ROM编程脉冲输入引脚:(30脚)ALE/PROG为高电平时为地址锁存允许控制信号;为低电平时为对内部ROM编程脉冲输入端。访问外部存储器控制引脚:(31脚)EA/VPP当接高电平时,可访问内部和外部程序存储器;当接低电平时只能访问外部程序存储器。1P0端口结构:P0口可以当作普通I/O口,也可以在系统外
8、部扩展存储器的时候,输出低8位的地址。2P1口结构:P1口一般用作通用I/O端口,其可以用作位处理,各位都可以单独输出或输入信息。另外AT89S系列的(6脚)MOSI;(7脚)MISO;(8脚)SCK可用作程序下载。P1端口各位的第二功能P1端口的位第二功能注释P1.0T2T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EXT2EX(定时器/计数器T2的捕捉和重载触发信号控制)P1.2P1.3P1.4P1.5MOSI指令输入(编程用)P1.6MISO数据输出(编程用)P1.7SCK时钟输入(编程用)3P2口结构:P2口可以当作普通I/O口,也可以在系统外部扩展存储器的时候,输出高
9、8位的地址。4P3口内部结构:P3端口是一个具有第二功能、且可位操作的端口。当作为普通I/O端口时,P3口可以进行位操作,是准双向端口。当系统需要扩展外部器件时,P3口可以作为第二功能使用。 P3端口各位的第二功能P3端口的位第二功能注释P3.0RXD串行数据输出P3.1TXD串行数据输入P3.2INT0外中断0信号输入端P3.3INT1外中断1信号输入端P3.4T0T0计数脉冲输入端P3.5T1T1计数脉冲输入端P3.6WR读外部数据存储器P3.7RD写外部数据存储器单片机4个8位I/O端口的不同结构,决定了各自的应用范围。例如,在一些复杂的应用系统中,只用一个单片机很难达到系统的要求,经常
10、需要外部功能扩展。因此,单片机的P0口和P2口常用于组成16位地址总线。P0口用作8位数据总线,P3口由于其特有的第二功能,因此常用于传输和控制等,只有P1口可以真正的用于I/O操作。另外,在单片机应用时,P0口需要外加上拉电阻,而P1口、P2口和P3口内部设置有上拉电阻,不用外加。这4个I/O端口均为准双向I/O端口,其驱动能力不同,P0口的驱动能力最强,可以驱动8个LSTTL负载,其余3个端口只能驱动4个LSTTL负载。还有一个需要强调的是,这些端口都有两种读取方式:读锁存器和读引脚。这是因为在I/O端口中,锁存器内容和引脚上的内容有可能不一致。七51单片机最小系统:1单片机最小系统的概念
11、:能使单片机正常工作的最小硬件单元电路,就叫单片机最小系统。2单片机最小系统的组成:(1)复位电路:t=RC1(t10ms);(2)时钟电路:C2=C3=(3010)pF(一般是2030pF);(3)存储器访问路经控制:EA/VPP=+5V时,先内后外。另外,一般还有单片机的ISP下载口也包含在单片机最小系统中。351系列单片机的最小系统电路的原理图:八硬件知识:看一个人,我们一般会看他的长相。同样,电子元件也要看长相,或者说是形壮,只是说法不一样,我们把它们的长相称为“封装”。1单片机的封装:单片机的封装大概的可以分为:DIP(直插封装)、PLCC(贴片,引脚向内折起)、TQFP(贴片,引脚
12、向外侧伸展)。对DIP封装的单片机的型号及管脚识别方法如下(对于所有的DIP封装的识别方法与此类同)。对于DIP封装的单片机来说,在外壳正中央印有字(型号)的一面是它的正面,在单片机外壳的正面的一侧边有一个半月型的小坑,同时还有一个圆形的小坑在旁边。这两个标志说明离圆形小坑最近的管脚为单片机的1号管脚。把单片机印有型号的一侧朝上,1号管脚放在左手边,向右依次为2、3、420管脚,单片机上边沿从右到左为21、22、2340脚。这样数的引脚号与电路图上所标的引脚号是一一对应的。对于其他封装的器件,方法与此类似,也可参考实际的器件使用手册来找到管脚的排列。2电阻的封装及其参数:电阻的封装主要分为直插
13、和贴片。参数的标注有直标和色标。直标法:直标法主要用在体积比较大的封装和贴片封装上。直标法有两种况:如果阻值是整数则用三位数表示,前两位是阻值的高两位,第三位是指十的几次方,如103,表示这个电阻是10千欧的;如果阻值是小数则用字母R代替小数点,小数点两边的整数值和小数值部分与之前所说的方法相同,如2R2,表示这个电阻是2.2欧的。色环标注法:色环电阻是应用于各种电子设备的最多的电阻类型,在识别时,可运用如下技巧:技巧1:先找标志误差的色环,从而排定色环顺序。最常用的表示电阻误差的颜色是:金、银、棕,尤其是金环和银环,一般绝少用做电阻色环的第一环,所以在电阻上只要有金环和银环,就可以基本认定这
14、是色环电阻的最末一环。 技巧2:棕色环是否是误差标志的判别。棕色环既常用做误差环,又常作为有效数字环,且常常在第一环和最末一环中同时出现,使人很难识别谁是第一环。在实践中,可以按照色环之间的间隔加以判别:比如对于一个五道色环的电阻而言,第五环和第四环之间的间隔比第一环和第二环之间的间隔要宽一些,据此可判定色环的排列顺序。 技巧3:在仅靠色环间距还无法判定色环顺序的情况下,还可以利用电阻的生产序列值来加以判别。比如有一个电阻的色环读序是:棕、黑、黑、黄、棕,其值为:100104=1M误差为1,属于正常的电阻系列值,若是反顺序读:棕、黄、黑、黑、棕,其值为140100=140,误差为1。显然按照后
15、一种排序所读出的电阻值,在电阻的生产系列中是没有的,故后一种色环顺序是不对的。如何识别阻值大小:四色环电阻:第一色环是十位数,第二色环是个位数,第三色环是应乘颜色次幂颜色次,第四色环是误差率;五色环电阻:第一色环是百位数,第二色环是十位数,第三色环是个位数,第四色环是应乘颜色次幂颜色次,第五色环是误差率。如何识别电阻的功率:色环电阻看体积,直标法的电阻功率也已经标出。第三章相关软件和实验板的使用方法一KEIL软件的使用。二烧写软件的使用。三Proteus软件的使用。四Protel 99 se使用:在画PCB图排版时要注意以下几点:电源/地线粗细:30mil;信号/控制线粗细:15mil;电源/
16、地线过孔:hole size:30mil;diameter:32mil;信号/控制线过孔:hole size:15;diameter:25mil;布线与过孔间距: 15mil;布线间距:20mil;字体大小:35*4mil。第四章LED(发光二极管)实验一实验目的:掌握LED驱动电路的设计及使用单片机控制LED的方法。二了解LEDLED即发光二极管,英文全称为Light Emitting Diode。单独的发光二极管便是一个最简单的LED,通过控制其的亮灭来作为信号指示,一般用于电源指示灯、工作状态指示等。单个的发光二极管使用比较简单。1发光二极管的结构及其工作原理:(1)发光二极管的外形特点
17、:外形(直插:球顶形,矩形。贴片);颜色(红,黄,绿)。(2)正偏和反偏的概念:给晶体管器件两极间加上电压,称为给它加偏置,给两极加正向电压称为正向偏置,给两极加反向电压称为反向偏置。(3)发光二极管的管脚极性判断:发光二极管的工作原理及管脚的判断:只要在发光二极管的两端接上一个合适的正向电压,当电流达到一定时(2030mA左右),它就能发出特定颜色光。看引脚:一个新的发光二极管拿在手上一个最明显的手征就两根引脚长短不一,这正是它们的极性特征(长的为正极,短的为负极);看外形:仔细的看发光二极管的外形,你会发现在靠近引脚的封装边沿有一圈凸出部分,它也是圆的,但是这个圆不完整,而是有一处被切平了
18、。这个切平了的地方对应下来的引脚就是它的负极;测量:这个方法可以用万用表的电阻档,也可以用3V的纽扣电池。如果是用万用表的电阻档将两表笔任意的接两个引脚会发光的那一次就是导通了,这时红表笔所接的就是它的负极,黑表笔所接的就是它的负极(我这用的是指针表,如果是数字表就正好是反的)。如果是用电池,就把电池的两极去接发光二极管的两脚,如果会发光就是导通了。那么接电池正极的引脚就是它的正极,接电池负极的引脚就是它的负极。(4)发光二极管质量的判断:在用测量法判断引脚的时候如果没有发光的情况发生,就说明它是坏的。2发光二极管的驱动电路:发光二极管是电流点亮的,为了使其能够安全的工作必须在它的支路上串联一
19、个限流电阻。单个发光二极管的驱动电路如下图所示:3发光二极管限流电阻的计算方法:发光二极管的工作参数:I1030mA;V1.43V;根据欧姆定律就有:R=(VCC-VLED)/I1k;驱动多个发光二极管时要给每一路加上一个功率驱动。例如下图所示:在这种电路连接形式下R1的参数与单个发光二极管的连接时的R计算方法相同。R2的阻值可以将R1的阻值与晶体管Q的放大倍数相乘就对了。也可以用另一种极性的晶体管。方法与上相同。第一节位定义操作LED一C语言相关内容:1预处理:预处理命令通常在程序编译时进行一些符号处理,其并不执行具体的硬件操作。C51语言中的预处理命令主要有宏定义指令、文件包含指令和条件编
20、译指令,还有其他一些调试时使用的指令。在程序中使用预处理能够节约开发时间从而提高工作效率。在源程序中,为了区分预处理命令和一般的C语句的不同,所有的预处理命令行都以“#”开头,并且结尾不用分号,预处理命令可以出现在程序的任何位置,但习惯上尽可能地写在源程序的开头,其作用范围从其出现到文件结尾。2文件包含:“#include”所实现的功能就是文件包含。即一个源程序文件可以包含另一个源程序文件的全部内容。文件包含不仅可以包含头文件,还可以包含用户自己定义编写的源程序文件。文件包含预处理命令的一般形式: #inclued 或#include “文件名” 这两种形式的区别是:前一种形式的文件名用尖括弧
21、括起来,系统将到包含C语言库函数的文件所在的目录(通常是KEIL目录中的include子目录)中寻找;后一种形式的文件名用双引号括起来,系统先在当前目录下寻找,若找不到,再到其它路径中寻找。文件包含使用时的注意事项: 一个#include命令只能指定一个被包含的文件; “文件包含”可以嵌套; “文件包含”中的文件名以“.H”为为文件名的后缀;3reg52.h的文件内容:reg51/52.h头文件里定义了单片机的特殊功能寄存器和中断等内容。4C语言程序的注释方法:在程序编写过程中为了提高编程的效率和程序的可读性,经常采用写注释的方法来达到这一目的。注释方法有两种,即单行注释和多行注释。单行注释的
22、格式是“/注释内容”;多行注释的格式是“/*注释内容*/”。值得一提的是:单行注释法只能单行注释,而多行注释法可以用来作多行注释,也可用作单行注释。读者可根据自己的情况来作选择。5标识符和关键字:标识符是用来标识源程序中某对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。一个标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线,通常以下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不要使用以下线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前面32个在编译时有效,因此在编写源程序时标识符不要超过32个字符,
23、这对于一般应用程序已经足够了。C语言是大小写敏感的高级语言,如果要定义一个时间“秒”标识符,可以写作“sec”,如果程序中有“SEC”,那么这是两个完全不同的标识符。关键字是编程语言保留的特殊标识符,有时又称为保留字,它们具有固定的名称和含意,在C语言的程序编写中不允许标识符与关键字相同,与其它计算机语言相比,C语言的关键字比较少。ANSI C标准一共规定了32个关键字如下表所示:关键字用途说明auto存储种类说明用于说明局部变量,缺省值为此break程序语句退出最内层循环体case程序语句switch语句中的选择项char数据类型说明单字节整型数或字符型数据const存储种类说明在程序执行过
24、程中不可更改的常量值continue程序语句转向下一次循环default程序语句switch语句中的失败选择项do程序语句构成do-while循环结构double数据类型说明双精度浮点数else程序语句构成if-else选择结构enum数据类型说明枚举extern存储种类说明在其它程序模块中说明了的全局变量float数据类型说明单精度浮点数for程序语句构成for循环结构goto程序语句构成goto转移结构if程序语句构成if-else选择结构int数据类型说明基本整型数long数据类型说明长整型数register存储种类说明使用CPU内部寄存的变量return程序语句函数返回short数据类
25、型说明短整型数signed数据类型说明有符号数,二进制数据的最高位为符号位sizeof运算符计算表达式或数据类型的字节数static存储种类说明静态变量struct数据类型说明结构类型数据switch程序语句构成switch选择结构typedef数据类型说明重新进行数据类型定义union数据类型说明联合类型数据unsigned数据类型说明无符号数据类型void数据类型说明无类型数据vvolatile数据类型说明该变量在程序执行中可被隐含地改变while程序语句构成while和do-while循环语句Keil C51编译器的关键字除了有ANSI C标准的32个关键字外,还根据51单片机的特点扩展
26、了相关的关键字。在Keil C51开发环境的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,下表是Keil C51编译器扩展的关键字。关键字用途说明bit位标量声明声明一个位标量或位类型的函数sbit位变量声明声明一个可位寻址的变量sfr特殊功能寄存器声明声明一个特殊功能寄存器(8位)sfr16特殊功能寄存器声明声明一个16位的特殊功能寄存器data存储器类型说明直接寻址的8051内部数据存储器bdata存储器类型说明可位寻址的8051内部数据存储器idata存储器类型说明间接寻址的8051外部数据存储器pdata存储器类型说明“分页”寻址的8051外部数据存储器xdata存储器类型说
27、明8051外部数据存储器code存储器类型说明8051程序存储器interrupt中断函数声明定义一个中断函数reetrant再入函数声明定义一个再入函数using寄存器组定义定义8051的工作寄存器组6常量和变量:常量就是在程序执行过程中不改变值的数据量,变量就是在程序运行过程中可以改变值的数据量。常量和变量是计算机程序处理的数据对象。常量在程序中是不接受程序修改的固定值,C51中的常量可为任意数据类型。变量在程序中是可以被程序修改的数据量。一个完整的变量应该有类型说明符以及变量标识符。C51编译器在单片机内存中单独划分一定的存储单元,用来存放该变量的值。变量作用域是在程序中变量起作用的范围
28、。C51语言中,使用变量前需要首先声明该变量。由于C51程序中可以包含多个函数和程序文件,因此使用变量时,需要注意变量有效作用范围的问题,即变量的作用域。7C语言语句结束标志:C语言使用分号“;”作为一条语句的结束标志。8可位寻址(sbit):sbit 位变量名=特殊功能寄存器名位位置;位变量名是一个用户自定义的标识符,而不能用关键字;在操作单片机的I/O口时,特殊功能寄存器名就是单片机的P0、P1、P2、P3;位位置是一个07的数字。当我们要控制单片机的某个口的某位时就用这个可位寻址的方法。比如,我们要控制P1口的第3位,我们就只要定义一个位变量为“sbit D3=P13;”就行了。D3就是
29、我定义的位变量名。调用位变量时只要用一个变量赋值语句就行了,比如:要使位变量D3为0,你只要写“D3=0;”。9主函数:C语言是由函数构成的,一个C语言程序至少包括一个函数(主函数),一个C语言源程序可以包含各种函数,但只能有一个名为main()的函数。因此,函数是C语言程序的基本单位。函数后一定有一对大括号“”,在大括号里书写程序。C语言程序总是从main()主函数开始执行的,不管物理位置上这个main() 放在什么地方。主函数通过直接书写语句和调用其他功能子函数来实现有关功能,这些功能子函数可以是C语言本身的提供的库函数也可以是用户自己编写的函数。至于什么是库函数和用户自定义函数,我们在学
30、习函数时再来细说。10赋值语句:运算符:运算符就是完成某种特定运算的符号。表达式:由运算符及运算对象所组成的具有特定含意的式子。表达式语句:在任意一个表达式的后面加一个分号“;”就构成了一个表达式语句。赋值运算符:C语言中,最常见的赋值运算符为“=”。赋值运算符的作用是将一个数据的值赋给一个变量。赋值表达式:利用赋值运算符将一个变量与一个表达式连接起来的葵花子称为赋值表达式。赋值语句:在赋值表达式的后面加一个分号“;”合便构成了赋值语句。现在所说的赋值运算符、赋值表达式、赋值语句都是简单的,还有一些相对复杂的赋值运算,称为复合赋值运算,这个在以后章节中用到时再来细说。二例程:例程1:作业:写四
31、个程序分别点亮实验板上的D6,D8,D10,D12或D7,D9,D11,D13。第二节 主函数直接操作LED一C语言相关内容:1如何直接操作P0P3口的输出:直接操作I/O口时,直接给I/O口赋一个十六进制的数即可。例如:“P0=0xfe;”。其中,赋值符号左边的P0是P0组I/O口,赋值符号右边的是给P0口赋的值。“0x”是C语言十六进制数的前缀,“0x”后面的“fe”就是给P0口赋的值。二例程:例程2:#include/包含头文件reg52.hvoid main()/定义一函数名为main的主函数/主函数开始执行P0=0xfe;/给P0口送数0xfe/主函数结束执行作业:写两个程序分别点亮
32、实验板上的D6、D8、D10、D12或D7、D9、D11、D13。第三节LED彩灯程序设计一 C语言相关内容:1 C语言程序的组成结构:预处理命令:#include功能子函数:主函数: main() 主函数体2 函数的定义和调用方法:函数是能够实现特定功能的代码段。C语言程序是由函数构成的,函数是C语言中的一种基本模块。(1)C语言函数定义的一般形式:函数类型标识符函数名(形式参数类型说明表列)局部变量定义函数体语句(2)函数的调用:C语言主函数调用被调用函数的一般形式:函数名(实际参数表例)函数语句调用:“函数名();”。这是无参调用,它不要求被调函数返回一个确定的值。函数表达式调用:只要求
33、它完成一定的操作。在主函数中将函数调用作为一个运算对象直接出现在表达式中,这种表达式称为函数表达式。作为函数参数调用:在主函数中将函数调用作为另一个函数调用的实际参数。这种在调用一个函数的过程中又调用了另外一个函数的方式,称为嵌套函数调用。(3)对被调用函数的说明:在一个函数中调用另一个函数(即被调函数),需要具备如下的条件:被调用的函数必须是已经存在的函数(库函数或用户自定义过的函数)。如果程序使用了库函数,或者使用不在同一文件中的自定义函数,如果不是在本文件中定义的,那么在程序开始时要用“extern”修饰符进行原型声明。使用库函数时,用“#include”的形式,使用自己编辑的函数头文件
34、时,用“#include*.h/c”的形式。3 C语言的语句:一条语句的结束标志为:“;”。4 延时函数的编写方法:延时函数主要是利用无限循环,再加以一些循环条件来达到循环的目的。5 C语言数据类型:单片机的程序设计离不开对数据的处理,数据在单片机中的存放情况由数据结构决定。C语言的数据结构是以数据类型出现的,数据类型可分为基本数据类型和复杂数据类型,复杂数据类型是由基本数据类型构造而成。C语言中的基本数据类型有char,int,short,long,float和double。对Keil C51编译器来说short型与int型相同,double型与float型相同。Keil C51编译器所支持
35、的数据类型如下:数据类型长度值域unsigned char单字节0255signed char单字节-128+127unsigned int双字节065535unsigned int双字节32768+32767unsigned long 4字节0signed long4字节-+ float4 字节+-1.E-38+-3.E+38*13字节对象的地址bit位01sfr 单字节0255sfr16双字节065535sbit位0或1下面就数据类型中最常用的两种数据类型char型和int型做个简单的分析:(1) char字符型:有signed和unsigned char之分,默认值为signed cha
36、r。它们的长度均为一个字节,用于存放一个字节的数据,对于signed char型数据,其字节中的最高位表示该数据的符号,“0”表示正数,“1”表示负数;负数用补码表示;所能表示的数值范围是-128+127,unsigned char型数据,是无符号字符型数据,其字节中的所有位均用来表示数据的数值,所能表示的数值范围是0255。(2) int整型:有signed int和unsigned int之分,默认值为signed int。它们的长度均为两个字节,用于存放一个双字节的数据。signed int是有符号整型数,字节中的最高位表示数据的符号,“0”表示正数,“1”表示负数;所能表示的数值范围是
37、-32768+32767。unsigned int是无符号整型数,所能表示的数值范围是065535。6 for循环结构:for语句的一般形式为:for(表达式1;表达式2;表达式3);循环体;或for(表达式1;表达式2;表达式3)循环体其中,表达式1为赋值语句,给循环变量进行初始化赋值;表达式2是一个关系逻辑表达式,作为判断循环条件的真假;表达式3定义循环变量每次循环后按什么方式变化。当由表达式1初始化循环变量后,则由表达式2和表达式3可以确定循环次数。求解完表达式1后,判断循环条件,即表达式2的真假,若条件为真,则执行下面的循环语句和表达式3,直到循环条件为假时,才结束循环,然后继续执行循
38、环外的后续语句。7 while循环结构:while循环语句的一般使用形式为:while(表达式); 循环体;或while(表达式)循环体当其中的表达式值为真时,便执行语句,然后再次判断表达式的值,直到表达式的值为假时,才结束循环,并继续执行循环外的后续语句。while语句的特点是先判断条件,后执行语句。8.关系运算符与表达式:C语言中有以下的关系运算符: 大于; 小于; 大于或等于; 小于或等于;= 测试等于;!= 测试不等于;前4种关系运算符具有相同的优先级,后2种关系运算符也具有相同的优先级,但前4种优前级高于后2种。关系运算符常用来判别两个条件是否满足,关系运算符的结果只有“真”和“假”
39、2种值。当所指定的条件满足时结果为1,条件不满足时结果为。即1表示“真”,0表示“假”。9自增和自减运算符与表达式 自增和自减运算符的作用分别是对运算对象作加1和减1运算。它们的形式如下:+自增运算符;-自减运算符;三例程:例程3:#include/包含头文件reg52.h/*/void delay( )/定义一函数名为delay的延时子函数/delay延时子函数开始执行unsigned int i,j;/定义无符号整型变量i,jfor(i=0;i500;i+)/500ms的for循环结构/500ms的for循环结构开始for(j=0;j121;j+)/周期为121的for循环;/周期为121
40、的for循环开始和结束(无限循环)/500ms的for循环结构结束/delay延时子函数结束执行/*/void light1()/定义一函数名为light1的显示输出子函数/light1子函数开始执行P0=0x55;/给P0口赋值0x55/ light1子函数结束执行/*/void light2()/定义一函数名为light2的显示输出子函数/ light2子函数开始执行P0=0xaa;/给P0口赋值0xaa/ light2子函数结束执行/*/void main()/定义一个函数名为main的主函数/主函数开始执行while(1)/执行while(1)无限循环结构/while循环开始执行lig
41、ht1();/调用light1()函数delay();/调用delay()延时函数light2();/调用light2()函数delay();/调用delay()延时函数/while循环结束执行/主函数结束执行作业:设计一个有四种花样的彩灯第五节LED流水灯程序设计一 C语言相关内容:1 库函数:C51语言的编译器中包含有丰富的库函数,使用库函数可以大大简化用户程序设计的工作量,提高编程效率。每个库函数都在相应的头文件,头文件中给出了函数原型声明,在使用时,必须在源程序的开始处使用预处理命令#include将有关的头文件包含进来。C51库函数中类型的选择考虑到了8051单片机的结构特性,用户在
42、自己的应用程序中应尽可能地使用最小的数据类型,以最大限度地发挥8051单片机的性能,同时可减少应用程序的代码长度。2 循环左移和循环右移:(1)循环左移函数:循环左移函数主要用于将数据按照二进制循环左移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighed char _crol_(unsighed char val,unsighed char n);unsighed int _irol_(unsighed int val,unsighed char n);unsighed long _lrol_(unsighed long val,unsighed char n);其中,val
43、为待移位的变量,n为循环移位的次数。函数_crol_、_irol_和_lrol_分别用于字符型、整型和长整形变量的循环左移,其返回值分别为移位后的字符型、整型和长整形。(2)循环右移函数:循环右移函数主要用于将数据按照二进制循环右移n位。按照操作数据类型的不同,其函数原型如下几种形式:unsighed char_cror_(unsighed char val,unsighed char n);unsighed int_iror_(unsighed int val,unsighed char n);unsighed long_lror_(unsighed long val,unsighed ch
44、ar n);其中,val为待移位的变量,n为循环移位的次数。函数_cror_、_iror_和_lror_分别用于字符型、整型和长整形变量的循环右移,其返回值分别为移位后的字符型、整型和长整形。二例程:实例4:#include/包含头文件reg52.h#include/包含头文件intrins.h/*/void delay( )/定义一函数名为delay的延时子函数(1s延时)unsigned int i,j;for(i=0;i1000;i+)for(j=0;j121;j+);/*/void main()/定义一个函数名为main的主函数unsigned char a=0xfe;/定义一个无符号
45、字符型变量a并赋初值0xfewhile(1)P0=a;/将a赋值到P0口a=_crol_(a,1);/循环左移1位delay();/调用delay延时子函数作业:设计一组右移的流水灯第五章 独立式键盘控制LED显示实验一实验目的:掌握利用独立式键盘通过单片机控制LED的方法。二了解按键:按键有时又叫按钮,是单片机中最常用的输入设备。它的电路符号如下:一个好的单片机应用系统,通常要有优秀的人机交互接口。键盘是与单片机进行人机交互的最基本的途径,其以按键的形式来设置控制功能或输入数据。按键的输入状态本质上是一个开关量。人们通过键盘输入一些命令或数据,以达到控制单片机运行的目的。常用的键盘有独立式按
46、键键盘和矩阵式按键键盘两种。独立式按键接口简单,适合于简单而且少的开关量的输入。矩阵式按键键盘则适合于输入参数较多、功能复杂的系统,可以最大限度地使用单片机的引脚资源。本章主要介绍了独立式按键输入的相关知识及其编程方法。在这一章中,我们用之前所学的LED来做状态指示。三独立式键盘:键盘有很多种类型,对于简单的系统,如果按键个数比较少、单片机资源比较宽裕,则可以使用独立式按键结构,这样可以简化程序设计。独立式按键采用每个按键单独占有一个I/O口的结构,这是最简单的键盘输入设计。当按下和释放按键时,输入到I/O端口的电平是不一样的,单片机程序根据不同端口电平的变化判断是否有按键按下以及是哪一个按键
47、被按下,并执行相应的程序段。四独立式键盘的结构:第一节用按键控制LED亮灭的程序设计一 C语言相关内容:1 if语句的结构:if语句又叫条件分支语句,常用于需要根据某些条件来决定执行流向的程序中。其是由关键字if构成,即if条件语句。条件语句又被称为“分支语句”。C51语言提供了3种形式的条件语句,下面分别进行介绍。(1)单分支结构:单分支结构的条件语句只有一个语句分支或者语句块分支,其一般形式为:if (表达式) 语句;或if(表达式)语句;其中,当if条件语句表达式的结果为真时,就执行分支语句,执行完后,继续执行后续程序;当表达式为假时,就跳过分支语句,执行后续程序。(2)双分支结构:双分支结构的条件语句包含两个语句分支,由关键字if和else构成,其一般形式为:if (表达式)语句1;else 语句2;或if(表达式)语句1;else 语句2;当表达式为真时,就执行语句1,执行完后,继续执行if语句后面的语句;当表达式为假时,就执行语句2,执行完后,继续执行if语句后面的语句。(3)阶
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年财务年底考核题库含完整答案详解(必刷)
- 2026年环境影响评价工程师之环评技术导则与标准预测复习(轻巧夺冠)附答案详解
- 风湿免疫科狼疮肾护理要点培训
- 2025-2030年网络借贷服务AI应用企业制定与实施新质生产力战略分析研究报告
- 2025-2030年生态友好型家电产品行业深度调研及发展战略咨询报告
- 2025-2030年动画电视节目播出服务市场需求变化趋势与商业创新机遇分析研究报告
- 2026年消毒技术副高练习题库附答案详解(夺分金卷)
- 2025-2030年家用玻璃器皿自动化生产线企业制定与实施新质生产力战略分析研究报告
- 2026山东省国控资产运营有限公司权属企业副总经理招聘1人笔试历年参考题库附带答案详解
- 2026四川成都西岭城市投资建设集团有限公司招聘4人笔试历年参考题库附带答案详解
- 2026年银行竞聘面试无领导小组讨论案例集含答案
- 北京市2025中国国家话剧院应届毕业生招聘11人笔试历年参考题库典型考点附带答案详解
- (二模)2026年深圳市高三年级第二次调研考试英语试卷(含答案)
- 2025-2026学年下学期八年级历史期中试卷(含答案)
- 2026年南京地铁招聘考试题库
- 2026杭州市钱塘(新)区紧缺岗位人才招聘14人考试备考题库及答案解析
- 腰椎病中医护理推拿手法
- 国家事业单位招聘2024国家基础地理信息中心招聘应届毕业生人员笔试历年参考题库典型考点附带答案详解
- 2025年中国南水北调集团江汉水网建设开发有限公司公开招聘15人笔试参考题库附带答案详解
- 2026年及未来5年中国蔬菜的净菜加工行业发展监测及投资战略规划建议报告
- (2026年)咯血的护理课件
评论
0/150
提交评论