单片机学习资料_第1页
单片机学习资料_第2页
单片机学习资料_第3页
单片机学习资料_第4页
单片机学习资料_第5页
已阅读5页,还剩321页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目一:简单电子系统实践项目二:制作灯光控制系统项目三:制作字符显示系统项目四:电子钟设计与仿真项目五:数据检测装置设计与实践项目六:直流电机控制系统实践项目七:单片机通信实践任务一简单电子系统的安装与调试任务二用Proteus仿真软件绘制电路图任务一简单电子系统的安装与调试教学目标1、了解智能电子系统的组成与发展趋势2、理解以单片机为核心的系统结构3、熟悉单片机基本组成和内部结构4、理解单片机的存储器结构及其使用方法5、掌握单片机的接口使用6、学会单片机最小系统的调试

一、单片机简介单片机定义普通计算机CPU、内存、芯片组、硬盘、显卡、声卡等单片机把组成微型计算机的各种功能部件都制作在一块集成芯片上一、单片机简介单片机应用系统

以单片机为核心,配以输入、输出、显示、控制等外围电路和软件,能实现一种或多种功能的实用系统。单片机应用系统是由硬件和软件组成硬件是应用系统的基础,软件则在硬件的基础上对其资源进行合理调配和使用一、单片机简介常用单片机类型根据数据总线位数来划分:8位、16位和32位。8位:51系列、PIC16系列、AVR系列、Holtek、Z8、ST6、HC05、HC0816位:MSP430系列、PIC24系列、HC1232位:ARM等根据指令集类型来划分:CISC和RISC根据厂家来分:欧美、日本、台湾、大陆单片机开发工具开发软件:编译器、调试器、仿真软件开发硬件:编程器、仿真器一、单片机简介AT89SXX系列单片机结构

美国ATMEL公司生产的8位高性能单片机,其主要技术优势是内部含有可编程Flash存储器一、单片机简介AT89S52引脚(以PDIP40封装为例)电源VCC(40脚):+5V电源。VSS(20脚):地线(GND)外接晶体线XTAL1(19脚)和XTAL2(18脚)外接晶体引线端功能:产生时钟两种方式:内部方式和外部方式一、单片机简介89S52的基本时序周期:振荡周期指振荡源的周期,若为内部产生方式,则为石英晶体的振荡周期。T振荡周期=1/fosc;时钟周期称S周期,为振荡周期的两倍,时钟周期=2倍的振荡周期T时钟周期=2*T振荡周期=2/fosc;机器周期一个机器周期含6个时钟周期(S周期)。T机器周期=6*T时钟周期=12*T振荡周期=12/fosc;指令周期完成一条指令占用的全部时间。805l的指令周期含1—4个机器周期,其中多数为单周期指令,还有2周期和4周期指令。一、单片机简介AT89S52引脚(以PDIP40封装为例)控制线控制引脚ALE:(30脚)地址锁存控制信号在系统扩展时,ALE用于控制P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。:(29脚)外部程序存储器读选通信号。在读外部ROM时,有效(低电平),以实现外部ROM单元的读操作。/Vpp:(31脚)访问程序存储控制信号/编程电压。当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。一、单片机简介AT89S52引脚(以PDIP40封装为例)控制线控制引脚RST(9):复位信号。复位信号是高电平有效。高电平有效的持续时间应为24个振荡周期以上。若时钟频率为6MHz,则复位信号至少应持续4微秒以上,才可以使单片机复位。复位后,8051由程序存储器的0000H开始执行程序,其他相应寄存器也复位。8051的复位操作不影响内部RAM的内容。单片机的复位方式有上电自动复位和手工复位两种。一、单片机简介单片机复位方式一、单片机简介AT89S52引脚(以PDIP40封装为例)I/O端口线输入输出引脚P0.0—P0.7(39—32):漏极开路型准双向I/O口在访问外部存储器时,它是分时多路转换的地址(低8位)和数据总线,在访问期间激活了内部的上拉电阻P1.0—P1.7(1—8):带内部上拉电阻的8位双向I/O口P2.0—P2.7(21—28):带内部上拉电阻的8位双向I/O口在访问外部存储器时,它送出高8位地址P3.0—P3.7(10—17):带内部上拉电阻的8位双向I/O口兼有专用功能,P3的8条口线都定义有第二功能一、单片机简介AT89S51内部结构一、单片机简介89S51各功能部件:微处理器(CPU)8位的CPU内含一个1位CPU(位处理器),不仅可处理字节数据.还可以进行位数据处理数据存储器(RAM)片内为128个字节(单元),AT89S52单片机内部有256个字节的RAM数据存储器片外最多可外扩64K字节。程序存储器(ROM/EPROM)803l无此部件,8051为4KROM;8751则为4K

EPROM。AT89S51单片机内部有4 KB的闪存程序存储器(Flash)当不够使用时,可扩展为64KB外部程序存储器。中断系统5个中断源2级中断优先权。一、单片机简介89S51各功能部件:定时器/计数器2个16位的定时器/计数器四种工作方式。串行口一个全双工的串行口四种工作方式。并行8位I/O口P0、Pl、P2、P3:共4个。特殊功能寄存器(SFR)21个,用于对片内各功能模块进行管理、控制、监视,实际上是一些控制寄存器和状态寄存器和内部RAM统一编址,是一个特殊功能的RAM区。二、AT89S51存储器结构四个存储空间:片内程序存储器片外程序存储器片内数据存储器片外数据存储器二、AT89S51存储器结构程序存储器

复位后,程序存储器PC的内容为0000H最多可外扩64K字节程序存储器5个单元具有特殊用途二、AT89S51存储器结构内部数据存储器

二、AT89S51存储器结构特殊功能寄存器(SFR)

特殊功能寄存器地址空间SFR实质上是—些具有特殊功能RAM的单元字节地址范围为80H—FFH特殊功能寄存器的总数为21个有些SFR还可以进行位寻址。注意:

凡是可进行位寻址的SFR的字节,其十六进制地址的末位,只能是0H或8H二、AT89S51存储器结构特殊功能寄存器地址空间一览二、AT89S51存储器结构PC及特殊功能寄存器说明程序计数器PC

程序计数器PC用于存放下—条要执行的指令地址,是一个16位专用寄存器可寻址范围为0—65535(64K)PC在物理上是独立的,不属于SFR累加器A

累加器A是一个最常用的专用的寄存器,大部分单操作数指令的操作数取自累加器很多双操作数指令的一个操作数取自累加器加、减、乘、除算术运算指令的运算结果都存放在累加器A或AB寄存器中。二、AT89S51存储器结构PC及特殊功能寄存器说明B寄存器在乘、除指令中,用到了B寄存器。乘法指令的两个操作数分别取自A和B.其结果存放在AB寄存器对中。除法指令中,被除数取自A,除数取自B.运算后商数存放于A,余数存放于B中。程序状态字寄存器PSWPSW是一个8位寄存器,它包含程序状态信息程序状态字PSW是个8位寄存器,用来寄存本次运算的特征信息,用到其中的七位。二、AT89S51存储器结构PC及特殊功能寄存器说明程序状态字寄存器PSWRSl、RS0:通用寄存器组选择二、AT89S51存储器结构PC及特殊功能寄存器说明程序状态字寄存器PSWCY:进位标志。有进位/借位时,CY=l;否则CY=0。AC:半进位标志。当D3位向D4位产生进位/借位时,AC=1,否则AC=0,常用于十进制调整运算中。F0:用户可设定的标志位,可置位/复位,也可供测试。OV:溢出标志。当带符号数运算结果超出-128—+127范围时OV=1,否则OV=0。当无符号数乘法结果超过255时,或当无符号数除法的除数为0时,OV=l,否则OV=0。P:奇偶校验标志。每条指令执行完,若A中1的个数为奇数时P=l,否则P=0,即偶校验方式。二、AT89S51存储器结构PC及特殊功能寄存器说明栈指针SP8位专用寄存器指示出堆栈顶部在内部RAM块中的位置增长方向:向上系统复位后,SP初始化为07H考虑到08H—1FH单元分别属于工作寄存器区1—3,若在程序设计中要用到这些区,则最好把SP值改置为1FH或更大的值二、AT89S51存储器结构PC及特殊功能寄存器说明数据指针DPTR16位的SFR,高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。既可以作为一个16位寄存器DPTR来用,也可以作为两个独立的8位寄存器DPH和DPL来用。寄存器P0—P3特殊功能寄存器P0一P3分别为I/O端口P0~P3的锁存器在MCS-51中,I/O口和RAM统一编址,使用起来较为方便,所有访问RAM单元指令,都可用来访问I/O口。二、AT89S51存储器结构复位后特殊功能寄存器的状态三、外部总线扩展没有对外专用的地址总线和数据总线,则在进行对外扩展存储器或I/O接口时,需要首先扩展对外总线(局部系统总线)。数据总线8位:P0口地址总线(16位):低八位(A7-A0):P0口;高八位(A15一A8):P2口控制线:输出控制线(如RD、WR、PSEN、ALE)输入控制信号线(如EA、INT0、INTl、RST、T0、T1)地址锁存控制线ALE高电平期间:输出地址低电平期间:输出数据三、外部总线扩展AT89S51的外部总线三、外部总线扩展常用地址锁存器芯片四、程序存储器的扩展程序存储器的扩展数据存储器与程序存储器的片外64K扩展地址空间完全重叠(0000H—FFFFH),它们并联挂接在外部系统总线上。扩展的外部程序存储器的地址指针为程序计数器PC和数据指针DPTR。扩展的外部程序存储器多使用EPROM型。四、程序存储器的扩展常用的EPROM芯片四、程序存储器的扩展2716、2732、2764、27128、27256、27512地址范围根据地址线的位数确定地址范围连接方法:片选CE接地PSEN接OE只要系统执行读外部程序存储器的指令,就由控制读该片EPROM地址扩展方法:线选法译码法四、程序存储器的扩展线选法用所需的低位地址线进行片内存储单元寻址余下的高位地址线可分别作各芯片的片选信号地址不连续,造成存储器的部分空间浪费四、程序存储器的扩展线选法2764地址分布四、程序存储器的扩展译码法常用的译码器:74LS138(3线8线译码器)四、程序存储器的扩展译码法典型扩展电路

四、程序存储器的扩展译码法2764地址分布五、数据存储器扩展外部数据存储器的扩展

外接最大容量不超过64K字节连接方式地址总线低八位(A0-A7):P0高八位(A8-A15):P2ALE地址锁存数据总线(D0-D7):P0控制信号写控制(WR)读控制(RD)五、数据存储器扩展常用RAM芯片

五、数据存储器扩展典型外部数据存储器的扩展

六、I/O口扩展简单的输入、输出接口扩展

原则:“输入三态,输出锁存”选择74系列的TTL电路或MOS电路外部I/O接口和外部RAM是统一编址的,访问外部接口就如同访问外部RAM一样,用的都是MOVX指令七、智能电子开发板介绍智能电子开发板实物七、智能电子开发板AT89S52最小系统及其应用LED显示器的显示方法及其与单片机的接口七、智能电子开发板介绍键盘电路七、智能电子开发板介绍音频放大电路七、智能电子开发板介绍EasyIsp

编程器拨盘开关S1右端为“ON”,左端为“OFF”,编程时把S1打到“ON”七、智能电子开发板介绍最小系统板的元件清单七、智能电子开发板介绍最小系统板的元件安装图八、现场实践环节最小系统电路板的安装与调试最小系统安装的注意事项焊接过程的技术要点系统调试任务二、用Proteus仿真软件绘制电路图

教学目标掌握Proteus仿真软件的使用掌握KEIL集成开发环境的使用学会使用Proteus和KEIL软件进行系统仿真调试一、Proteus仿真软件介绍PROTEUS构成原理图输入系统ISIS

混合模型仿真器动态器件库高级图形分析模块处理器仿真模型VSM布线/编辑ARES一、Proteus仿真软件介绍PROTEUSISIS编辑环境二、KEIL编译环境介绍如何建立一个项目?图1

NewProject菜单

二、KEIL编译环境介绍图2文件窗口二、KEIL编译环境介绍图3选取芯片

二、KEIL编译环境介绍图4新建程序文件

二、KEIL编译环境介绍图5把文件加入到项目文件组中

二、KEIL编译环境介绍图6编译程序

二、KEIL编译环境介绍图7调试运行程序

二、KEIL编译环境介绍图8项目功能菜单如何设置生成HEX文件?二、KEIL编译环境介绍图9项目选项窗口

二、KEIL编译环境介绍

图10编译信息窗口

三、现场实践环节要求:使用Proteus软件和KEIL软件进行单片机系统的测试使用Proteus软件绘制硬件电路使用KEIL软件编程并生成.HEX文件将生成的.HEX文件加载入硬件仿真电路中调试任务一点亮LED的控制系统任务二流水灯控制系统任务三交通灯控制系统

任务一点亮LED的控制系统

任务二流水灯控制系统教学目标:

掌握汇编控制指令的功能

掌握MCU控制多个LED发光的方法

学会使用KEIL软件编程实现点亮多个LED的控制系统

掌握MCU实现流水灯控制的方法一、汇编程序的编写、调试和仿真

常用开发工具(51系列)开发软件编译调试软件:KeilC51、Wave6000仿真器软件:LCA51(配合AEDK实验机)编程器软件在线下载软件:Easy51Pro模拟仿真软件:Proteus开发硬件AEDK实验机开发板编程器一、汇编程序的编写、调试和仿真KeilC51介绍KeilC51安装KeilC51使用建立项目(注意启动文件不要加进去)建立和保存源文件添加源文件到项目项目设置编译项目调试运行一、汇编程序的编写、调试和仿真汇编程序结构:ORG0000H ;复位地址JMPMain ;跳转到主程序........ORG100H ;主程序起始地址Main:.......... ;主程序 .......... JMPMain ;程序循环二、8051指令系统指令简介共111条指令二、8051指令系统寻址方式

根据指令中给出的地址寻找真实操作数地址确定操作数或下一条要执行指令的地址寻址方式有以下七种寄存器寻址直接寻址寄存器间接寻址立即寻址变址寻址相对寻址位寻址二、8051指令系统寻址方式

寄存器寻址对选定的工作寄存器R0-R7、累加器A、通用寄存器B、地址寄存器DPTR相位累加器C中的数进行操作例:MOVA,R0直接寻址指令中直接给出操作数地址可以访问的地址空间有:内部数据存储器、特殊功能寄存器和可位寻址位是访问特殊功能寄存器的唯一寻址方式可用于直接寻址的内部数据存储器:内部RAM低128字节例:MOVA,30H二、8051指令系统寻址方式寄存器间接寻址将指令指定的寄存器内容为地址.对该地址单元中的内容进行操作例:MOVA,@R0寻址空间:用R0或R1间接寻址片内或片外RAM的256字节范围用DPTR或PC间接寻址64K字节外部RAM或ROM立即寻址指令中直接给出操作数例:MOVA,#30H二、8051指令系统寻址方式变址寻址指令中指定的变址寄存器和基址寄存器的内容相加形成操作数地址累加器A作为变址寄存器程序计数器PC或地址寄存器DPTR作为基址寄存器常用于查表,访问程序存储器中存储的表格例:MOVCA,@A+DPTR,设累加器中的内容为30H,DPTR中的内容为2100H执行结果:把程序存储器2100H十30H=2130H单元中的内容传送到累加器中二、8051指令系统寻址方式

相对寻址以当前的PC值加上指令中给出的相对偏移量形成程序转移的目的地址相对偏移量是有符号的8位二进制数,用补码表示例:JCrel

指令所在地址为2100H,当rel=75H,Cy=1执行结果:当前的PC值为指令所在地址2100H十2,即2102H程序转移到2102+75=2177H单元去执行位寻址对内部RAM和特殊功能寄存器的可位寻址垃的内容进行操作与直接寻址方式的形式和执行过程基本相同例:MOVC,30H二、8051指令系统

指令说明指令中常用的符号:三、8051指令系统一览表四、现场实践环节要求:使用汇编语言实现八个LED的发光控制硬件电路连接(可使用芯片并口连接LED)在KEIL中使用汇编语言编程实现该八个LED依次点亮的效果实现八个LED逐个点亮的效果实现流水灯的控制任务三交通灯控制系统教学目标:掌握基于51单片机的智能电子系统的编程语言

C51的语法和使用掌握51单片机控制LED实现交通信号灯的模拟

一、Cx51基本知识Cx51的编程优点对单片机的指令系统不要求了解,仅要求对8051的存储器结构有初步了解;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;关键字及运算函数可用近似人的思维过程方式使用;编程及程序调试时间显著缩短,从而提高效率;提供的库包含许多标准子程序,具有较强的数据处理能力;已编好程序可容易地植入新程序,因为它具有方便的模块化编程技术。一、Cx51基本知识Cx51的一般格式类型函数名(参数表)参数说明;{

数据说明部分;执行语句部分;}一个函数在程序中可以三种形态出现:函数定义、函数调用和函数说明。C51中函数分为两大类,一类是库函数,一类是用户定义函数。库函数是C51在库文件中已定义的函数用户定义函数函数是用户自己定义、自己调用的一类函数一、Cx51基本知识Cx51程序的编程要点C语言是由函数构成的一个C源程序至少包含一个函数(main),也可以包含一个main函数和若干其它函数一个函数由两部分组成:函数说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。一个函数名后面必须跟一个圆括号,函数参数可以没有,如main()。函数体,即函数说明部分下面的大括号{…}内的部分。如果一个函数内有多个大括号,则最外层的一对{}为函数体的范围。一、Cx51基本知识

函数体一般包括:变量定义。执行部分。由若干语句组成。一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何。C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。可以用/*…*/对C程序中的任何部分作注释。二、Cx51数据与运算Cx51的数据类型数据——具有一定格式的数字或数值数据类型——数据的不同格式数据结构——数据按一定的数据类型进行的排列、组合、架构C5l提供的数据结构是以数据类型的形式出现的,C51的数据类型如下所示。位型(bit)字符型(char)整型(int)长整型(1ong)浮点型(float)双精度浮点型(double)数组类型(array)结构体类型(struct)共用体(union)枚举(enum)指针类型空类型二、Cx51数据与运算常量与变量C语言中的数据有常量变量之分。常量——在程序运行的过程中,其值不能改变的量称为常量。与变量一样,常量可以有不同的数据类型。如0,1,2,一3为整型常量;4.6,一1.23等为实型常量;’a’,‘b’为字符型常量。可以用一个标识符号代表一个常量,例如下面程序中的CONST。变量——在程序运行中,其值可以改变的量称为变量。一个变量主要由两部分构成:一个是变量名,一个是变量值。每个变量都有一个变量名,在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。二、Cx51数据与运算例如:

#defineCONST60main(){

int

variabe,result;variable=20;result=variable*CONST;

printf(”result=%d\n”,result);

}

程序运行结果:

result=1200三、Cx51数据的存储类型与805l存储器结构8051系列单片机存储器结构8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并有各自的寻址机构和寻址方式。8051系列单片机在物理上有四个存储空间:片内程序存储器空间;片外程序存储器空间;片内数据存储器空间;片外数据存储器空间。三、Cx51数据的存储类型与805l存储器结构Cx51存储类型与805l存储空间对应关系当使用存储类型data,bdata定义常量和变量时,C5l编译器会将它们定位片内数据存储区中(片内RAM),这个存储区根据8051单片机CPU的型号不同,其长度分别为64,128,256或512字节。三、Cx51数据的存储类型与805l存储器结构访问片内数据存储器(data,bdata,idata)比访问片外数据存储器(xdata,pdata)相对要快一些,因此可将经常使用的变量置于片内数据存储器,而将规模较大的,或不常使用的数据置于片外数据存储器中。C51存储类型及其大小和值域如表3—3所示。三、Cx51数据的存储类型与805l存储器结构变量的存储类型定义举例:chardatavarl;/*iteml*/bitbdataflags;/*item2*/iteml:字符变量charvarl被定义为data存储类型,C51编译器将把该变量定位在8051片内数据存储区中(地址:00H—0FFH)。

item2:位变量flags被定义为bdata存储类型,C51编译器将把该变量定位在805l片内数据存储区(RAM)中的位寻址区(地址:20H一2FH)。

三、Cx51数据的存储类型与805l存储器结构8051特殊功能寄存器(SFR)及其Cx51定义关键字“sfr”:sfr

sfr-name‘=’int

constantf’;’sfrSCON=0x98;sfrTMOD=0x89;关键字“sbit”

sfrPSW=0xD0;

sbitOV=PSW^2;//方法一

sbitCY=PSW^7;

sbitOV=0xD0^2;//方法二

sbitCY=0xD0^7;

sbitOV=0xD2;//方法三

sbitCY=0xD7;四、Cx51运算符及其表达式算术运算符十(加法运算符,或正值符号);一(减法运算符,或负值符号);*(乘法运算符);/(除法运算符);%(模(求余)运算符。例如9%5结果是9除以5所得的余数4)。优先级和结合性:算术运算符的优先级规定为:先乘除模,后加减,括号最优先。算术运算符的结合性规定为自左至右方向,又称为“左结合性”。

四、Cx51运算符及其表达式关系运算符<(小于)>(大于)<=(小于或等于)>=(大于或等于)==(测试等于)!=(测试不等于)关系运算符的优先级前四种关系运算符(<,>,<=,>=)优先级相同,后两种也相同;前四种优先级高于后两种。关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。关系运算符的结合性为左结合。四、Cx51运算符及其表达式关系表达式用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式及字符表达式等)连接起来的式子,称为关系表达式。关系表达式的结果:关系运算符总是二目运算符,它作用在运算对象上产生的结果为一个逻辑值,即真或假。C语言以1代表真,以0代表假。例:若a=4,b=3,c=1则

a>b的值为“真”,表达式值为1;

b十c<a的值为“假”,表达式值为0;

(a>b)==c的值为“真”,表达式值为1(因为a>b值为1,等于c值);d=a>b,d的值为1;f=a>b>c,由于关系运算符的结合性为左结合,故a>b值为1;而1>c值为0,故f值为0。四、Cx51运算符及其表达式逻辑运算符

&&逻辑与(AND);||逻辑或(OR);!逻辑非(NOT)。C5l逻辑运算符与算术运算符、关系运算符、赋值运算符之间优先级的次序(非)运算符优先级最高,算术运算符次之,关系运算符再次之,&&和||再再次之,最低为赋值运算符。

逻辑表达式的结合性为自左向右。逻辑表达式的值一个逻辑量“真”或“假”。以0代表假,以1代表真。四、Cx51运算符及其表达式

位逻辑运算符&按位与;|按位或;^按位异或;~按位取反;<<位左移;>>位右移。位左移、佐右移运算符<<、>>,用来将一个数的各二进制位的全部左移或右移若干位;移位后,空白位补0,而溢出的位舍弃。

除了按位取反运算符以外,以上位操作运算符都是两目运算符,即要求运算符两侧各有一个运算对象。位运算符只能是整型或字符型数。不能为实型数据。四、Cx51运算符及其表达式自增减运算符十十i,一一i(在使用i之前,先使i值加/减1)

i十十,i一一(在使用i之后,再使i值加/减1)例1若i值原来为5,则j=十十i;j值为6,i值也为6;j=i十十;j值为5,i值为6。注意:自增运算(十十)和自减运算(一一)只能用于变量而不能用于常量表达式。(十十)和(一一)的结合方向是“自右向左”。四、Cx51运算符及其表达式复合运算符及其表达式凡是二目运算符,都可以与赋值运算符“=”一起组成复合赋值运算符。C51共提供了10种复合赋值运算符。即;十=,一=,*=,/=,%=,<<=,>>=,&=,^=,|=。采用这种复合赋值运算的目的,是为了简化程序,提高C程序编译效率。a十=b相当于a=a十b。a%=b相当于a=a%b。a一=b相当于a=a—b。a<<=8相当于a=a<<8。a*=b相当于a=a*b。a>>=8相当于a=a>>8。a/=b相当于a=a/b。PORTA&=0xf7相当于PORTA=PORTA&0xf7其作用是使用”&”位运算,将PORTA.3位置0。五、Cx51流程控制语句顺序结构顺序结构是一种最基本,最简单的编程结构。在这种结构中,程序由低地址向高地址顺序执行指令代码。如图所示,程序先执行A操作,再执行B操作,两者是顺序执行的关系。

A

B五、Cx51流程控制语句选择结构在选择结构中,程序首先对一个条件语句进行测试。当条件为“真”(True)时,执行一个方向上的程序流程;当条件为“假”(False)时,执行另一个方向上的程序流程。如图所示,P代如表一个条件,当P条件成立(为真)时,执行A操作,否则执行B操作。但两者只能选择其一。两个方向上的程序流程最终将汇集到一起,从一个出口中退出。常见的选择语句有:if,elseif语句。

A

Bp真假五、Cx51流程控制语句常用选择结构语句及其格式If(表达式){语句}If(表达式){语句1}else{语句2}if(表达式1){语句1;}elseif(表达式2){语句2;}elseif(表达式3){语句3;}......else(表达式n){语句n;}else{语句m;}

五、Cx51流程控制语句if语句的嵌套在if语句中又含有一个或多个if语句,这种情况称为if语句的嵌套。if语句的嵌套的基本形式如下:五、Cx51流程控制语句循环结构所有的分支结构都使程序流程一直向前执行(除非使用了某种goto语句)使用循环结构则可使分支流程重复地进行循环结构两种结构:“当”(while)型循环结构“直到”(dowhile)型循环结构

五、Cx51流程控制语句“当”(while)型循环结构当判断条件P成立(为“真”)时,反复执行操作A,直到P条件不成立(为“假”)时,才停止循环。p

A真假五、Cx51流程控制语句直到”(dowhile)型循环结构先执行操作A,再判断条件P,若P成立(为“真”),则再执行A,此时反复执行操作A,直到P为假为止。

p

A真假五、Cx51流程控制语句循环结构语句及格式while语句while(表达式){语句/*循环体*/}dowhile语句

do{语句;}/*循环体*/while(表达式);

for循环语句for(表达式1;表达式2;表达式3){语句;}/*循环体*/五、Cx51流程控制语句分支结构由选择结构可以派生出另一种基本结构:多分支结构语句格式:

switch(表达式){case常量表达式1:{语句1;}break;case常量表达式2:{语句2;}break;:case常量表达式n:{语句n;}break;default:{语句n+1;}}六、Cx51的数组数组的基本概念数组是具有一定顺序关系的若干相同类型变量的集合数组具有有序性数组具有同一性数组具有整体性组成数组的每个分量称为数组的元素;数组的维数(一维,二维,三维)六、Cx51的数组一维数组的定义类型说明符数组名[整型表达式]

例charch[10]

定义了一个一维字符型数组,它有10个元素,每个元素由不同的下标表示,分别为ch[0],ch[1],ch[2],……,ch[9]。注意:数组的第一个元素的下标为0而不是1,即数组的第一个元素是ch[0]而不是ch[1],而数组的第十个元素为ch[9]。六、Cx51的数组一维数组的初始化在定义数组时,若赋初值,则数组的全部元素被缺省地赋值为0在定义数组时对数组的全部元素赋予初值例int

idataa[6]={0,1,2。3,4,5};在上面进行的定义和初始化中,将数组的全部元素的初值依次放在花括号内。这样,在初始化后,a[0]=0,a[1]=1,aL2]=2,…·,a[5]=5。只对数组的部分元素初始化例int

idataa[10]={0,l,2,3,4,5};上面定义的a数组共有10个元素,但花括号内只有6个初值,则数组的前6个元素被赋予初值,而后4个元素的值为0。六、Cx51的数组二维数组定义类型说明符数组名[常量表达式][常量表达式];例inta[3][5];定义了3行5列共15个元素的二维数组(a[0][0]-a[2][4])。二维数组的存取顺序是:按行存取先存取第一行元素的第0列,1列,2列,……,直到第一行的最后一列。然后返回到第二行开始,再取第二行的第0列,1列,……,直到第=行的最后一列。……,如此顺序下去,直到最后一行的最后一列。六、Cx51的数组二维数组的初始化对数组的全部元素赋初值:分行给二维数组的全部元素赋初值例inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};将所有数据写在一个花括号内,按数组的排列顺序对各元素赋初值例inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};对数组的部分元素赋初值例

inta[3][4]={{1},{},{5,61}};赋值后的数组元素如下:[1000][0000][5600]六、Cx51的数组字符数组基本类型为字符类型一个元素存放一个字符,所以可以用字符数组来存储长度不同的字符串。字符数组的定义字符数组的定义与前面所讲的数组定义的方法类似。如chara[l0];定义a为一个有10个字符的一维字符数组。符数组置初值字符数组置初值的最直接的方法是将各字符逐个赋给数组中的各个元素。

chara[l0]={“BEIJING”};六、Cx51的数组数组的应用--查表例:#defineucharunsignedchar

ucharcodetempt[]={32,34,36,37,39,41};/*数组,设置在EPROM中,长度为实际输入的数值数*/

uchar

ftoc(uchar

degc){returntempt[degc];/*返回华氏温度值*/

}main(){x=ftoc(5);/*得到5℃的华氏温度值*/}

七、Cx51的指针指针的基本概念一个变量的地址称为该变量的指针。若有一个变量专门用来存放另一个变量的地址(即指针),则该变量称为指向变量的指针变量(简称指针变量)。指针变量的值是指针。例:对于下图中变量i而言,其指针就是2000。我们可以说变量i的指针(地址)为2000,不能说i的指针变量是2000。变量i的指针变量应该是i_pointer,i_pointer的值是2000。

i_pointer200062000i七、Cx51的指针指针变量的定义类型识别符*指针变量名例:

int*ap;float*pointer;注意:

指针变量名前面的“*”号表示该变量为指针变量。但指针变量名应该是ap,pointer,而不是*ap和*pointer。七、Cx51的指针指针变量的引用指针变量的引用是通过取地址运算符&来实现的例:#defineucharunsignedchar

ucharcount;

uchar*x;/*x指向字符型变量*/

uchar

xdata*y;/*存在外部数据RAM*/

uchardata*z;/*存在内部数据RAM*/

ucharcode*w;/*存在程序代码空间*/

uchardata*xdata

zz;/*外部RAM指针指向内部RAM数据*/x=&cowrit;/*得变量的地址即指针*/*x=0xfe;/*指针变量赋值*/七、Cx51的指针指向数组的指针变量定义一个数组a[10]和一个指向数组的指针变量aap:

inta[10];/*定义a为包含10个整型元素的数组*/

int*app;/*定义app为指向整型数据的指针*/

引用app=&a[0];

数组a的第一个元素a[0]的地址就赋给了指针变量app,也就是将指针变量app指向数组a的第0号元素a[0]。app=a数组名可以代表数组的首地址,即第一个元素的地址。七、Cx51的指针通过指针引用数组元素引用数组元素,可使用数组下标法如a[3],也可以使用指针法指针法能使目标程序代码效率高(占用内存少,运行速度快)通过指针引用数组元素的方法如果指针变量app的初值为&a[0]。app十i和a十i就是数组元素a[i]的地址*(app十i)或*(a十i)是app十i或a十i所指向的数组元素a[i]指向数组的指针变量可以带下标如app[i]与*(app十i)等价。八、Cx51函数函数的基本概念C语言程序是由一个个函数构成的必有一个是主函数main()一个C程序的执行从main()函数开始调用其它函数后返回到主函数main()中最后在主函数main()中结束整个C程序的运行。函数的分类主函数main()普通函数标准库函数用户自定义函数。八、Cx51函数

函数的定义

无参数函数的定义返回值类型标识符函数名(){函数体语句}程序举例#include<stdio.h>

func(){printf(“FunctionInfuncrespondthecallofMain\n”);}main(){printf(“FunctionInMainCallsAFunctioninfunc\n”)

func();}八、Cx51函数

有参数函数的定义返回值类型识别符函数名(形式参数列表)形式参数说明{函数体语句}例:求两个数的最大公约数#include<stdio.h>

int

gcd(u,v)

intu,v;{inttemp;

while(v!=0){temp=u%v;u=v;v=temp;}

return(u);}main(){intresult,a=150,b=35;

printf(”a=%d,b=%d”,a,b);result=gcd(a,b);

printf(”Thegcdof%dand%dis%d\n”,a,b,result);}‘

程序运行结果:

a=150b=35Thegcdofl50and35is5八、Cx51函数函数的参数和函数值函数之间的参数传递,由函数调用时,主调用函数的实际参数与被调用函数的形式参数之间进行数据传递来实现。被调用函数的最后结果由被调用函数的return语句返回给调用函数。

形式参数和实际参数

形式参数在定义函数时,函数名后面括号中的变量名称为“形式参数”,简称形参。实际参数:

在函数调用时,主调用函数名后面括号中的表达式称为“实际参数”,简称实参。八、Cx51函数函数调用的一般形式函数名(实际参数表列);对于有参数型函数,若包含多个实际参数,应将各参数之间用逗号分隔开主调用函数的数目与被调用函数的形式参数的数目应该相等实际参数与形式参数按实际顺序一一对应传递数据如果调用的是无参数函数,则实际参数表可以省略,但函数名后面必须有一对空括号。八、Cx51函数函数调用的方式函数调用语句把被调用函数名作为主调用函数中的一个语句。例:Print_message();并不要求被调用函数返回结果数值,只要求函数完成某种操作。函数结果作为表达式的一个运算对象例result=2*gcd(a,b);被调用函数以一个运算对象的身份出现在一个表达式中要求被调用函数带有return语句,以便返回一个明确的数值函数参数被调用函数作为另一个函数的实际参数。例m=max(a,gcd(u,v));八、Cx51函数函数的嵌套函数的定义都是相互独立的即在定义函数时,一个函数的内部不能包含另一个函数允许嵌套调用函数。函数的递归调用在调用一个函数的过程中,又直接或间接地调用该函数本身九、现场实践环节任务一用数码管显示数字的系统任务二用1602字符液晶显示数字的系统任务三用12864液晶显示汉字任务一用数码管显示数字的系统教学目标:掌握数码管的结构、分类掌握静态和动态驱动的方法控制数码管显示掌握C语言编写程序的方法一、LED显示器结构LED显示器由若干个发光二极管组成。发光二极管导通时便会发亮,控制不同组合的二极管导通,就可以显示出不同的字符。常用的LED显示器:七段码LED显示器阵列式LED显示器二、七段LED显示器常用的七段LED显示器的结构:

(a)外形(b)共阳极显示器(c)共阴极显示器数字、字符和对应的段码关系(共阴极)二、七段LED显示器

静态显示方式

将共阴极LED显示器的阴极接地,将其8位段选线与一个8位并行口相连。8位并行口输出一次电信号后就保持不变,使相应的发光二极管恒定地导通或截止,显示内容也就会保持不变。

4位静态LED显示电路二、七段LED显示器动态显示方式

用扫描的方式一位一位地轮流点亮LED显示器。在实际电路中,将多位LED显示器的8位段选线连在一起,只用一个8位并行口控制显示内容。而每一位LED显示器的共阴极分别由各自的控制线控制是否可以显示,如果有N个LED显示器,就需要N条控制线。下图为8位LED动态显示电路,称8位并行口输出为段选码,而控制每个LED显示器是否显示的代码称为位选码。二、七段LED显示器

8位LED动态显示电路

三、LED阵列虽然七段LED显示器应用很广,结构也比较简单,但它能够显示的字符较少。采用阵列式LED(或称点阵式LED)显示器能够很好地显示各种字符。目前常用的阵列式LED显示器有5×4(5行4列)、7×5、9×7等几种,行列数目越多,分辨率就越高,则显示效果越好。7×5阵列式LED显示器的电路如下图所示。该电路采用计数器步进选列。欲显示数据的字符及计数器的输出信号分别从字符ROM的A0~A7和A8~A10输入,以确定数据代码所在ROM单元中的地址。假设数据是5,会从图中表示的字符ROM中读出5的代码,并发送给阵列LED。计数器通过译码器送出列信号C0~C4,当计数器从0起始计数到4时,第0列至第4列的行代码通过R0~R6依次被读出。然后重复这一过程。三、LED阵列7×5阵列式LED显示电路

四、现场实践环节在智能电子开发板上用数码管显示学号任务二用1602字符液晶显示数字的系统教学目标:LCD1602字符液晶的引脚和硬件接口LCD1602字符液晶的指令集LCD1602字符液晶显示字符的方法一、LCD显示器结构LCD是一种被动式显示器

LCD中最主要的物质就是液晶

一、LCD显示器结构LCD种类根据光电效应分类电场效应类扭曲向列效应(TN)类宾主效应(GH)类超扭曲效应(STN)电流效应类电热写入效应类热效应类。普遍采用的是TN型和STN型液晶器件根据显示方式和内容分类笔段型点阵型字符型液晶显示模块图形液晶显示模块

二、1602点阵字符型LCD模块1602外形二、1602点阵字符型LCD模块1602接口8位数据总线:D0~D7三个控制端口:

RS,R/W,EN编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4RS数据/命令选择端(H/L)12D5DataI/O5R/W读写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极二、1602点阵字符型LCD模块1602模块和单片机的连接二、1602点阵字符型LCD模块1602的标准字符库内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形阿拉伯数字英文字母的大小写常用的符号日文假名每一个字符都有一个固定的代码数字与字母同ASCII码兼容内部还有自定义字符(CGRAM)用于存储自已定义的字符二、1602点阵字符型LCD模块1602模块的指令和数据传送通过RS和RW确定传送方向和传送对象控制信号结果RSRW00写命令01读状态10写数据11读数据二、1602点阵字符型LCD模块1602模块的指令和数据传送

指令RSRWD7D6D5D4D3D2D1D01清屏00000000012光标返回000000001*3输入模式00000001I/DS4显示控制0000001DCB5光标/字符移位000001S/CR/L**6功能00001DLNF**7置字符发生器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志和地址01BF计数器地址10写数据到指令7.8所设地址10要写的数据11从指令7.8所设的地址读数据11读出的数据二、1602点阵字符型LCD模块1602读写时序写操作

二、1602点阵字符型LCD模块1602读写时序读操作

二、1602点阵字符型LCD模块1602模块的初始化LCD1602液晶模块在正常显示前必须进行初始化

延时15ms写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)(以后每次写指令、读/写数据操作之前均需检测忙信号或延时足够长的时间)写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令OCH:显示开及光标设置三、现场实践环节在智能电子开发板上连接1602液晶显示模块,并显示学号和姓名(拼音)任务三用12864液晶显示汉字教学目标12864液晶的引脚功能和硬件接口12864液晶的指令集学习汉字的显示方法

一、图形液晶显示模块简介

分辨率(像素)128×64,320×240,256×128,640×480显示方式纯图形图形+字符控制芯片T6963CST7920SED1520/1521/1335S6B0108/KS0108接口并口串口一、图形液晶显示模块JDL12864外形一、图形液晶显示模块内部结构一、图形液晶显示模块外部接口一、图形液晶显示模块和单片机的连接一、图形液晶显示模块显示地址确定一、图形液晶显示模块指令一、图形液晶显示模块时序写操作一、图形液晶显示模块读操作

一、图形液晶显示模块软件流程二、现场实践环节在智能电子开发板上连接12864图形液晶显示模块,并显示班级和姓名(汉字)项目四任务任务一、

简单电子钟

任务二、具有时间设置和闹铃功能的电子钟

任务三、数字万年历的制作

项目四:电子钟设计与仿真

数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。

本项目采用智能芯片机设计了一个具有LED显示(或LCD显示)、键盘输入的时钟系统,使其具有时、分、秒的实时显示和调整功能,任务一、简单电子钟

项目要求:

1)自动计时,显示24小时制时间,由6位LED显示器显示时、分、秒。

2)起始时间为:00:00:00。知识链接:中断基本概念及其使用方法定时计数器的使用显示电路的设计任务实施环境:

硬件:智能最小系统软件:KeilC集成开发环境,Proteus仿真软件本讲要点:

中断的基本概念中断响应过程定时计数器基本概念定时计数器的使用中断的基本概念中断

所谓中断,是指当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求,CPU暂时中止现行程序,转去对发生的更紧迫事件进行处理,处理完毕后,CPU自动返回原来的程序继续执行。

中断源

中断源是指任何引起计算机中断的事件,一般一台机器允许有许多个中断源中断的基本概念智能芯片(8051单片机)的中断源:外部中断请求0,由INT0(P3.2)输入;外部中断请求1,由INT1(P3.3)输入;片内定时器/计数器0溢出中断请求;片内定时器/计数器1溢出中断请求;片内串行口发送/接收中断请求。

中断的基本概念中断矢量:

MCS-51单片机的5个中断源分别对应有各自的中断服务程序入口地址——中断矢量中断涉及的几个环节①中断源②中断申请③CPU开放中断④保护现场⑤中断服务⑥恢复现场⑦中断返回(甲方)(甲方发出信号提出申请)(乙方同意传送)(安排好当前的工作)(响应甲方的要求)(服务完成后,返回……)(继续做打断前的工作)中断的控制

CPU识别中断申请的依据:

CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。中断的控制主要实现中断的开关管理和中断优先级的管理。这个管理主要通过对特殊功能寄存器IE和IP的编程实现。

中断的控制中断允许寄存器IE(0A8H)EA:CPU开/关中断控制位

=0CPU关中断=1CPU开中断EX0,EX1:外部中断0,1的中断允许位。

=0外部中断0,1关中断=1外部中断0,1开中断ET0,ET1:定时器/计数器0,溢出中断允许位。

=0T/C0,T/C1关中断=1T/C0,T/C1开中断

ES:串行口中断允许位。

=0串行口关中断=1串行口开中断

ET2:定时器/计数器2(T/C2)溢出中断允许位。

=0T/C2关中断=1T/C2开中断

8051复位时,IE被清“0”,此时CPU关中断,各中断源的中断也都屏蔽。

中断的控制中断优先级控制寄存器IP(0B8H)PX0,PX1:外部中断0,1中断优先级控制位。

=0低优先级

=1高优先级PT0,PT1:定时器/计数器0,1中断优先级控制位。

=0低优先级

=1高优先级

PS:串行口中断优先级控制位。

=0低优先级

=1高优先级外部中断0高定时器/计数器0外部中断1定时器/计数器1串行口中断低8051复位时,硬件优先级:

中断的控制定时器控制寄存器TCON(88H)TCON:低4位管理外部中断IE0/IE1:外部中断申请标志位:

=0:没有外部中断申请;

=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式选择位:

=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效.中断响应

CPU在响应中断请求时,由硬件自动形成转向与该中断源对应的服务程序人口地址,这种方法为硬件向量中断法。各中断源的中断服务程序入口地址如下:

编号中断源人口地址0外部中断00003H1定时器/计数器0000BH2外部中断10013H3定时器/计数器1001BH4串行口中断0023H中断响应Cx51编译器支持在C源程序中直接开发中断程序,因此减轻了用汇编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论