《工信版(中职)单片机应用技术--提高篇(任务3-4)电子课件.ppt》由会员分享,可在线阅读,更多相关《工信版(中职)单片机应用技术--提高篇(任务3-4)电子课件.ppt(142页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、YCF(中职)单片机应用技术-提高篇(任务3-4)电子课件单片机应用技术单片机应用技术(提高篇提高篇)任务三任务三 制作电子秒表制作电子秒表v958,男子100米世界纪录。1287,男子110米栏世界纪录。在赛跑比赛项目中经常用秒表来计时,它精确记录了运动员完成比赛所用的最短时间。下面我们将循序渐进地用单片机来完成一个秒表制作的实例。项目项目6 在数码管上显示在数码管上显示“123456”v项目描述:项目描述:通过编写程序,使数码管上显示“123456”v能力培养目标能力培养目标会编写八段数码管显示程序会使用protues运行程序能掌握一维数组的应用掌握动态显示的方法v学习组织形式学习组织形式
2、采取以小组为单位互助学习,有条件的每人一台电脑,条件有限的可以两人合用一台电脑。用仿真实现所需的功能后如果有实物板(或自制硬件电路)可把程序下载到实物上再运行、调试,学习过程鼓励小组成员积极参与讨论。v项目实施过程项目实施过程创建硬件电路v电路说明电路说明51单片机一般采用+5V电源供电51单片机的最小系统如前面章节所示。显示部分采用8位一体的共阴数码管。74HC573为数据锁存器。U1控制段选,U4控制位选。程序编写程序编写v程序编写编写的程序如下#include#define uint unsigned int#define uchar unsigned charsbit DX=P24;s
3、bit WX=P25;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;程序编写程序编写v程序编写编写的程序如下void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-)程序编写程序编写v程序编写编写的程序如下void disp()DX=1;WX=0;P0=table1;DX=0;WX=1;P0=0 xdf;delay(2);P0=0 xff;DX=1;WX=0;P0=table2;程序编写程序编写v程序编写编写的程序如下DX=0;WX
4、=1;P0=0 xef;delay(2);P0=0 xff;DX=1;WX=0;P0=table3;DX=0;WX=1;P0=0 xf7;delay(2);P0=0 xff;程序编写程序编写v程序编写编写的程序如下DX=1;WX=0;P0=table4;DX=0;WX=1;P0=0 xfb;delay(2);P0=0 xff;DX=1;WX=0;P0=table5;程序编写程序编写v程序编写编写的程序如下DX=0;WX=1;P0=0 xfd;delay(2);P0=0 xff;DX=1;WX=0;P0=table6;DX=0;WX=1;P0=0 xfe;delay(2);P0=0 xff;程序
5、编写程序编写v程序编写编写的程序如下void main()while(1)disp();v创建程序文件并生成.HEX文件打开MEDWIN,新建项目文件“P6”,创建程序文件“P6_1.C”,输入上述程序,然后按工具栏上的“产生代码并装入”按钮(或按CTRL+F8),此时将在屏幕的构建窗口中看到下如图6-2所示的信息,它代表编译没有错误、也没有警告信息,且在对应项目文件夹的OUTPUT子目录中已生成目标文件“P6.HEX”。v(四)运行程序观察结果在Proteus中打开项目6设计电路“proj6.dsn”,把已编译所生成的HEX文件下载到单片机中,同时观察结果。如图6-3所示。如果有实物板可把程
6、序下载到实物上再运行、调试。也可以根据图6-1提供的原理图与器件清单在万能板上搭出电路后再把已编译所生成的HEX文件下载到单片机中。然后再调试运行。v程序运行图v数码管常用来显示数字和字母,按结构分为共阴数码管和共阳数码管两种,如图6-4所示。6.1 数码管结构6.1.1 数码管结构在单片机构成的实际应用电路中需要显示数字等信息时,所采用的LED数码管通常是N位一体的,如二位一体、四位一体等,如图6-5所示。这样可以简化电路、节省单片机的I/O线。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线按同类各自连接在一起,独立的公共端可以控制多位一体中的哪一个数码管点亮。我们把连接在
7、一起的段线称为“段选线”,而把公共端称为“位选线”,这样通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。6.1.2 数据锁存器在单片机应用系统中为了节约使用单片机的I/O资源,通常在电路中使用了数据锁存器,本例中使用74HC573,即在数码管显示时采用分时复用的方法,利用P0口既作为段选线又作为位选线,通过数据锁存器将单片机发来的数据加以锁存保持,以持续快速地刷新数码管的显示。图6-6为数据锁存器74HC573的功能图及接线图。由于8051单片机的I/O一般就是指P0、P1、P2、P3端口,在实际使用中可能还要使用A/D、D/A等资源,P3端口还要作为第二功能使用,所以I/O端
8、口就显得有些捉襟见肘了。我们可以采用让I/O端口分时复用的方法,以达到节省I/O资源的目的。从表中可以看出,要让74HC573具备锁存功能,则它的输出允许 应接低电平,当锁存端LE为高电平时输出端Q就跟随数据输入端D的数据,而当锁存端LE为低电平时输出端Q则保持之前的状态从而实现数据的锁存。6.2 数码管的显示原理6.2.1 数码管静态显示6.2.2 数码管动态显示采用动态显示方式比较节省I/O端口,硬件电路也较静态显示方式简单,但其亮度不如静态显示方式,程序较静态显示方式复杂,而且在显示位数较多时,CPU要依次扫描,占用CPU较多的时间。在上面的程序中,我们要在某一位上显示一个数字,则使用如
9、下语句:6.3 6.3 数组的使用数组的使用6.3.1 数组数组是有序数据的集合,数组中的每一个元素都属于同一个数据类型,用一个统一的数组名和元素号来唯一地确定数组中的元素。数组又可以分为一维数组、二维数组、三维数组等。在这里,我们先学习一维数组。一维数组的定义:一维数组的定义:类型说明符类型说明符 数组名数组名数组长度数组长度=元素元素1,元素,元素2,元素元素N;说明:1.数组名命名规则和变量名相同,遵循标识符命名规则。2.数组名后是用方括号括起来的常量表达式,它表示数组长度,不能用圆括号。3.花括号内表示定义的各个元素初值,各元素初值之间用逗号隔开。一维数组的引用:数组必须先定义后使用,
10、C51语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素引用形式为:数组元素引用形式为:数组名数组名元素号元素号元素号从元素号从0开始计开始计6.3.2 单片机中的存储器单片机的存储器可以分为片内存储器和片外存储器两种。因为片外存储器是需要另外扩展的,而且现在使用也不多,所以在此就不再赘述。我们只讨论单片机的内部存储器。单片机的内部存储器又可分为数据存储器RAM和程序存储器ROM。一、数据存储器数据存储器主要用作缓冲和数据暂存,如用于存放运算中间结果以及设置特征标志等。MCS-51系列单片机的内部数据存储器存储空间较小,它是系统的宝贵资源,要合理使用。MCS-51系列单片机的内部RA
11、M共有256个字节单元,按其功能划分为两部分:低128字节(00H7FH)和高128字节(80HFFH)地址空间。图6-10所示为低128字节单元的配置图。低128字节单元是单片机的真正RAM存储器,按其用途划分为寄存器区、位寻址区和用户RAM区三个区域。我们在项目2中学习了C51常用数据类型,接触到了位类型bit,此类数据就是存储在位寻址区中,而在C51中定义的变量等,它们的作用域就是在这些RAM中。高128字节单元是供给专用寄存器使用的,因这些寄存器的功能已作专门规定,故称之为专用寄存器,也称为特殊功能寄存器(Special Function Register)。这些特殊功能寄存器就是我们
12、之前在介绍头文件时接触到的东西,它们在C51中的数据类型是sfr或者是sbit型的二、程序存储器程序存储器用于存放程序及表格常数。也就是说,那些不需要经常变动的数据就存放在ROM中,这样就节约了对RAM的使用。在前面定义存放字型码的数组中就使用了code,它就代表这个数组中的元素存放在ROM中。因为程序中那些数码管共阴显示的段码值是不变化的,因此可以把它放在ROM中。单片机的ROM比RAM大多了,一般51有4KB、52有8KB、54有16KB。在程序存储器中,某些特定的单元已分配给系统使用,比在程序存储器中,某些特定的单元已分配给系统使用,比如如0000H单元是系统复位入口,单片机复位后,单元
13、是系统复位入口,单片机复位后,CPU总是总是从从0000H单元开始执行程序。此外,单元开始执行程序。此外,0003H002AH单元均单元均匀地分为五段,被保留用于五个中断服务程序或中断入口。匀地分为五段,被保留用于五个中断服务程序或中断入口。具体地址分配见表具体地址分配见表6-4所示。所示。【实战提高】1.以图6-1设计电路为依据(可直接在项目6所在目录下打开设计电路文件“proj6_1.DSN”),要求能在数码管上显示自己的班级-学号,如13E01-36。请编写程序、编译和仿真运行。2.以图6-1设计电路为依据(可直接在项目6所在目录下打开设计电路文件“proj6_1.DSN”),要求能在数
14、码管上显示今天的日期,如2012.08.16。编写程序、编译和仿真运行。二选择题1.若要使数据锁存器74HC573具备数据锁存功能,除了将其输出允许 接低电平,还应使其锁存端LE接()。A高电平B低电平C任意D以上都可以。2.以下描述正确的是()。A.数组长度是用圆括号括起来的。B.数组中的每一个元素都属于同一个数据类型。C.定义数组中各个元素时,中间用分号隔开。D.数组元素引用时,最大元素号即表示数据长度。3.在定义数组uchar code tab=a,b,c,d;后以下描述正确的是()。A.数组长度是3。B.数组的第3号元素是字符d。C.该数组将被存放在数据存储器中。D.该数组定义是错误的
15、。项目项目7 秒脉冲的产生秒脉冲的产生v项目描述:项目描述:通过编写程序,使发光二极管以1秒速率闪烁(频率为2Hz)v能力培养目标能力培养目标会编写MCS-51单片机定时器中断程序能理解MCS-51单片机定时器相关知识v学习组织形式学习组织形式采取以小组为单位互助学习,有条件的每人一台电脑,条件有限的可以两人合用一台电脑。用仿真实现所需的功能后如果有实物板(或自制硬件电路)可把程序下载到实物上再运行、调试,学习过程鼓励小组成员积极参与讨论。v项目实施过程项目实施过程创建硬件电路图7-1 项目7电路原理图v电路说明电路说明51单片机一般采用+5V电源供电51单片机的最小系统如前面章节所示。程序编
16、写程序编写v程序编写编写的程序如下#include#define uchar unsigned char#define uint unsigned intsbit VD1=P10;uchar cnt;void init()TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;TR0=1;程序编写程序编写v程序编写编写的程序如下void main()init();while(1);void timer0()interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;if
17、(+cnt=20)cnt=0;VD1=VD1;(三)创建程序文件并生成.HEX文件打开MEDWIN,新建项目文件“P7”,创建程序文件“P7_1.C”,输入上述程序,然后按工具栏上的“产生代码并装入”按钮(或按CTRL+F8),此时将在屏幕的构建窗口中看到下如图7-2所示的信息,它代表编译没有错误、也没有警告信息,且在对应项目文件夹的OUTPUT子目录中已生成目标文件“P7.hex”。(四)运行程序观察结果在Proteus中打开项目7设计电路“proj7.dsn”,把已编译所生成的HEX文件下载到单片机中,同时观察结果。如果有实物板可把程序下载到实物上再运行、调试。也可以根据图7-1提供的原理
18、图与器件清单在万能板上搭出电路后再把已编译所生成的HEX文件下载到单片机中。然后再调试运行。7.1 7.1 定时器定时器/计数器的结构与原理计数器的结构与原理7.1.1 定时/计数器结构8051单片机内部有两个16位可编程定时/计数器,称为定时器0(T0)和定时器1(T1),可通过编程来选择其作为定时器用或作为计数器用。此外,工作方式、定时时间、计数值、启动、中断请求等都可以由程序设定,其逻辑结构如图7-3所示。定时器0(T0)、定时器1(T1)是16位加法计数器,分别由两个8位的专用寄存器组成:定时器0(T0)由TH0和TL0组成,定时器1(T1)由TH1和TL1组成。当定时器0或定时器1用
19、作定时器时,对内部机器周期脉冲计数,由于机器周期是定值,时间也随之确定。当定时器0或定时器1用作计数器时,对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加1。实质上,8051单片机的定时器/计数器就是加1计数器。TMOD、TCON与定时器0、定时器1间通过内部总线及逻辑电路连接,TMOD用于设定定时器的工作方式,TCON用于控制定时器的启动与停止。7.1.2 定时/计数器工作原理 从定时/计数器的逻辑结构图可知,定时定时/计数器实质上就是一计数器实质上就是一个加个加1计数器计数器,它主要的任务就是对机器周期或是外部输入的脉冲进行计数的操作。当定时/计数
20、器设定为定时工作方式时,计数器对内部机器周期进行计数,每过一个机器周期,计数器加1,直到计满溢出。定时器的定时时间与系统的振荡频率紧密相关。因MCS-51单片机的一个机器周期由12个振荡脉冲组成,所以,计数频率fc=fosc/12。如果单片机系统采用12MHz晶振,则计数周期T=1s,这是最短的定时周期,改变定时器的初值可获取各种定时时间。当定时/计数器设定为计数工作方式时,计数器对来自输入引脚T0(P3.4)或T1(P3.5)的外部信号计数,外部信号的下降沿将触发计数。每检测到一个外部信号由1到0的负跳变,计数器就加1。CPU检测一个1到0的负跳变需要两个机器周期,因此最高检测频率为振荡频率
21、的1/24。7.1.3 定时/计数器的方式寄存器和控制寄存器一、定时/计数器控制寄存器TCONTCON位功能:TF1 定时/计数器1溢出中断请求标志,当定时/计数器1计数满产生溢出时,由硬件自动置TF1=1。在中断允许时,向CPU发出定时/计数器1的中断请求,进入中断服务程序后,由硬件自动清0。TR1 定时/计数器1运行控制位。由软件置1或清0来启动或关闭定时/计数器1。TF0 定时/计数器0溢出中断请求标志,其功能及操作情况同TF1。TR0 定时/计数器0运行控制位,其功能及操作情况同TR1。二、定时/计数器方式寄存器TMODTMOD位功能:GATE 门控位。当GATE=0时,软件控制位TR
22、0或TR1置1即可启动定时/计数器;当GATE=1时,软件控制位TR0或TR1需置1,同时还需INT0(P3.2)或INT1(P3.3)为高电平方可启动定时/计数器,即允许外部中断INT0和INT1启动定时/计数器。功能选择位。=0时,设置定时/计数器工作为定时器方式;=1时,设置定时/计数器工作为计数器方式。M1、M0方式选择位。定义如下:定时/计数器有4种不同的工作方式,最常用的是方式1,所以我们仅对方式1做简单介绍。如图7-4所示。由图可知,方式1为16位加法计数器。当低8位计数器TLn计数满时自动向高8位计数器THn进位,而THn计数满即溢出时向中断位TFn进位,同时向CPU申请中断。
23、当=0时,电子多路开关连接12分频器的输出,定时/计数器对机器周期计数,此时,定时/计数器为定时器。当=1时,电子多路开关与外部引脚Tn(P3.4或P3.5)相连,当外部信号电平发生由1到0的负跳变时,计数器加1,此时,定时/计数器为计数器。7.2 定时器的应用7.2.1 定时器的容量和初值计算一、定时器容量对于定时对于定时/计数器工作于方式计数器工作于方式1的情况,的情况,T0和和T1都是都是16位的位的计数器,最大的计数容量就是计数器,最大的计数容量就是65536。二、定时器初值计算7.2.2定时器的应用一、定时器的初始化由于定时/计数器的功能是由软件编程确定的,所以,一般在使用定时/计数
24、器前都要进行初始化。初始化步骤如下:1.确定工作方式对方式寄存器TMOD赋值。2.预置定时或计数的初值直接将初值写入TH0、TL0或TH1、TL1。3.根据需要开启定时/计数器中断直接对中断允许寄存器IE赋值。4.启动定时器将TR0或TR1置1。二、定时/计数器中断服务函数如何做到长时间定时?根据定时器初值的计算方法,在晶振频率为12MHz的情况下,我们可以计算出定时器工作在方式1下的最大定时时间为:tmax=(216-0)12/12s=65.536s。那么我们要定时1秒、1分钟、1小时就没有办法了吗?其实我们可以采用定时器*计数值的方法来实现长时间的定时。在这里,我们让单片机T0定时时间为5
25、0ms,那么就需要先给TH0、TL0预装一个初值15536,在这个初值的基础上再计50000个脉冲后,定时器溢出,此时刚好就是50ms中断一次。当需要定时1s时,我们使用变量cnt在程序中产生20次50ms的定时器中断便认为是1s,这样便可以精确控制较长时间的定时了。【实战提高】以图7-1设计电路为依据(可直接在项目7所在目录下打开设计电路文件“proj7_1.DSN”),要求能使用定时器1控制发光二极管以2秒速率闪烁。【巩固复习】一、填空题1.MCS-51单片机的定时/计数器有()个,分别为()和()。2.MCS-51单片机定时/计数器的内部结构由以下四部分组成:()()()()3.定时器1
26、的中断入口号是()。4.启动T0开始定时是使控制寄存器TCON的()置1。二、选择题1.MCS-51系列单片机的定时/计数器T1用作定时方式时是()A.对内部时钟频率计数,一个时钟周期加1。B.对内部时钟频率计数,一个机器周期加1。C.对外部输入脉冲计数,一个时钟周期加1。D.对外部输入脉冲计数,一个机器周期加1。2.MCS-51系列单片机的定时/计数器T1用作计数方式时计数脉冲是()A.外部计数脉冲由T1(P3.5)输入。B.外部计数脉冲由内部时钟频率提供。C.外部计数脉冲由T0(P3.42)输入。D.以上都可以。3.MCS-51系列单片机的定时/计数器T0用作定时方式,采用工作方式1,则工
27、作方式控制字为()A.TMOD=0 x01B.TMOD=0 x50C.TMOD=0 x10D.TCON=0 x02项目项目8 制作电子秒表制作电子秒表v项目描述:项目描述:当第一次按下启动/暂停键,秒表开始计时;当第二次按下启动/暂停键,秒表暂停计时。当按下复位键,秒表显示回零。计时精度为1%秒。v能力培养目标能力培养目标会写独立式按键与单片机接口的程序能理解独立式按键与单片机接口原理v学习组织形式学习组织形式采取以小组为单位互助学习,有条件的每人一台电脑,条件有限的可以两人合用一台电脑。用仿真实现所需的功能后如果有实物板(或自制硬件电路)可把程序下载到实物上再运行、调试,学习过程鼓励小组成员
28、积极参与讨论。v项目实施过程项目实施过程一、创建硬件电路实现此项目的电路原理图如图8-1,系统对应的元器件清单如表8-1所示。v电路路说明明v51单片机一般采用+5V电源供电v51单片机的最小系统如前面章节所示。v显示部分如项目6电路。v三个独立式按键分别连接单片机的P3.0、P3.1和P3.2引脚。程序编写程序编写v程序编写编写的程序如下#include#define uchar unsigned char#define uint unsigned intsbit DX=P24;sbit WX=P25;sbit k1=P30;sbit k2=P31;uint sec,msec;uchar c
29、ode table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 xff,0 x79,0 x40;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void init()TMOD=0 x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;EA=1;void disp()DX=1;WX=0;P0=tablesec/10;DX=0;WX=1;P0=0 xf7;delay(2);P0=0 xff;DX=1
30、;WX=0;P0=tablesec%10|0 x80;DX=0;WX=1;P0=0 xfb;delay(2);P0=0 xff;DX=1;WX=0;P0=tablemsec/10;DX=0;WX=1;P0=0 xfd;delay(2);P0=0 xff;DX=1;WX=0;P0=tablemsec%10;DX=0;WX=1;P0=0 xfe;delay(2);P0=0 xff;void keyscan()if(k1=0)delay(10);if(k1=0)while(k1=0);TR0=TR0;if(k2=0)delay(10);if(k2=0)while(k2=0);TR0=0;sec=ms
31、ec=0;void main()init();while(1)disp();keyscan();void timer0()interrupt 1TH0=(65536-10000)/256;TL0=(65536-10000)%256;if(+msec=100)msec=0;sec+;if(sec=100)sec=0;(三)创建程序文件并生成.HEX文件打开MEDWIN,新建项目文件“P8”,创建程序文件“P8_1.C”,输入上述程序,然后按工具栏上的“产生代码并装入”按钮(或按CTRL+F8),此时将在屏幕的构建窗口中看到下如图8-2所示的信息,它代表编译没有错误、也没有警告信息,且在对应项目文
32、件夹的OUTPUT子目录中已生成目标文件“P8.Hex”。(四)运行程序观察结果在Proteus中打开项目8设计电路“proj8.dsn”,把已编译所生成的HEX文件下载到单片机中,同时观察结果。如果有实物板可把程序下载到实物上再运行、调试。也可以根据图8-1提供的原理图与器件清单在万能板上搭出电路后再把已编译所生成的HEX文件下载到单片机中。然后再调试运行。8.1 独立式按键与单片机的接口8.1.1键盘工作原理键盘在单片机应用中作为输入设备,分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘
33、。在单片机组成的各种系统中,用的最多的是非编码键盘。非编码键盘又分为:独立式键盘和行列式(又称为矩阵式)键盘。在单片机系统中通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。8.1.2独立式按键与单片机的接口独立式键盘的接口电路如图8-3所示。当检测按键时键盘作为输入,每一个按键对应一根I/O线,各键是相互独立的。图中按键输入均采用低电平有效。上拉电阻保证了按键断开时,I/O端口线有确定的高电平。如果I/O端口线内部有上拉电阻时,外电路可不接上拉电阻。应用时,由软件来识别键盘上的键是否被按下。
34、当某个键被按下时,该键所对应的端口线将由高电平变为低电平。即若单片机检测到某端口线为低电平,则可判断出该端口线所对应的按键被按下。8.2 独立式按键的应用8.2.1按键的去抖从图中可看出,理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动现象,这是由按键的机械触点造成的,抖动时间的长短和按键的机械特性有关,一般为510ms。这种抖动对于人来说是感觉不到的,但对于单片机而言,这510ms的抖动时间已是一个“漫长”的时间了。虽然只按了一次键,但单片机却检测到按了多次键,因而容易产生非预期的结果。为使单片机能够正确地判断按键按下,就必须考虑消除抖动。实现方法:可以使用硬件和软件的方
35、法。图8-5 硬件去抖电路图8-6 按键去抖处理流程8.2.2一键多能的使用日常生活中我们使用的电器,如电风扇、洗衣机等,它们的操作面板可能很简洁,只有很少的按键,但是功能却很复杂。按下某个键既可以设定时间、又可以设定工作方式等,这是因为这些按键具有一键多能的作用。我们可以使用switch语句来编写按键扫描的程序。编写程序,当第一次按下k1键时,LED1亮;第二次按下k1键时,LED2亮;第三次按下k1键时,LED3亮;第四次按下k1键时,LED4亮;第五次按下k1键时,返回到LED1亮,依此类推。#include#define uchar unsigned char#define uint
36、unsigned intsbit k1=P30;uchar num,index=0;void delay(uint xms)/延时子函数uint i,j;for(i=xms;i0;i-)for(j=125;j0;j-);void keyscan()/按键扫描子函数if(k1=0)/按键是否按下?if(k1=0)while(k1=0);/再次判断按键是否按下?num=num+1;if(num=5)/若按键计数值为5,则返回到1num=1;/若按键确实被按下了,则计数值加1?switch(num)/switch语句 case 1:P1=0 xfe;break;/按第一下,LED1亮case 2:P
37、1=0 xfd;break;/按第二下,LED2亮case 3:P1=0 xfb;break;/按第三下,LED3亮case 4:P1=0 xf7;break;/按第四下,LED4亮default:break;void main()num=0;while(1)keyscan();【实战提高】以图8-1设计电路为依据(可直接在项目8所在目录下打开设计电路文件“proj8_1.DSN”),要求每按一次按键,则在数码管上显示出按键的次数。【巩固复习】一填空题1.在单片机组成的各种系统中,用的最多的是非编码键盘。非编码键盘又分为:()键盘和()键盘。2.switch/case语句中,switch语句后
38、面跟的是(),而case语句后面跟的是()。3.在程序中,若要使单片机停机,可以使用语句()来实现。二选择题1.按键开关的结构通常是机械弹性元件,在按键按下和断开时,触点在闭合和断开瞬间会产生接触不稳定,为消除抖动引起的不良后果常采用的方法有()。A.硬件去抖动B.软件去抖动C.硬、软件两种方法D.单稳态电路去抖方法2.在程序中判断独立按键是否被按下时,通常的方法是将按键状态读人单片机。当读入状态为()时,认为按键被按下了。A.低电平B.高电平C.任意电平D.以上都不可以任务四:制作可调电子时钟任务四:制作可调电子时钟v在日常生活中我们总是离不开时间,数字时钟是生活中很实用的计时设备。如我们手
39、机里的时间显示,火车站、机场及大型广场的时间显示等。一般情况下,数字时钟包括时、分、秒3个部分的显示。这些显示功能可以由单片机来控制实现,因此本项目我们的最终任务是设计制作一个能显示小时、分钟、秒的简易数字时钟。项目项目9 字符型液晶字符型液晶1602显示显示“WELCOME TO China”v项目描述:项目描述:编写程序,在字符型液晶显示屏上显示字符等信息。v能力培养目标能力培养目标会编写1602字符型液晶显示程序能了解字符型液晶的工作时序及与MCS-51单片机的接口原理v学习组织形式学习组织形式采取以小组为单位互助学习,有条件的每人一台电脑,条件有限的可以两人合用一台电脑。用仿真实现所需
40、的功能后如果有实物板(或自制硬件电路)可把程序下载到实物上再运行、调试,学习过程鼓励小组成员积极参与讨论。v项目实施过程项目实施过程创建硬件电路v电路说明v51单片机一般采用+5V电源供电v51单片机的最小系统如前面章节所示。v 显示部分采用16*2字符型液晶显示器。程序编写程序编写v程序编写编写的程序如下#include#define uchar unsigned char#define uint unsigned intsbit RS=P20;sbit RW=P21;sbit EN=P22;uchar num;uchar code table=WELCOME TO CHINA;void d
41、elay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);void write_cmd(uchar cmd)RW=0;RS=0;EN=0;P0=cmd;delay(5);EN=1;delay(5);EN=0;void write_dat(uchar dat)RW=0;RS=1;EN=0;P0=dat;delay(5);EN=1;delay(5);EN=0;void init()EN=0;write_cmd(0 x38);/16*2显示,5*7点阵,8位数据write_cmd(0 x0c);/开显示,光标不显示,光标不闪烁write_cmd(0 x0
42、6);/地址指针加1,不移动write_cmd(0 x01);/请屏write_cmd(0 x80);void main()init();for(num=0;num16;num+)write_dat(tablenum);delay(2);while(1);(三)创建程序文件并生成.HEX文件打开MEDWIN,新建项目文件“P9”,创建程序文件“P9_1.C”,输入上述程序,然后按工具栏上的“产生代码并装入”按钮(或按CTRL+F8),此时将在屏幕的构建窗口中看到下如图9-2所示的信息,它代表编译没有错误、也没有警告信息,且在对应项目文件夹的OUTPUT子目录中已生成目标文件“P9.Hex”。(
43、四)运行程序观察结果在Proteus中打开项目9设计电路“proj9dsn”,把已编译所生成的HEX文件下载到单片机中,同时观察结果。如图9-3所示。如果有实物板可把程序下载到实物上再运行、调试。也可以根据图9-2提供的原理图与器件清单在万能板上搭出电路后再把已编译所生成的HEX文件下载到单片机中。然后再调试运行。9.1 字符型液晶显示和接口9.1.1 LCD液晶显示器液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,具有微功耗、体积小、显示内容丰富、超薄轻巧等特点,目前广泛应用在轻薄型显示器上。9.1.2 LCD液晶显示器的引脚和主要技术参数9.2 字符型液晶的应用单片机对1602进行
44、操作时,必须严格按照液晶的操作时序来进行。与操作时序相关的引脚主要是RS、RW和EN。对液晶的操作主要是读写操作。如表9-3所示。从图中可以看出,在写操作时,先设置RS和RW状态,再设置数据,然后产生使能信号EN的高脉冲,最后复位RS和RW状态。9.2.2 RAM地址映射图及数据指针1.液晶控制器内部带有80B的RAM缓冲区,对应关系如表9-4所示。当我们向图中的000F、404F地址中的任一处写入显示数据时,液晶都可以立即显示出来,当写入到1027或5067地址处时,必须通过移屏指令将它们移入可显示区域方可正常显示。2.数据指针的设置液晶控制器内部设有一个数据地址指针,用户可以通过它们访问内
45、部的全部80B的RAM。如表9-5所示。【实战提高】1.以图9-1设计电路为依据(可直接在项目9所在目录下打开设计电路文件“proj9_1.DSN”),要求在第一行显示“I LIKE MCU!”,在第二行写入“”。2.以图9-1设计电路为依据(可直接在项目9所在目录下打开设计电路文件“proj9_1.DSN”),要求在第一行从右侧移入字符串“Hello everyone!”。【巩固复习】一填空题1.在1602液晶控制器中,若需要设置为4位总线方式,则应使功能设置命令中的DL为()电平。2.在1602液晶控制器中,若要使显示屏上的光标闪烁,则应使功能设置命令中的B为()电平。3.在1602液晶控
46、制器中,若要使显示屏上的光标移动方向为右移,则应使功能设置命令中的I/D为()电平。二选择题 1.在1602液晶控制器中,若需要设置为8位总线方式,单行显示,显示为510的点阵字符时,应设置的命令字为():A.38H B.34H C.28H D.36H 2.在1602液晶控制器中,若需要设置为4位总线方式,双行显示,显示为57的点阵字符时,应设置的命令字为():A.38H B.34H C.28H D.36H项目项目10 制作可调电子时钟制作可调电子时钟v项目描述:项目描述:本项目为项目6至项目9的综合训练。通过编写程序,制作一个可以调整时间的电子时钟,并显示在1602字符型液晶上。要求第一次按
47、下k1键,此时系统用光标闪烁来提示可以调整秒;第二次按下k1键,此时系统用光标闪烁来提示可以调整分钟;第三次按下k1键,此时系统用光标闪烁来提示可以调整小时。第四次按下k1键,又回到调整秒的功能。配合按k2或k3键来增加或减小设置的数值。v学习组织形式学习组织形式采取以小组为单位互助学习,有条件的每人一台电脑,条件有限的可以两人合用一台电脑。用仿真实现所需的功能后如果有实物板(或自制硬件电路)可把程序下载到实物上再运行、调试,学习过程鼓励小组成员积极参与讨论。v能力培养目标能力培养目标能领会项目开发过程会编写可调时钟程序能加深对定时器中断的应用v项目实施过程项目实施过程创建硬件电路v电路说明v
48、51单片机一般采用+5V电源供电v51单片机的最小系统如前面章节所示。v 显示部分采用16*2字符型液晶显示器。程序编写程序编写v程序编写编写的程序如下(三)创建程序文件并生成.HEX文件打开MEDWIN,新建项目文件“P10”,创建程序文件“P10_1.C”,输入上述程序,然后按工具栏上的“产生代码并装入”按钮(或按CTRL+F8),此时将在屏幕的构建窗口中看到下如图10-2所示的信息,它代表编译没有错误、也没有警告信息,且在对应项目文件夹的OUTPUT子目录中已生成目标文件“P10.Hex”。(四)运行程序观察结果在Proteus中打开项目10设计电路“proj10.dsn”,把已编译所生
49、成的HEX文件下载到单片机中,同时观察结果。如图10-3所示。如果有实物板可把程序下载到实物上再运行、调试。也可以根据图10-1提供的原理图与器件清单在万能板上搭出电路后再把已编译所生成的HEX文件下载到单片机中。然后再调试运行。10.1 按键扫描子函数在本项目中,我们要求的按键动作要求是:k1键为秒、分钟、小时的选择键。当第一次按下k1键,系统用光标闪烁来提示可以调整秒;第二次按下k1键,系统用光标闪烁来提示可以调整分钟;第三次按下k1键,系统用光标闪烁来提示可以调整小时;第四次按下k1键,又回到调整秒的功能。k2键为增加键,k3键为减小键,用于增加或减小设置的数值。10.2 定时中断函数
50、中断函数中,主要是利用定时器T0进行定时操作,每50ms中断一次,中断了20次后,即定时1秒。然后就修改秒、分和小时的值,同时在液晶显示器的相应位置进行显示。可以用图10-4所示的流程图表示。【实战提高】1.以图10-1设计电路为依据(可直接在项目10所在目录下打开设计电路文件“proj10_1.DSN”),基本要求同项目10,液晶采用4位总线方式控制,试编写程序。2.以图10-1设计电路为依据(可直接在项目10所在目录下打开设计电路文件“proj10_1.DSN”),基本要求同项目10,要求液晶第一行显示的字符可以在显示屏上循环移动,试编写程序。【巩固复习】一填空题1.在本项目中,若使用定时