书签 分享 收藏 举报 版权申诉 / 357
上传文档赚钱

类型单片机C语言案例教程电子教案课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4190369
  • 上传时间:2022-11-18
  • 格式:PPT
  • 页数:357
  • 大小:15.25MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《单片机C语言案例教程电子教案课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    单片机 语言 案例 教程 电子 教案 课件
    资源描述:

    1、第1章 单片机基础第3章 用数码管模拟的循环灯第4章 中断资源的应用编程第5章 日历时钟DS1302的应用编程第6章 AT24C02的应用编程第7章 DS18B20的应用编程第8章 有时控功能和温度显示的电子钟项目设计第9章 1616点阵LED汉字显示屏项目设计第10章 使用片内EEPROM存储器第11章 单片机与PC的串行通信第12章 单片机片外数据存储器的扩充第13章 A/D转换与D/A转换简介 1 我们所说的单片机,是一块集成电路芯片。下面的三个型号的单片机芯片,都属于8051系列,其品牌为STC。它们的内部组成可认为完全相同,都能直接用在本书单片机学习板的MCU插座上,但性能有所差异。

    2、左上为STC89C52的实物图,其片内存储器容量大于STC89C51。左中为STC90C52的实物图,可替代STC89C52,且性能更好。1.1 单片机是块集成电路芯片 左下为STC12C5A32的实物图,是所谓的1T单片机,其工作速度比上面两个型号快得多。左图为8051系列单片机的引脚功能图,它采用双列直插40引脚封装,它所有引脚的功能我们要全部记住。1 本书单片机学习板电原理路图 案例1:编程实现,在4位数码管的最左位上显示“8。”案例源程序案例源程序#include reg51.hsbit qw=P20;main()P0=0;qw=0;程序的第1行称为预处理命令。第2行是定义位寻址变量。

    3、第3行第7行是程序的主函数。C程序是由若干个C函数组成,其中必须有一个也只能有一个名为“main”的函数。main函数就是主函数。第3行称为函数头,第4行第7行称为函数体,第4行的大括号“”称为函数体的开始标志,第7行的“”称为函数体的结束标志,开始标志与结束标志之间是若干语句。语句以分号“;”为结束标志。这个程序运行时的所有功能,是由两个赋值语句具体实现:赋值语句“P0=0;”使口0的8个引脚,即单片机芯片的第39、38、37、36、35、34、33、32全部输出低电平,从而使四位数码管的所有(32只)发光二极管的负极均为低电平;赋值语句“qw=0”使口2的最低位引脚,即单片机芯片的第21脚

    4、为低电平,这就使单片机学习板上的PNP管Q3的基极为低电平而导通,从而使最左边位数码管的8只发光二极管正极为高电平。1 首先,在桌面上双击首先,在桌面上双击Keil的图标,如下图箭头所指。的图标,如下图箭头所指。一一 建立工程文件建立工程文件 在上图的在上图的“保存在(保存在(I)”下拉列表框中选择下拉列表框中选择D盘下的盘下的“stc89c52”文件夹,在文件名文本框中,输入工程名文件夹,在文件名文本框中,输入工程名“stc89c52”,然后单击,然后单击“保存保存”。此时,系统将弹出。此时,系统将弹出CPU选择选择窗口,如下页图。窗口,如下页图。在上图中往下拉滚动条,选中在上图中往下拉滚动

    5、条,选中“AT89C52”,如下页如下页图。图。1 在菜单栏中单击在菜单栏中单击“File”菜单及其子菜单菜单及其子菜单“New”子菜子菜单,此时在工作界面中会弹出一文本编辑窗口,如下图。单,此时在工作界面中会弹出一文本编辑窗口,如下图。说明:单片机程序的编写,就是在上面这一窗口中进行。说明:单片机程序的编写,就是在上面这一窗口中进行。注意:这里必须输入注意:这里必须输入C51源程序的扩展名源程序的扩展名“.c”来保存。来保存。在上图菜单中单击在上图菜单中单击“Add Files to Group Source Group1”,则弹出如下页对话框。,则弹出如下页对话框。上图编译信息窗中最后一行

    6、告诉我们,源程序有上图编译信息窗中最后一行告诉我们,源程序有0个错误和个错误和0个警告。这是最好个警告。这是最好结论。有结论。有1个错误都不能通过编译,必须针对错误提示信息进行修改。对警告个错误都不能通过编译,必须针对错误提示信息进行修改。对警告则可改可不改。则可改可不改。按下载软件的提示,关闭一下单片机电源再打开,就可看到下载过程和进度,下载完成后,就可看到单片机四位数码管左边显示的”8。”。1.5.1 案例案例2:数码管上的:数码管上的“8。8。”显示显示1 源程序源程序#include reg51.hsbit qw=P20;sbit bw=P21;/增加的一个位寻址变量定义main()P

    7、0=0;qw=0;bw=0;/增加的一个赋值语句 2 源程序分析:本程序用三个赋值语句实现了它的功能。第一源程序分析:本程序用三个赋值语句实现了它的功能。第一个赋值语句使个赋值语句使P0代表的口代表的口0的的8条条I/O引脚输出低电平,从而使引脚输出低电平,从而使四位数码管共四位数码管共32个发光二极管的负极为低电平;第二个赋值语个发光二极管的负极为低电平;第二个赋值语句、第三个赋值语句分别使口句、第三个赋值语句分别使口2的最低两位引脚输出低电平,从的最低两位引脚输出低电平,从而使而使PNP管管Q2、Q3导通,进而使左边两位数码管的共阳极上导通,进而使左边两位数码管的共阳极上为高电平。于是,左

    8、边两位数码管上的发光二极管全亮。也就为高电平。于是,左边两位数码管上的发光二极管全亮。也就是,在四位数码管的左边显示出是,在四位数码管的左边显示出“8。8。”。案例2程序的流程图案例1程序的流程图用自然语言描述操作步骤用自然语言描述操作步骤用用C 语句描术操作步语句描术操作步骤骤5 案例案例2程序的下载操作与运行效果程序的下载操作与运行效果#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.

    9、3位寻址变量名void main()qw=1;/这四个语句的作用是关断四位数码管 bw=1;sw=1;gw=1;P0=0 x80;/赋8的笔段码 qw=0;/接通千位上的数码管 qw=1;/关断千位上的数码管 P0=0 xc0;/赋0的笔段码 bw=0;bw=1;P0=0 x92;/赋5的笔段码 sw=0;sw=1;P0=0 xf9;/赋1的笔段码 gw=0;gw=1;1 源程序 本案例中对四位数码管的每一位都要进行控制,因此要定义四个位寻址变量:qw、bw、sw和gw。主函数由五个执行段组成。第一执行段有四个赋值语句,作用是关断四个数码管的显示;第二段有三个赋值语句,作用是在数码管的第1位(

    10、从左数到右,下同)上显示“8”后关断;第三段是在数码管的第2位上显示“0”后关断;第四段是在数码管的第3位上显示“5”后关断;第五段是在数码管的第4位上显示“1”后关断。3 案例案例3程序的流程图程序的流程图3 物理现象解惑:案例3中本应一闪而过的“8051”变成了显示长在的“8051”,其原因在于编译系统。单片机程序是在编译系统的迫使下,被动地重复运行,“8051”的显示才永不休止。下面的程序,是程序自己主动地进行“8051”的重复显示。从视觉效果上看,被动形式的“8051”,比主动形式的“8051”亮度要小。1 对案例3程序的基本分析:在案例3中,main函数中的最后一个操作是“gw=1;

    11、”,这就是关掉第4位数码管的显示,按此程序设计的本来效果,数码管上显示的“8051”应是一闪而过,此后数码管因全部被关断而无任何显示。2 案例3程序的一个推论:编译系统有个特殊处理,即在main函数结束而返回的指令处,加了一条跳转指令,迫使单片机程序重新运行。4 源程序源程序#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名void main()while(1)/循环结构 q

    12、w=1;/这四个语句的作用是关断四位数码管 bw=1;sw=1;gw=1;P0=0 x80;/赋8的笔段码 qw=0;/接通千位上的数码管 qw=1;/关断千位上的数码管 P0=0 xc0;/赋0的笔段码 bw=0;bw=1;P0=0 x92;/赋5的笔段码 sw=0;sw=1;P0=0 xf9;/赋1的笔段码 gw=0;gw=1;案例源程序要点分析:与案例3的源程序相比,案例4源程序中的5个执行段,被一个while循环架构所管辖。在此,先简单地说明一个要点,当while后面的小括号中是整数1是,它大括号中的所有语句,将被无数轮重复执行。因此,在案例4程序中,while下面大括号中的那16个赋

    13、值语句,从上到下依次执行一轮后,又将回到上面,又从上到下依次执行一轮,再回到上面,如此永无休止地循环下去,从而实现“8051”的正常显示 5 案例程序分析及流程图流程图流程图#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名Disp_led()qw=1;/这四个语句的作用是关断四位数码管 bw=1;sw=1;gw=1;P0=0 x80;/赋8的笔段码 qw=0;/接通千位上的

    14、数码管 qw=1;/关断千位上的数码管 P0=0 xc0;/赋0的笔段码 bw=0;bw=1;P0=0 x92;/赋5的笔段码 sw=0;sw=1;P0=0 xf9;/赋1的笔段码 gw=0;gw=1;1 源程序void main()while(1)Disp_led();案例5这个程序的运行特点是,执行流程从主函数进入后,就进入其中的while循环,while循环的循环体中,只有一个函数调用语句“Disp_led();”,执行这一函数调用语句,程序执行流程就跳转到Disp_led函数中继续执行,即从上到下依次执行那16个赋值语句,第16个赋值语句执行完就是Disp_led函数的结束标志“”,被

    15、调函数运行到其结束标志时,程序执行流程就从被调函数返回到主调函数原调用处继续往下执行,原调用语句下面就是循环体的结束标志“”,因此又进入下一次“Disp_led();”调用,程序执行流程又跳转到Disp_led函数上执行,Disp_led()执行完毕后又返回到主调函数的循环结构中,从而形成无数次的“Disp_led();”函数调用。1 案例源程序:案例源程序:#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/

    16、定义MCU管脚P2.3位寻址变量名Delay()unsigned int i;for(i=1;i500;i=i+1);Disp_led()qw=1;bw=1;sw=1;gw=1;P0=0 x80;qw=0;/接通千位上的数码管 Delay();/延时 qw=1;/关断千位上的数码管 P0=0 xc0;bw=0;Delay();bw=1;P0=0 x92;sw=0;Delay();sw=1;P0=0 xf9;gw=0;Delay();gw=1;main()while(1)Disp_led();2 案例6程序的流程图1 程序的组成程序的组成 案例案例6的源程序由三部分组成。的源程序由三部分组成。第

    17、一部分是预处理部分,预处理命令都是用第一部分是预处理部分,预处理命令都是用“#”号打头,号打头,本程序中只有一个文件包含的预处理命令。本程序中只有一个文件包含的预处理命令。第二部分是全局变量定义部分。本程序中有四个定义位第二部分是全局变量定义部分。本程序中有四个定义位寻址变量的语句。寻址变量的语句。第三部分是函数定义部分。本程序中定义了三个函数。第三部分是函数定义部分。本程序中定义了三个函数。2 文件包含命令的作用 文件包含的作用,是将系统或别人的编程文档直接添进我们的程序中,以提高编程的效率和程序的通用性。在“REG51.h”这个头文件中,定义了代表单片机诸多硬件的很多符号,例如P0、P1等

    18、等。用文件包含的手段加进我们的程序中,就省去了自己去定义的麻烦。文件包含命令具体的操作,就是在编译时把该文件的全部内容放在该文件包含命令的位置上。3 定义位寻址变量的作用定义位寻址变量的作用 用符号来代表单片机的某用符号来代表单片机的某I/O引脚,从而用对这些符号的赋引脚,从而用对这些符号的赋值来使对应的值来使对应的I/O脚,输出所指定的高电平或低电平。进而用这脚,输出所指定的高电平或低电平。进而用这些些I/O引脚去控制单片机外围电路引脚去控制单片机外围电路。4 函数的作用函数的作用 用函数来实现程序的功能,用函数的调用来提高编程的效用函数来实现程序的功能,用函数的调用来提高编程的效率。单片机

    19、率。单片机C程序中,必须有一个且只能有一个名为程序中,必须有一个且只能有一个名为main的主的主函数,还可以有若干其它函数。函数,还可以有若干其它函数。5 函数定义的格式要求和组成说明 定义函数的基本格式如下:函数名()语句序列 组成说明:函数名可用英文字符标识,函数名后面的小括号对是函数的标记。函数名及其后的小括号对组成函数的函数头。函数头后的大括号对表示函数体,函数体内是若干语句。注意,函数头后面不能有分号。6 函数调用语句 C程序中,主函数main可以调用其它函数,而其它函数都不能调用main函数,但其它函数间可以相互调用。函数调用可以用函数调用语句来实现。main函数中的while循环

    20、的循环体语句“Disp_led();”,Disp_led函数中的四个“Delay();”语句,都是函数调用语句。7 案例6源程序的程序架构和函数调用层次图 程序中共有三个函数:main、Disp_led、Delay,其程序架构见图1-26。当main函数调用Disp_led函数时,main是主调函数,Disp_led是被调函数;当Disp_led函数调用Delay函数时,Disp_led是主调函数,Delay是被调函数。程序架构和函数调用层次图如下。8 函数调用时程序执行的流程转移 在案例6中,当程序从main函数运行而执行到函数调用语句“Disp_led();”时,程序执行流程就从main函

    21、数中,跳转到Disp_led函数,就是从其函数头进入Disp_led函数,并在Disp_led函数中,从上至下依次执行所有语句。当程序在Disp_led函数中运行而执行到“Delay();”语句时,执行流程就从Disp_led函数跳转到Delay函数,也就是从函数头进入Delay函数,当程序执行流程在Delay函数中执行到Delay函数的结束标志“”时,执行流程就从Delay函数返回到Disp_led函数中,具体就是去执行其调用语句“Delay();”的下一语句。当执行到Disp_led函数的结束标志“”时,执行流程就从Disp_led函数,返回到调用它的main函数中,具体位置就是while

    22、循环语句的循环体。9赋值语句的一般形式和作用 赋值语句的一般形式如下:变量名=表达式;其中,变量名用英文字母标识,表达式在本章中暂时用整数。赋值语句的作用就是把赋值号“=”右边的数据赋给左边的变量。因此,赋值号“=”不是表示其左右两边相等的符号,而是表示一种装入操作,这就是把“=”号右边的数据,装入“=”号左边的“仓库”(变量就是仓库)中。如“i=1;”,就是把数据1装入变量i中。又如“i=i+1;”,就是把变量i中的数据取出来加上1后再装入变量i中。10 对数码管的编程 首先要明确,四位数码管中不能同时有两位以上的数码管被打开显示。只能一位一位地进行显示。要让数码管的某一位显示一位数,只需两

    23、个赋值语句。一个赋值语句用来将那个数的笔段码赋给P0,另一个赋值语句用来将相应的位寻址变量置0。11 while(1)语句序列的作用 语句while(1)语句序列 是语句while(表达式)语句序列的特殊形式。while(1)语句序列的作用就是让大括号中的所有子语句永无休止地执行下去。关于while语句的一般形式和执行规则,见第2章相应内容。12 for语句号的作用和执行规律 语句for的作用就是让其子句重复执行若干次。例如,有下面的程序段:int s,n;s=0;for(n=1;n11;n=n+1)s=s+n;从循环头for(n+1;n11;n=n+1),可推知,其循环体要执行10次,循环结

    24、束后,变量s的值是55。关于for语句的一般形式和执行规则,见第2章相应内容。系统中自带的头文件“REG51.h”的全部内容如下:/*-REG51.HHeader file for generic 80C51 and 80C31 microcontroller.Copyright(c)1988-2002 Keil Elektronik GmbH and Keil Software,Inc.All rights reserved.-*/#ifndef _REG51_H_#define _REG51_H_/*BYTE Register */sfr P0 =0 x80;sfr P1 =0 x90;s

    25、fr P2 =0 xA0;sfr P3 =0 xB0;sfr PSW =0 xD0;sfr ACC =0 xE0;sfr B =0 xF0;sfr SP =0 x81;sfr DPL =0 x82;sfr DPH =0 x83;sfr PCON=0 x87;sfr TCON=0 x88;sfr TMOD=0 x89;sfr TL0 =0 x8A;sfr TL1 =0 x8B;sfr TH0 =0 x8C;sfr TH1 =0 x8D;sfr IE =0 xA8;sfr IP =0 xB8;sfr SCON=0 x98;sfr SBUF=0 x99;/*BIT Register */*PSW *

    26、/sbit CY =0 xD7;sbit AC =0 xD6;sbit F0 =0 xD5;sbit RS1 =0 xD4;sbit RS0 =0 xD3;sbit OV =0 xD2;sbit P =0 xD0;/*TCON */sbit TF1 =0 x8F;sbit TR1 =0 x8E;sbit TF0 =0 x8D;sbit TR0 =0 x8C;sbit IE1 =0 x8B;sbit IT1 =0 x8A;sbit IE0 =0 x89;sbit IT0 =0 x88;/*IE */sbit EA =0 xAF;sbit ES =0 xAC;sbit ET1 =0 xAB;sbi

    27、t EX1 =0 xAA;sbit ET0 =0 xA9;sbit EX0 =0 xA8;/*IP */sbit PS =0 xBC;sbit PT1 =0 xBB;sbit PX1 =0 xBA;sbit PT0 =0 xB9;sbit PX0 =0 xB8;/*P3 */sbit RD =0 xB7;sbit WR =0 xB6;sbit T1 =0 xB5;sbit T0 =0 xB4;sbit INT1=0 xB3;sbit INT0=0 xB2;sbit TXD =0 xB1;sbit RXD =0 xB0;/*SCON */sbit SM0 =0 x9F;sbit SM1 =0 x

    28、9E;sbit SM2 =0 x9D;sbit REN =0 x9C;sbit TB8 =0 x9B;sbit RB8 =0 x9A;sbit TI =0 x99;sbit RI =0 x98;#endif 从上面的代码中,我们看到,该头文件主要是用了sfr和sbit这两个关键字,去定义了51系列单片机内部所有寄存器硬件的符号名。如“sfr P0=0 x80”,就用“P0”来表示单片机内部地址为0X80的特殊功能寄存器。因此,我们在程序中就可直接用P0表示地址为0X80处的寄存器,进而用语句来操作这个寄存器。如果没有用文件包含的方法包含进来,就只能让我们自己来定义,就要多做很多工作。基于这个道

    29、理,我们要在程序中的第一行,放上包含这个文件的预处理命令。这样,就能在程序中,直接使用诸如“P1”,“TH1”“SBUF”等“符号硬件”,省去了用“0X?”去访问单片机的有关硬件,或自己去亲自定义这些符号的麻烦 这就是我们总是在程序的开头,写上一条包含REG51.h文件命令的原因。1 案例效果说明:案例效果说明:并驾齐驱的跑马灯显示效果由六场显示组成,并字的含义是四并驾齐驱的跑马灯显示效果由六场显示组成,并字的含义是四个数码管同步显示同名笔画,即第一场四个数码管都显示笔画个数码管同步显示同名笔画,即第一场四个数码管都显示笔画a,第二场四个数码,第二场四个数码管都显示笔画管都显示笔画b,第三场四

    30、个数码管都显示笔画,第三场四个数码管都显示笔画c,第四场都显示笔画,第四场都显示笔画d、第五场、第五场都显示笔画都显示笔画e,第六场都显示笔画,第六场都显示笔画f。程序整个运行过程如下图。程序整个运行过程如下图。2 案例7源程序/*-案例7:并驾齐驱的跑马灯 -*/#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名/*-延时子函数-*/Delay()unsigned int

    31、i;for(i=1;i 25000;i+);/*-数码管显示函数-*/Disp_led()/做准备工作 qw=0;/*开通千位(左边第一位)上的数码管显示*/bw=0;/开通百位上的数码管显示 sw=0;/开通十位上的数码管显示 gw=0;/开通个位上的数码管显示 /第一场 P0=0 xfe;/把笔划a码赋给P0口 Delay();/延时 /第二场 P0=0 xfd;/把单笔划b码赋给P0口 Delay();/延时 /第三场 P0=0 xfb;/把单笔划c码赋给P0口 Delay();/延时 /第四场 P0=0 xf7;/把单笔划d码赋给P0口 Delay();/延时 /第五场 P0=0 xe

    32、f;/把单笔划e码赋给P0口 Delay();/延时 /第六场 P0=0 xdf;/把单笔划f码赋给P0口 Delay();/延时/*-主函数重复调用显示函数来实现程序功能-*/void main()while(1)Disp_led();3 案例7程序的流程图4 案例7程序的下载操作与运行效果1 案例效果说明:案例效果说明:边关迈步的巡逻灯显示效果由十二场显示组成。第一场显示千位数码管上的边关迈步的巡逻灯显示效果由十二场显示组成。第一场显示千位数码管上的a笔画;第二场显示百位数码管上的笔画;第二场显示百位数码管上的a笔画;第三场显示十位数码管上的笔画;第三场显示十位数码管上的a笔画;笔画;第四

    33、场显示个位数码管上的第四场显示个位数码管上的a笔画;第五场显示个位数码管上的笔画;第五场显示个位数码管上的b笔画;第六场笔画;第六场显示个位数码管上的显示个位数码管上的c笔画;第七场显示个位数码管上的笔画;第七场显示个位数码管上的d笔画;第八场显示十笔画;第八场显示十位数码管上的位数码管上的d笔画;第九场显示百位数码管上的笔画;第九场显示百位数码管上的d笔画;第十场显示千位数码笔画;第十场显示千位数码管上的管上的d笔画;第十一场显示千位数码管上的笔画;第十一场显示千位数码管上的e笔画;第十二场显示千位数码管笔画;第十二场显示千位数码管上的上的f笔画。示意图如下。笔画。示意图如下。2 案例源程序

    34、/*-案例8:迈步边关的巡逻灯 -*/#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名void Delay();/声明函数Delay()void Disp_led();/声明函数Disp_led/*-主函数重复调用数码管显示函数以显示巡逻灯-*/void main()while(1)Disp_led();/*-数码管显示函数-*/void Disp_led()/准备工作 q

    35、w=1;/关断千位上的数码管显示 bw=1;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 /第一场 P0=0 xfe;/把笔画a的显示码赋给P0口 qw=0;/*开通千位(左边第一位)上的数码管显示*/Delay();/延时 qw=1;/关断千位上的数码管显示 /第二场 P0=0 xfe;/把笔画a的显示码赋给P0口 bw=0;/*开通百位(左起第二位)上的数码管显示*/Delay();/延时 bw=1;/关断百位上的数码管显示/第三场 P0=0 xfe;/把笔画a的显示码赋给P0口 sw=0;/*开通十位(左起第三位)上的数码管显示*/De

    36、lay();/延时 sw=1;/关断十位上的数码管显示/第四场 P0=0 xfe;/把笔画a的显示码赋给P0口 gw=0;/*开通个位(左起第四位)上的数码管显示*/Delay();/延时 gw=1;/关断个位上的数码管显示/第五场 P0=0 xfd;/把笔画b的显示码赋给P0口 gw=0;/*开通个位(左起第四位)上的数码管显示*/Delay();/延时 gw=1;/关断个位上的数码管显示 /第六场 P0=0 xfb;/把笔画c的显示码赋给P0口 gw=0;/*开通个位(左起第四位)上的数码管显示*/Delay();/延时 gw=1;/关断个位上的数码管显示 /第七场 P0=0 xf7;/把

    37、笔画d的显示码赋给P0口 gw=0;/*开通个位(左起第四位)上的数码管显示*/Delay();/延时 gw=1;/关断个位上的数码管显示 /第八场 P0=0 xf7;/把笔画d的显示码赋给P0口 sw=0;/*开通十位(左起第三位)上的数码管显示*/Delay();/延时 sw=1;/关断十位上的数码管显示 /第九场 P0=0 xf7;/把笔画d的显示码赋给P0口 bw=0;/*开通百位(左起第二位)上的数码管显示*/Delay();/延时 bw=1;/关断百位上的数码管显示 /第十场 P0=0 xf7;/把笔画a的显示码赋给P0口 qw=0;/*开通千位(左边第一位)上的数码管显示*/De

    38、lay();/延时 qw=1;/关断个位上的数码管显示 /第十一场 P0=0 xef;/把笔画e的显示码赋给P0口 qw=0;/*开通千位(左边第一位)上的数码管显示*/Delay();/延时 qw=1;/关断个位上的数码管显示 /第十二场 P0=0 xdf;/把笔画f的显示码赋给P0口 qw=0;/*开通千位(左边第一位)上的数码管显示*/Delay();/延时 qw=1;/关断个位上的数码管显示/*-延时函数-*/void Delay()unsigned int i;for(i=0;i 25000;i+);3 案例案例8程序的流程图程序的流程图4 案例案例8程序的下载操作与运行效果程序的下

    39、载操作与运行效果1 案例效果说明:案例效果说明:大江东去的流水灯显示效果由八场显示组成,第一场显示千位大江东去的流水灯显示效果由八场显示组成,第一场显示千位数码管上的数码管上的e、f两笔画;第二场显示千位数码管上的两笔画;第二场显示千位数码管上的b、c两笔画;两笔画;第三场显示百位数码管上的第三场显示百位数码管上的e、f两笔画;第四场显示百位数码管上两笔画;第四场显示百位数码管上的的b、c两笔画;第五场显示十位数码管上的两笔画;第五场显示十位数码管上的e、f两笔画;第六场两笔画;第六场显示十位数码管上的显示十位数码管上的b、c两笔画;第七场显示个位数码管上的两笔画;第七场显示个位数码管上的e、

    40、f两笔画;第八场显示个位数码管上的两笔画;第八场显示个位数码管上的b、c两笔画。各场显示的示两笔画。各场显示的示意图如下。意图如下。2 案例源程序案例源程序/*-案例9:大江东去的流水灯 -*/#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名/*-主函数重复调用显示函数字以显示巡逻灯-*/void main()while(1)Disp_led();/*-数码管显示函数-*/

    41、Disp_led()/第一场 qw=0;/*开通千位(左边第一位)上的数码管显示*/bw=1;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 P0=0 xcf;/把f、e笔画的显示码赋给P0口 Delay();/延时 /第二场 qw=1;/*开通千位(左边第一位)上的数码管显示*/bw=0;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 P0=0 xf9;/把b、c笔画的显示码赋给P0口 Delay();/延时 /第三场 qw=1;/关断千位上的数码管显示 bw=0;/*开通百位(左起第二位)上

    42、的数码管显示*/sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 P0=0 xcf;/把f、e笔画的显示码赋给P0口 Delay();/延时 /第四场 qw=1;/关断千位上的数码管显示 bw=0;/*开通百位(左起第二位)上的数码管显示*/sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 P0=0 xf9;/把c、b笔画的显示码赋给P0口 Delay();/延时 /第五场 qw=1;/关断千位上的数码管显示 bw=1;/关断百位上的数码管显示 sw=0;/*开通十位(左起第三位)上的数码管显示*/gw=1;/关断个位上的数码管显示 P0=0 xcf

    43、;/把f、e笔画的显示码赋给P0口 Delay();/延时 /第六场 qw=1;/关断千位上的数码管显示 bw=1;/关断百位上的数码管显示 sw=0;/*开通十位(左起第三位)上的数码管显示*/gw=1;/关断个位上的数码管显示 P0=0 xf9;/把c、b笔画的显示码赋给P0口 Delay();/延时 /第七场 qw=1;/关断千位上的数码管显示 bw=1;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=0;/*开通个位(左起第四位)上的数码管显示*/P0=0 xcf;/把f、e笔画的显示码赋给P0口 Delay();/延时 /第八场 qw=1;/关断千位上的数码管显示

    44、 bw=1;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=0;/*开通个位(左起第四位)上的数码管显示*/P0=0 xf9;/把c、b笔画的显示码赋给P0口 Delay();/延时/*-延时函数-*/Delay()unsigned int i;for(i=0;i 25000;i+);3 案例9程序的流程图4 案例9程序的下载操作与运行效果1 案例效果说明案例效果说明:本案例的显示效果由本案例的显示效果由4场组成。第一场显示出四个数码管中间场组成。第一场显示出四个数码管中间的的4个竖笔画,第二场显示出四个数码管中间的个竖笔画,第二场显示出四个数码管中间的8个竖笔画,第三个竖

    45、笔画,第三场显示出中间的场显示出中间的12个竖笔画,第四场显示出全部竖笔画。用这四个竖笔画,第四场显示出全部竖笔画。用这四场的循环显示,模拟孔雀开屏的效果。场的循环显示,模拟孔雀开屏的效果。2 案例源程序案例源程序/*-案例10:孔雀开屏式循环灯 -*/#include reg51.hsbit qw=P20;/定义MCU管脚P2.0位寻址变量名sbit bw =P21;/定义MCU管脚P2.0位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名unsigned char q,b,s,g;/定义相应位的笔画码变量,提

    46、高笔画 /显示的灵活性/*-延时函数-*/Delay()unsigned int i;for(i=0;i 500;i+);/*-数码管显示函数-*/Disp_led()/准备工作 qw=1;/关断千位上的数码管显示 bw=1;/关断百位上的数码管显示 sw=1;/关断十位上的数码管显示 gw=1;/关断个位上的数码管显示 /第一时段:显示千位上的数码管 P0=q;/用变量为笔划码赋给P0口 qw=0;/*开通千位(左边第一位)上的数码管显示*/Delay();/延时 qw=1;/关断千位上的数码管显示 /第二时段:显示百位上的数码管 P0=b;/用变量为笔划码赋给P0口 bw=0;/*开通百位

    47、(左起第二位)上的数码管显示*/Delay();/延时 bw=1;/关断百位上的数码管显示 /第三时段:显示十位上的数码管 P0=s;/用变量为笔划码赋给P0口 sw=0;/*开通十位(左起第三位)上的数码管显示*/Delay();/延时 sw=1;/关断十位上的数码管显示 /第四时段:显示个位上的数码管 P0=g;/用变量为笔划码赋给P0口 gw=0;/*开通个位(左起第四位)上的数码管显示*/Delay();/延时 gw=1;/关断个位上的数码管显示/*-主函数-*/void main()int a,n;while(1)for(a=1;a=4;a+)if(a=1)q=0 xff;b=0 x

    48、f9;s=0 xcf;g=0 xff;if(a=2)q=0 xff;b=0 xc9;s=0 xc9;g=0 xff;if(a=3)q=0 xf9,b=0 xc9,s=0 xc9,g=0 xcf;if(a=4)q=0 xc9,b=0 xc9,s=0 xc9,g=0 xc9;for(n=1;n50;n+)Disp_led();3 案例案例10程序的流程图程序的流程图4 案例案例10程序的下载操作与运行效果程序的下载操作与运行效果1 案例效果说明案例效果说明:本案例的显示效果由本案例的显示效果由8场组成。第一场只在千位数码管上显示场组成。第一场只在千位数码管上显示8;第二场只在千位数码管和百位数码管

    49、上分别显示;第二场只在千位数码管和百位数码管上分别显示8和和0;第三场只在左边三个数码管上分别显示;第三场只在左边三个数码管上分别显示8、0、5;第四场四个数码管分别显示;第四场四个数码管分别显示8、0、5、1;第五场关掉全部显示;第六场显示完整的;第五场关掉全部显示;第六场显示完整的“8051”;第第七场关掉全部显示;第八场再显示完整的七场关掉全部显示;第八场再显示完整的“8051”。这个奔腾不。这个奔腾不息的息的”8051”显示示意图如下图。显示示意图如下图。2 案例源程序案例源程序/*-案例11:奔腾不息的8051 -*/#include reg51.hsbit qw=P20;/定义MC

    50、U管脚P2.0位寻址变量名sbit bw=P21;/定义MCU管脚P2.1位寻址变量名sbit sw=P22;/定义MCU管脚P2.2位寻址变量名sbit gw=P23;/定义MCU管脚P2.3位寻址变量名bit q=0;bit b=0;bit s=0;bit g=0;/*-延时子程序-*/void Delay()unsigned int i;for(i=0;i 500;i+);/*-数码管显示子程序-*/void Disp_led()qw=1;bw=1;sw=1;gw=1;/显示千位上的8 P0=0 x80;/把数字8的笔划码赋给P0口 qw=0|q;/*开通千位(左边第一位)上的数码管显示

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:单片机C语言案例教程电子教案课件.ppt
    链接地址:https://www.163wenku.com/p-4190369.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库