基于C语言的MCS-51单片机教程 课件 第二篇 任务1:数码管显示 -任务4:定时计数器的使用_第1页
基于C语言的MCS-51单片机教程 课件 第二篇 任务1:数码管显示 -任务4:定时计数器的使用_第2页
基于C语言的MCS-51单片机教程 课件 第二篇 任务1:数码管显示 -任务4:定时计数器的使用_第3页
基于C语言的MCS-51单片机教程 课件 第二篇 任务1:数码管显示 -任务4:定时计数器的使用_第4页
基于C语言的MCS-51单片机教程 课件 第二篇 任务1:数码管显示 -任务4:定时计数器的使用_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

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

文档简介

任务1:数码管显示显示器及其接口单片机系统中常用的显示器有:发光二极管LED(LightEmittingDiode)显示器、液晶LCD(LiquidCrystalDisplay)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。LED数码管结构和原理字符编码限流电阻计算编程实现静、动态显示LED数码管结构及原理

共阴极共阳极LED数码管字符编码共阴数码管码表

0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0 1 2 345

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

6 7 8 9AB

0x39,0x5e,0x79,0x71

CDEF LED数码管字符编码共阳数码管码表

0xC0,0xF9,0xA4,0xB0,0x99,0x92,

0 1 2 345

0x82,0xF8,0x80,0x90,0x88,0x83,

6 7 8 9AB

0xC6,0xA1,0x86,0x8E

CDEF 限流电阻的计算

单片机外接数码管,数码管的内部结构是LED发光二极管,电路必须使用电阻进行限流。串联电阻,避免损坏单片机的输出引脚,同时防止LED发光二极管过热损害,也能限制LED发光二极管的功耗。一般单片机驱动引脚能够承受的电流输入在10~15mA左右,串联的限流电阻计算如下:R=(5V–Vd)/IdId为限制电流,取值10mA,Vd为LED发光二极管的正向电压,取值2V,从而得到限流电阻值如下:R=(5V-2V)/10mA=300(欧)在实际设计中,为了有效保护单片机引脚,一般对LED发光二极管驱动采用的限流电阻比300欧大,常用的典型值为470欧。LED静态显示

静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。举例1:单片机控制1位数码管上显示2。硬件电路设计软件程序设计

分析思考:硬件连好了,如何让数码管上显示2呢?数字2的共阳极的字型编码是0xa4,当P0口输出数据0xa4时,单片机的P0口的P0.7……P0.1、P0.0引脚输出10100100,数码管的COM端接高电平,则LED数码管上有5段点亮,见上图的a、b、d、e、g,所以数码管上显示数字2。单片机控制在LED数码管显示数字2,参考程序如下:#include<reg51.h>voidmain() //单片机控制LED数码管显示2{unsignedcharcodeled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管的字符编码0,1,2,3,4,5,6,7,8,9unsignedchari;while(1){i=2;P0=led[i];}}LED动态显示动态显示是按位轮流点亮各位数码管的显示方式。即在任一时段,只有其中一位数码管“位选端”有效,并送出相应的字形显示编码,其它的数码管此时都因为“位选端”无效而处于熄灭状态。下一个时段按顺序选通另外一位数码管,并送出相应的字形显示编码,依此规律循环下去,即可使各位数码管分别间断显示出相应的字符。只要每位显示间隔时间足够短,就会看到各数码管好像是“同时”显示。举例:设计程序实现四个LED从左到右循环依次显示0,1,2,3,4,并用PROTUES进行仿真。硬件电路设计软件程序设计上图中标为1234引脚的称为位选,控制选择某一个数码管,确定显示的位置;标为ABCDEGDP的称为段选,控制选择数码管中哪几段点亮,确定显示的字型。图中单片机从P2口向数码管输出数字“4”的段码,此时所有的数码管都接收到“4”的段码,哪个数码管显示“4”由数码管的公共端决定,即位选码决定。此时第4个数码管的公共端为低电平,其他数码管的公共端为高电平,因此只有第4个数码管显示“4”,其他数码管不显示任何数字。图中数码管上显示数字“1234”,实际是先输出位选信号选中第1个数码管,输出1的段码,延时一段时间后选中第二个数码管,输出2的段码,延时一段时间后。又输出位选码选中第3个数码管,输出3的段码,延时一段时间后,又输出位选码选中第4个数码管,输出4的段码……,反复这个过程,就可以显示出“1234”,由于交替的速度非常快,利用视觉暂留,人眼看到的就是连续的“1234”。软件程序流程图参考程序#include<reg51.h>voiddelay(unsignedchari);unsignedcharch[4]={0x06,0x5b,0x4f,0x66};//共阴数码管1、2、3、4的字型码voidmain(){while(1){ P3=0x0fe;//位选,选通第1个数码管

P2=ch[0]; //段选,数码管的字型码

delay(20);//延时

P3=0xfd;//位选,选通第2个数码管

P2=ch[1]; delay(20); P3=0xfb;

P2=ch[2]; delay(20); P3=0xf7; P2=ch[3]; delay(20);}}voiddelay(unsignedchari){unsignedcharj,k;

for(k=0;k<i;k++)

for(j=0;j<255;j++);}任务扩展:实现四位数码管循环显示0~9999。提示:注意区分4位数码管是共阴管还是共阳管。任务2:蜂鸣器发音理论学习:蜂鸣器1、蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。按其驱动方式的不同,可分为:有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部驱动)

2、有源蜂鸣器和无源蜂鸣器的区别1)外观

2、有源蜂鸣器和无源蜂鸣器的区别2)驱动方式注意:“源”指的是震荡源,而不是电源。有源蜂鸣器内部带有震荡源,只要一通电就会叫。无源蜂鸣器内部不带震荡源,必须用2K~5K的方波信号去驱动才能发声。

2、有源蜂鸣器和无源蜂鸣器的区别3)引脚长短有源蜂鸣器引脚一脚长一脚短,有正负之分无源蜂鸣器引脚一样长,无正负之分

3、有源蜂鸣器和无源蜂鸣器的区分1)看外观2)用外用表用万用表电阻档Rxl

档测试:用黑表笔接蜂鸣器“+”引脚,红表笔在另一引脚上来回触碰,如果觉发出咔、咔声且电阻为8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音,且电阻在几百欧以上的,是有源蜂鸣器。

有源蜂鸣器发音及举例任务:编程实现声音报警,报警时发出“嘟嘟”的响声。1)硬件设计:蜂鸣器一端接高电平,另一端接三极管的集电极,三极管发射极接地,三极管的基极接单片机端口P2.7。当三极管的基极为高电平饱和导通蜂时,蜂鸣器就会发声了。电路下图所示:小知识:为什么单片机不直接接控制蜂鸣器呢?因为长声蜂鸣器5V(SOT塑封封装)的参数为:直流有源蜂鸣器:电压:3.5—5.5V;电流:<25mA;频率:2300±500Hz;而51单片机高电平输出能力很弱,输出电流弱,驱动电流一般不超过20ma所以用三极管扩流驱动。软件设计:自行练习项目2带闹钟的数字钟的设计与制作系统功能仿真演示项目要求在基于单片机设计制作一个带闹钟的数字钟,用数码管显示时间,有启动、停止和时间调整、闹钟等功能,具体功能描述如下:1)系统以秒为计时单位,通过四位数码管实现时间的倒计时显示,即显示的时间范围为0~9999秒。2)系统具有启动/暂停计时功能,通过按键来实现。3)系统可通过按键实现时间调整,即分/秒的加减。4)当系统到达设定时间,蜂鸣器发出“嘟嘟”的响声,响3秒。

系统方案设计(1)总体结构设计:根据带闹钟的数字钟的功能要求,进行了系统的总体设计。该系统由51单片机模块、按键控制模块、蜂鸣器模块、数码管显示模块、电源模块5个模块组成。其系统结构总体框图如图1所示。

晶振电路复位电路单片机按键控制模块蜂鸣器数码管显示模块项目任务1、数码显示2、蜂鸣器3、键盘4、定时/计数器任务要求理解本任务的软、硬件原理,然后以个人为单位,完成如下任务:硬件电路板的制作、调试;程序的编写和仿真;软硬件的联调。任务3:键盘的应用1、键盘的分类键盘分编码键盘和非编码键盘。在单片机组成的测控系统及智能化仪器中,用的最多的是非编码键盘。非编码键盘有分为:独立式非编码键盘和行列式非编码键盘。2、键盘的结构常用的机械式按键,按键是4脚封装,内部2脚相连,图(b)是按键的背面图,用万用表测试4只引脚的通断。1号和2号引脚是连通的,3号和4号引脚是连通的。硬件连接时注意引出按键4个引脚中不相通的2个引脚,如按键的对角上的两个引脚。

按键与单片机引脚相连后,按键按下或闭合会影响单片机引脚状态,读取引脚状态,推断按键是否按下,从而达到输入信息的目的。3、独立式按键

独立式按键是指各按键相互独立地接通一条输入数据线。当任何一个键按下时,与之相连的输入数据线即可读入数据0,而没有按下时读入1。独立式键盘的电路简单,易于编程,但占用的IO口线较多,当需要较多按键时可能产生IO资源紧张问题。独立按键的三种接法的分析1)当按键闭合时,单片机引脚接地,当按键断开时,单片机引脚不能稳定工作,因为处于高阻态,易受干扰。独立按键的三种接法的分析2)当按键闭合时,单片机引脚接地,当按键断开时,单片机引脚被上拉电阻拉为高电平,按键闭合或按下,单片机引脚的电平稳定,是一种标准的接法。独立按键的三种接法的分析3)当按键断开时,单片机引脚接地,当按键闭合时,单片机引脚直接和电源相连,这种接法短路电流大,易烧毁单片机I/O口电路,是危险的连接方法。4、独立按键读取引脚状态的方法

软件方面如何读取引脚状态呢?有查询法和中断法。普遍采用查询法。查询法是CPU读取连接按键的单片机端口的电平状态,如果读取的是低电平,就确认该端口对应的按键已按下,如果读取的是高电平,就确认该端口对应的按键没按下。

提示:因为51系列单片机的端口是准双向口,在读引脚前,需要先对输入端口置1。

举例:读P1.0bits1;//定义位变量s1,保存按键通断状态P1_0=1;S1=P1_0;读P1:Unsignedcharsw;//定义字节变量

P1=0xff;Sw=P1;

5、按键的去抖由于机械触点的弹性作用,按键在闭合时不会马上稳定地接地,在断开时也不会立刻断开。通常在闭合和断开的瞬间都伴随有一定时间的触点机械抖动,如下图。抖动时间一般为5

10ms,在触点抖动期间检测按键的通与断状态,可能导致判断出错。因此,为保证CPU对按键的断开和闭合做出正确的判断,就必须消除抖动。按键的去抖—硬件方法在键数较少时可用硬件方法消除键抖动。如图所示的RS触发器为常用的硬件去抖。图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。按键的去抖—硬件方法利用电容的放电延时,采用按键并联电容法,也可以实现消抖。按键的去抖—软件延时法

(a)检测按键(b)释放按键按键去抖流程图软件去抖的原理一:前沿消抖法。读按键状态,判断有键按下,延时10ms,再次读按键状态,有键按下,才确认是哪一个按键,从而消除前沿的抖动。流程如下图(a)。按键的去抖—软件延时法

软件去抖的原理二:在去抖时间内连续多次去读按键所在端口的状态,并与上一次进行对比,若状态改变,则重新初始化去抖时间。直到在去抖时间内,每次读到的口状态都一致时,我们才认为扫描到稳定的按键。流程如下图(C)。举例编写程序,识别图中的8个按键是哪一个键被按下,返回键的编号。

硬件电路按键编号K0K1K2K3K4K5K6K7P1二进制1111111011111101111110111111011111101111110111111011111101111111十六进制0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f/****************获取按键状态的参考程序片段*************///**********按键扫描程序

unsignedcharkeyscan(){unsignedcharsw;//定义变量sw,暂存P1状态的变量

unsignedcharkey//定义变量key,暂存按下键的编号

P1=0xff;//预先对输入端口置1

sw=P1;

switch(sw){ case0xfe:key=0;break; case0xfd:key=1;break; case0xfb:key=2;break; case0xf7:key=3;break; case0xef:key=4;break; case0xdf:key=5;break; case0xbf:key=6;break; case0x7f:key=7;break;} returnkey;//获得按键编号}6、矩阵式按键特点:占用IO口线较少,但软件将较为复杂。判断键盘的位置—常用方法键盘扫描法和反线法。行列式键盘键盘扫描法步骤:第一步:判别有无按键按下。其方法:向所有行给低电平0,所有的列给高电平1。读取此时列线I/O状态,如果不是全高,则有按键按下。第二步:有按键按下,则下一步就是查找按键所在位置,具体步骤:向第0行给低电平0,其它给高电平1,读取所有列的电平状态。如果所有列电平均为高电平,则说明按下的按键不在第0列。反之则找到了该按键。依次对第1列、第2列、第3列如此操作,直到找到按下的按键为止。第三步:对按键进行编码。反线法步骤:①判断哪一列有键压下写端口(0xf0):行线电平=0;列线电平=1。读端口进行判断:若P3=0xf0→没有按键压下。若P3≠0xf0→某列有键压下→则将读取的值赋值给K1。②判断哪一行有键压下写端口(0x0f):行线电平=1;列线电平=0。读端口进行判断:若P3=0x0f→没有按键压下;若P3≠0x0f→某行有键压下→K2。③将K1与K2相“或”并存于K2(形成键值)——闭合键所在行、列的状态均为0,其余皆为1。

第一列第二列第三列第四列第一行

ee de be 7e第二行

ed dd

bd 7d第三行

eb db bb 7b第四行

e7 d7 b7 774*4行列式键盘的各按键的键值举例:按下任意按键后,LED显示器上显示该键的键模(0~F)。练习:在任务1的4位数码管动态显示的基础上,硬件上设计4个独立按键,编程调试仿真实现按下其中一个按键启动显示,按下第2个键停止显示。按下第三个键显示数字加1,按下第4个键,显示数字减1。项目3:

LED点阵广告牌的设计与制作项目的目标及任务1.项目目标掌握单片机的串口的原理。掌握利用74HC595和单片机的串口实现数据的串转并。掌握利用单片机控制LED点阵显示屏符号的显示。2.项目任务基于单片机的LED点阵广告牌功能要求:利用单片机的串口,实现16X16LED点阵上滚动显示汉字。任务1:8×8的LED点阵显示

一、LED点阵屏的结构和显示原理LED点阵显示器是把很多LED发光二极管按矩阵方式排列在一起,通过对每个LED进行发光控制,完成各种字符或图形的显示。最常见的LED点阵显示模块有5×7(5列7行),7×9(7列9行),8×8(8列8行)结构。LED点阵由一个一个的点(LED发光二极管)组成,总点数为行数与列数之积,引脚数为行数与列数之和。1、8*8点阵的外部结构及引脚排布2、8*8点阵的内部结构

共阴极LDM1088AX共阳极LDM1088BX3、LED点阵引脚的测试方法

①用机械式万用表测试管脚的方法。把万用表拨到电阻档×10,先用黑表笔(极性为+)随意选择一个引脚,红表笔碰余下的引脚,看点阵有没发光,没发光就用黑色探针再选择一个引脚,红色探针碰余下的引脚,当点阵发光,则这时黑色探针接触的那个引脚为正极,红色探针碰到就发光的7个引脚为负极,剩下的6个引脚为正极。②用数字万用表的测试方法:把万用表功能开关拨到发光二极管档,将红表笔插入

"HzVm

插孔,黑表笔插入

"COM"插孔,红表笔极性为"+",黑表笔极性为"-",若万用表有读数,同时发光二极管会发光,则此时红表笔所测端为二极管的正极,如果被测二极管开路或极性接反,显示屏将示

"OL"。提示:当测量在线二极管时,测量前必须断开电源,并将相关的电容放电。4、判定LED点阵模块引脚编号

先把器件的引脚正负分布情况记下来,正极(行)用数字表示,负极(列)用字母表示,先定负极引脚编号,黑色探针选定一个正极引脚,红色点负极引脚,看是第几列的二极管发光,第一列就在引脚写A,第二列就在引脚写B,第三列......以此类推。这样就点阵的一半引脚都编号了。剩下的正极引脚用同样的方法,第一行的亮就在引脚标1,第二行就在引脚标2,第三行......5、动态扫描的原理分析

LED点阵的显示过程以用动态扫描法,有逐线阴极扫描和逐线阳极扫描两种。1)行扫描:一行一行的轮流显示,具体如下:先给ROW1行的行控制线送有效电平,其他行送无效电平,控制只可能ROW1行上的发光管亮,把列控制数据送给L0~L7,控制ROW1行上的哪些发光管亮;延时1~3ms后,再给ROW2行的行控制线送有效电平,其他行送无效电平,控制只可能ROW2行上的发光管亮,把列控制数据送COL1~COL8,控制ROW2行上的哪些发光管亮;延时1~3ms后……最后给ROW8行的行控制线送有效电平,其他行送无效电平,控制只可能ROW8行上的发光管亮,把列控制数据送给COL1~COL8,控制ROW8行上的哪些发光管亮;延时1~3ms,如此反复。2)列扫描:同上原理一样,唯一不同的就是它是按列轮流显示。行与行之间的延时为行周期,所有行扫描完为场周期,行周期和场周期的时间是多少呢?场周期的时间不超过人的视觉暂留时间,取20ms为场周期,行周期为20ms/8,取1~3ms。时间短了,会重影或全亮,时间长了会闪烁。任务实施举例:心形图形1234567812345678方案一:单片机I/O直接控制参考程序:#include<reg51.h>unsignedchartable1[16][2]={0xfe,0x1c,0xfd,0x3e,0xfb,0x7e,0xf7,0xfc,0xef,0xfc,0xdf,0x7e,0xbf,0x3e,0x7f,0x1c};unsignedchartable2[8][2]={0xfe,0x00,0xfd,0x18,0xfb,0x3c,0xf7,0x78,0xef,0x78,0xdf,0x3c,0xbf,0x18,0x7f,0x00};unsignedint

i,j;voidmain(){ TMOD=0x01; TH0=0xfc; TL0=0x18; TR0=1; EA=1; ET0=1; P0=0xff; P1=0x00; while(1); }voidt0_inter()interrupt1{ TH0=0xfc; TL0=0x18; P0=table1[i][0]; P1=table1[i][1]; i=i+1;

if(i==8)i=0;

}方案二:单片机串口控制补充知识:1、串行通信的相关知识;2、51单片机的串行口;3、数据的串行并行转换;1、串行通信的相关知识计算机通信是计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。可以分为两大类:并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送。并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。

串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。

串行通信的传输方向单工:通讯的A方只能送,而B方只能接收——广播式。例如:除了用于远程通信外,系统内部单片机以串行方式接收外围芯片(ADC)的数据;或者控制外围芯片(DAC、LCD等)工作。发送方A接收方BTXDRXD串行通信的传输方向半双工 在某一时刻A方只能发送,B方只能接收;而在另一时刻B方只能发送,A方只能接收——对讲机模式。例如:除了用于远程通信外,系统内部单片机与串行接口的RAM、E2PROM之间的数据交换。发送方A接收方BTXDRXDTXDRXD串行通信的传输方向全双工:A、B双方可以同时发送和接收数据——手机模式。例如:两台单片机系统之间的数据串行交换。发送方A接收方BTXDRXDTXDRXD2、51单片机的串行口具有一个“全双工”的通讯能力串行接口。 其中:P3.0端口作RXD——数据接收端;

P3.1端口作TXD——数据发送端。与串行口相关的SFR有:1、SBUF---数据缓冲寄存器(存放发送和接收的数据)2、

SCON---串口控制寄存器(设定串行接口工作模式、表征串口的工作状态)3.PCON---电源及波特率选择寄存器(使波特率加倍)数据缓冲寄存器SBUF在MCS-51的串行口电路中,SBUF是用来存放发送和接收数据的两个物理上独立的数据缓冲寄存器,但地址都是99H。那单片机如何知道什么时候是发送数据?什么时候是接收数据呢?---通过对SBUF的读、写语句来区分,如下:如果单片机要从串口输出数据,就向SBUF写数据,SBUF便是发送缓冲器:

SBUF=send;如果单片机要从串口输入数据,就从SBUF读数据,SBUF便是接收缓冲器:

receive=SBUF;由于发送SBUF与接收SBUF是两个独立的缓冲器,所以51串行口是一个可以同时发送与接收的“全双工”接口。接收SBUF移位寄存器发送SBUF移位寄存器内部总线CPUMCS-51RXDP3.0TXDP3.1串行口控制寄存器SCON用于设定串行接口工作模式、表征串口的工作状态的特殊功能寄存器;在SFR中的地址为98H;这是一个可以按位寻址的SFR。SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D0SCON寄存器1、SM0SM1:工作方式选择位。SM0SM1模式功能波特率000同步移位寄存器Fosc/1201110位UART可变10211位UARTFosc/64或/3211311位UART可变UART:UniversalAsynchronousReceiver/Transmitter,通用异步接收/发送器。

SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D02、SM2:

多机通信控制位。用于方式2和方式3中。3、REN:允许接收控制位。若软件置REN=1时,则启动串口接收数据;若软件置REN=0,则禁止接收。SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D05:RB8:在方式2或方式3中是接收到数据的第9位,作为奇偶校验位或地址/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。4:TB8:在方式2或方式3中是发送数据的第9位,可以用软件规定其作用。可以作为奇偶校验位或地址/数据帧的标志位。SM0SM1SM2RENTB8RB8TIRID7D6D5D4D3D2D1D06、TI、RI:发送、接收完成中断标志位TI

:发送中断标志位。发送完成由硬件使TI置1,向CPU发送中断申请,在中断服务程序中必须软件清零,取消此中断申请。RI

:接收中断标志位。接收完成由硬件使RI置1,向CPU发送中断申请,在中断服务程序中必须软件清零,取消此中断申请。D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI电源及波特率选择寄存器PCON

PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,字节地址为87H,不可以位寻址。在HMOS的AT89C51单片机中,PCON除了最高位以外其它位都是虚设的。PCON(87H)

与串行通信有关的只有SMOD位。SMOD为波特率选择位。在方式1、2和3时,串行通信的波特率与SMOD有关。当SMOD=1时,通信波特率乘2,当SMOD=0时,波特率不变。3、数据的串行并行转换串行口的工作方式0串行口工作方式0:同步移位寄存器模式。特点:B=fosc/12。在这种模式下数据由RXD(P3.0)引脚输入或输出;

同步移位脉冲由TXD(P3.1)引脚输出。发送和接收的数据为8位。在移位过程中,先移数据的低位D0。

MCS-51RXDTXDData外部移位寄存器cp移位脉冲串行数据并行的数据(8位)主要功能:扩展并行输入或输出口。74HC595芯片的介绍74HC595方案二的硬件仿真电路图#include<reg51.h>/******************************大心形图形的编码每行:左边元素为列,右边元素为行编码*******************************/unsignedchartable[8][2]={ 0xfe,0x1c,

0xfd,0x3e, 0xfb,0x7e, 0xf7,0xfc, 0xef,0xfc, 0xdf,0x7e, 0xbf,0x3e,

0x7f,0x1c,};sbitlatch=P3^2;unsignedchari,j;voidmain(){SCON=0x00; TMOD=0x01; TH0=0xfc; TL0=0x18; TR0=1; EA=1; ET0=1; while(1) { SBUF=table[i][1];

while(TI==0); TI=0; SBUF=table[i][0];

while(TI==0); TI=0; latch=0; latch=1; } }voidt0_inter()interrupt1{ TH0=0xfc; TL0=0x18; i++;

if(i==8)i=0;}任务2:16X16LED点阵上稳定显示汉字

最高位1234567891011121314151612345678910111213141516最低位最高位最低位同的字符编码{0x00,0x00,0xFE,0xFF,0x02,0x00,0x12,0x00,0x92,0x0F,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x0F,0x12,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00}#include<reg51.h>voidsend_data(unsignedchartimes);unsignedchartimes=0;/*unsignedcharcodelie[]={0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff,0xff,0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,};*/unsignedcharcodelie[]={0xff,0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe,0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe,0xff,};unsignedcharcodehang[]={0x00,0x00,0xFE,0xFF,0x02,0x00,0x12,0x00,0x92,0x0F,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x08,0x92,0x0F,0x12,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00};sbitlatch=P3^2;voidmain(void){ TMOD=0x01; TH0=(65536-1250)/256; //20/16ms TL0=(65536-1250)%256; TR0=1; EA=1; ET0=1; while(1);}voidT0_int(void)interrupt1{ TH0=(65536-1250)/256; //20/16ms TL0=(65536-1250)%256;

send_data(times); times++;

if(times==16)times=0; //times&=15;}voidsend_data(unsignedchartimes){ SBUF=lie[times*2];

while(TI==0); TI=0; SBUF=lie[times*2+1];

while(TI==0); TI=0; SBUF=hang[times*2];

while(TI==0); TI=0; SBUF=hang[times*2+1];

while(TI==0); TI=0;latch=0; latch=1;}任务3:16X16LED点阵上滚动显示汉字

#include<reg51.h>unsignedcharcodelie[]={0xff,0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe,0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe,0xff};unsignedcharcodehang[]={0x00,0x00,0xFE,0xFF,0x02,0x00,0x12,0x00,//“同”的行编码0x92,0x0F,0x92,0x08,0x92,0x08,0x92,0x08,//“同”的行编码0x92,0x08,0x92,0x08,0x92,0x0F,0x12,0x40,//“同”的行编码0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00,//“同”的行编码0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};sbitlatch=P3^2;voidmain(void){SCON=0x00;TMOD=0x01;TH0=(65536-20000/8)/256 TL0=(65536-20000/8)%256;TR0=1;EA=1;ET0=1;while(1);}voidT0_int(void)interrupt1{staticunsignedcharoffset=0,i=0;//offset为列移动的偏移量

inttime;//每一屏重复刷新显示的次数TH0=(65536-20000/8)/256; TL0=(65536-20000/8)%256;SBUF=lie[i*2];

while(TI==0);TI=0;SBUF=lie[i*2+1];

while(TI==0);TI=0;SBUF=hang[(offset+i)*2];

while(TI==0);TI=0;SBUF=hang[(offset+i)*2+1];

while(TI==0);TI=0;latch=0;latch=1;

if(i==16){i=0;time++;

if(time==5){

time=0;offset++;

if(offse==16)offset=0;}}

}任务拓展:理解LED点阵广告牌的软、硬件原理,然后以个人为单位,完成如下任务:实现名字的滚动花样显示;硬件电路板的制作、调试;程序的编写和仿真;软硬件的联调。任务4:定时计数器的使用软件延时法:利用指令(延时子程序)运行所消耗的时间实现所需的定时时间。特点:由CPU控制,占用CPU的资源;硬件法:利用一个硬件电路实现所需的时间定时,一旦时间到便产生一个标志信号通知CPU。特点:由CPU控制定时的启动,但定时过程由专用模块实现,CPU不参与其过程。所以提高了CPU的工作效率。定时器就是专用于产生延时和计数的外围模块,是单片机内部重要的组成部分。一、定时的两种方式

定时:用于产生一个标准的时间间隔。单片机使用这种方式可以产生一个符合某一要求的脉冲方波(如下图)。而定时/计数器是对89C51晶振信号12分频后的脉冲计数,即每个机器周期使定时器(T0或T1)的数值加1直至溢出。当89C51单片机晶振频率为12MHz时,一个机器周期为1uS,计数频率为1MHz,计数器计数1次所用时间为1uS,计数器计数N个,则所用时间为N*1uS。

20mS40mSMCS-51Px.y

输出波形

计数:通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时,定时器加1计数。

外部脉冲外部设备说明:不管是定时还是计数方式,定时/计数器实质都是对脉冲计数,当对外部信号计数就是计数功能,对内部晶振信号12分频计数就是定时功能。每个定时/计数器都不占用CPU时间,除非计数器溢出,才可以中断CPU当前操作。

二、定时器的相关寄存器GATE门控位:GATE=0时,只要软件设置TR=1,就可以启动计数器工作;

GATE=1时,只有外部中断引脚INT=TR=“1”时,才能启动计数器工作C/T计数/定时方式选择位:C/T=1时,计数模式。

C/T=0时:定时模式。M1、M0工作方式设置位。GATEC/TM1M0GATEC/TM1M0定时器1定时器01.工作方式寄存器TMOD(SFR的地址:89H)M1M0工作方式说明00013位定时/计数器01116位定时/计数器1028位自动重装定时/计数器113T0分成两个独立的8位定时/计数器;T1停止计数注意!不可以位寻址TF0:T0的溢出中断请求标志:硬件自动置1或清0

计数器溢出时硬件自动置位,即TF0=1。进入中断后再由硬件自动清除(TF0=0);TR0:T0的运行控制位:软件置1或清0

由软件设定:TR0=1

T0开始工作;

TR0=0

T0停止计数。TF1、TR1同上。TF1TR1TF0TR0IE1IT1IE0IT02、控制寄存器TCON(SFR地址:88H)可以位寻址定时/计数器相关位外部中断相关位3、初值寄存器TH和TLTH1和TL1:T1的高八位和低八位寄存器。TH0和TL0:T0的高八位和低八位寄存器。在MCS-51单片机内部,具有两个完全相同的定时计数器T0、T1。它们都具有两种工作模式:定时和计数;无论是定时或计数模式,又都有具备四种工作方式,根据实际要求达到最佳的工作状态。定时计数器的工作方式、工作模式是由SFR中的TMOD内容来决定的。因此对其方式、模式的设定是靠对TMOD的初始化编程实现的。三、51单片机定时器/计数器的四种工作方式1,方式0:13位定时器/计数器THTL震荡器1/12(8位)(低5位)TF中断启动控制T引脚TRGATEINT高三位弃用C/T=0C/T=113位加1计数器在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF=1,向CPU发出中断请求。由于低8位计数器中的高三位没有参与工作,故填装初值时应“避开”此三位。类同于模式0。由于两个计数器为完整的8位,故将计算好的16位初值可直接填装到TH、TL中。在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF=1,向CPU发出中断请求。TLTH震荡器1/12(8位)(8位)TF中断启动控制T引脚TRGATEINTC/T=0C/T=12,方式1:16位定时器/计数器16位加1计数器方式0、1的特点13位和16位的计数器方式。启动后,从某一个初值的基础上进行“加1”计数。当计到“全1”时再来一个计数脉冲,计数器就会产生一个“溢出中断信号”即TF=1,此时计数器本身为“全零”。如果需要重复性的完成某一值的定时或计数,需要在每一次计数前不断的重新预装初值,称之为“软件重装初值”。TL做计数器,TH做初值寄存器,工作前TL,TH分别预置相同的初值。TL计数产生溢出的同时,将TH中的初值自动重装TL。TL继续计数。TL(8位)TH(8位)震荡器1/12TF中断控制T引脚TRGATEINTC/T=1C/T=03,方式2

:8位自动重装定时器/计数器8位加1计数器8位初值寄存器方式2的特点及应用8位计数器的方式,定时或计数的范围远远小于方式0和方式1;具备初值“硬件自动重装”功能,非常适合进行重复性定时的场合,如产生连续方波信号等。编成中省去了软件重装初值的麻烦;在MCS-51单片机中,T1设定成此模式用于做串行口波特率发生器。将T0和T1重新进行“拆分、组合”。将T0变为TH0,TL0组成的两个独立的8位定时/计数器。TH0+TF1+TR1组成8位定时/计数器;TL0+TF0+TR0组成8位定时/计数器;TL0震荡器1/12TF0中断控制T0引脚TR0GATEINT0C/T=0C/T=1TH0TF1中断控制TR1Fosc/124,方式3

组合扩展模式(仅适用于T0)在方式3时T0,T1的电路结构图TL0八位定时/计数器TH0八位定时器TL1TF0TF1将T0分解为两个计数器TL0:8位定时/计数器;TH0:8位定时器(借用TR1和TF1)T1(模式2)做波特率发生器。TH1定时/计数器4种方式比较(计数最大值)模式计数模M最大计数值模式013位Tmax=213=8192模式116位Tmax=216=

65536模式2,38位Tmax=28=256定时/计数器4种方式比较(定时最大时间)模式计数模M最大定时时间Tmax(fosc=12M)模式013位Tmax=8192*1μЅ

=8.192ms模式116位Tmax=65536*1μЅ=65.536ms模式2,38位Tmax=256*1μЅ=0.256msM---计数器的模 模式0:M=213 =8192

模式1:M=216 =65536

模式2、3:M=28=256T=(M-TC)×t

其中,T:定时时间,M:计数器的模,TC:计数初值,t:计数器计数脉冲的周期(t=12/fosc)。四、51单片机初值的计算TC计算举例定时方式:要求T0产生50mS的定时。【解1】选择模式1。

TC=65536−(50mS*1000)/1μS =65536−50000 =15536=3CB0H【思考题】为什么选择模式1?【思考题】TC有没有更简洁的表示方式?

TH=(65536-50000)/256;TL==(65536-50000)%256;TH=(-50000)/256;TL==(-50000)%256;(1)设置定时/计数器的工作方式通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,以及工作方式及启动方法。(2)设置定时/计数器的初始值,即设置THx和TLx的值。

定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。五、定时/计数器的应用步骤(3)启动定时/计数器当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计数溢出时才能中断CPU当前的操作。

(4)计数溢出计数溢出标志位在控制寄存器TCON中,用于通知用户定时/计数器已经计满,用户可以采用查询方式或中断方式进行操作。中断方式查询方式定时/计数器的编程六、51单片机定时器编程与控制(1)中断方式——编程步骤设置中断优先级,当中断只有一个时不用设置设置TMOD初始化设置定时/计数初值启动定时/计数器编写定时/计数器中断的处理服务程序124563编程步骤开中断(2)查询方式——编程步骤设置TMOD初始化设置定时/计数初值启动定时/计数器查询溢出标志位TF0或TF1置位情况及相关处理1

2

4

5

3

开中断编程步骤任务:利用单片机定时/计数器实现1位简易秒表的设计,显示时间0到9秒。

举例任务分析任务的关键是定时,可以利用单片机内部定时/计数器完成。当单片机晶

温馨提示

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

评论

0/150

提交评论