




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
吉林工程师范学院单片机实训报告时间: 2013年五月 班级: 测控1041班 学号: 姓名: 指导老师: 摘要单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,都离不开单片机。然而单片机的程序需要汇编语言来完善其硬件部分的强大功能,但是普通的汇编语言根本就不方便移植,恰巧目前的主流单片机都支持C语言编程,因此本文主要浅谈C语言与单片机的联系。关键词:C语言 单片机 自动化目录第一章 绪论11、1 课程设计的目的和意义11、2 系统方案设计及确定1第二章 51单片机结构和原理22、1 51单片机的介绍22、2 单片机的硬件特性22、3 51单片机的结构22、5 51单片机引脚图3第三章 程序的编成与讲解43、1 单片机的语言43、2 从标准C转向Keil C43、3 键盘监测基本原理43、4程序编成介绍5第四章 实验程序的硬件设计124、1复位电路的硬件设计124、2键盘电路硬件设计124、3 显示电路硬件设计13第五章 系统软件设计165、1 系统主程序设计165、1、1键盘与数码管动和静态显示实验165、1、2计算占空比实验205、1、3串行口自发自收实验255、2系统调试29第六章 总结30参考文献31第一章 绪论第一章 绪论1、1 课程设计的目的和意义基于单片机的定时和控制装置在许多行业有着广泛的应用,而数码管是其中最基本,也是最具有代表性的一个例子。通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。本次实训还可以通过上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。在这次实训中,我们运用到了很多一切所学的知识和一些很有用的软件和工具,通过独立完成一个小的数码管操作,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。1、2 系统方案设计及确定单片机数码管动态显示程序实验,数码管显示一般分静态显示及动态显示两种驱动方式,静态显示占用口线比较多,本文介绍的是如何实现数码管动态显示,应该说数码管动态显示是单片机外部指令输出的重要途径,因此如何设计数码管以及数码管的工作原理、数码管显示的方法、数码管显示的抗干扰设计等在单片机系统设计中占有重要地位。这个例子在系统硬件的基础上设计了软件查询程序、软件延时程序(防止干扰),大致讲述了一种数码管动态显示的工作原理与读取方式。 20第二章 51单片机结构和原理第二章 51单片机结构和原理2、1 51单片机的介绍单片微型计算机简称单片机,也称为微控制器(Micro Controller Unit),英文缩写为MCU.单片机的结构及功能均是按照工业控制要求而设计的,它把微型计算机的宫格功能部件(中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入输出I/O接口、定时器/计数器以及串行通信接口等)集成在一块芯片上,构成一个完整的微型计算机,故又称为单片微型计算机。除工业领域外,单片机还广泛应用于各种民用电子、电器之中。MCS-51是由美国INTEL公司20世纪80年代生产的一系列8位单片机的总称,此系列单片机包括很多型号,如:8031、8051、8751、8032、8052等,其中8051是最早最典型的产品。该系列其他单片机都是在8051的基础上进行功能的增、减改变而来的,所以人们习惯用8051来称呼MCS-8051系列单片机,而其中的8031在20世纪80年代末90年代初是我国最流行的单片机之一。INTEL公司后来将MCS-51的核心技术授权给了其他公司,现在生产8051内核单片机的公司,主要有ATMEL、WINBOND、NXP、NCDRAGON等。随着技术的发展,各种高性能的16位、32位MCU不断出现,但以8051、PIC、AVG以及MC68HC等系列为典型代表的8位MCU,由于成本低、开发工具完善、易学易用等特点,仍具有强大的生命力和极高的实使用价值。2、2 单片机的硬件特性1、单片机集成度很高。单片机主要包括CPU、4KB容量的ROM、128 B容量的RAM、 2个16位定时/计数器、4个8位并行口、全双工串口行口; 2、系统结构简单,使用便捷,实现模块化;3、单片机可靠性高,可以工作到106107小时无故障; 4、处理功能强,速度快,工作可靠。2、3 51单片机的结构单片机由运算器、控制器、存储器、输入输出设备构成。8051单片机的基本结构:1、8位CPU,片内振荡器;2、4KB程序存储器ROM(4096个8位淹没ROM);3、128字节的数据存储器RAM(128个8位淹没RAM);4、21个特殊功能寄存器;5、32条I/O口线;6、外部数据存储器寻址空间为64KB。外部程序存储器寻址空间为64KB;7、2个16位的可编程定时/计数器;8、中断结构具有5个中断源,2个优先级;9、一个全双工串行通信口;10、有位寻址功能,适于布尔处理的位处理机制;2、5 51单片机引脚图下图2-1是51单片机的引脚图。2-1 51单片机第三章 程程序的编成与讲解第三章 程序的编成与讲解3、1 单片机的语言常用的单片机语言有很多,如:汇编、C语言、BASIC、C+等,对51单片机而言,使用最为广泛的还是汇编语言和C语言。有经验的程序员用汇编语言可以写出高效率的程序,但每种语言都有自己个子的特点。3、2 从标准C转向Keil CC51是专门为51系列单片机设计的,根据51单片机自身的特点进行了若干扩展,与ANSIC在语法和库函数方面存在稍许差别,但绝大部分是兼容的。但在学习中,使用最多的还是Keil C8.08 u Vision3。1、Keil C上机的基本方法(1)在uVision 3集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机型号;(2)利用uVision 3的文件编译器编写C语言(或者汇编语言)源程序文件,并将文件添加到项目中去;(3)通过uVision 3的各种选项,配置Cx51编译器、Ax51宏编译器、BL51/Lx51连接定位器以Debug 调试器的功能;(4)利用uVision 3的构造功能对项目中的源程序文件进行编译链接,生成绝对目标代码和可选的HEX格式的可执行文件,如果出现编译链接错误则返回上一步,修改源程序中的错误后重新构造整个项目;(5)将没有错误的绝对目标代码装入uVision 3调试器进行仿真调试,调试成功后用编程器将可执行文件写入到单片机应用系统的程序存储器或者单片机内部的Flash ROM中。3、3 键盘监测基本原理键盘犹如一个开关,其原理图如下3-1所示。当键盘未闭合时,A点为高电平,当闭合后,电路导通,A点电平拉低,如将A点以某种方式介入计算机系统,计算机就可以通过检测A点电平的高低来判别K键是否闭合。在键的按下和松动过程中,电平都有一个抖动的过程,会引发键的误检测。电平抖动过程一般持续510ms,对抖动过程的处理有硬件消抖和软件消抖,在键较少时可采用硬件方式。但当按键较多时适合用软件消抖方式,如矩阵式键盘。3-1 键盘原理图(1)独立式键盘下图3-2是独立式键盘的接线示意图。其优点是电路简单,检测方便;缺点是与矩阵键盘相比,占用太多IO口,浪费资源。 3-2 独立式键盘(2)矩阵式键盘下图3-3是矩阵式键盘原理图。图中的键盘为4行4列共16个键,行扫描线为X0、X1、X2,X3,列扫描线为Y0、Y1、Y2、Y3。矩阵键盘的识别有行扫描法和行反转法两种。3-3 矩阵式键盘3、4程序编成介绍(1)点亮LED灯我们在单片机最小系统上接个LED,看我们能否点亮它,单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下, 51的31脚须接高电平。 #include /头文件定义 sbit P1_0 = P1 0;void main (void) while(1) P1_0 = 0; /低电平有效,如果把LED反过来接那么就是高电平有效 我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。P1_0 = 0;类似与C语言中的赋值语句,即把0赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。(2)点亮LED灯的顺序显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。 假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在P1_1P1_7上再接7个LED即可。例程如下:#includesbit P1_0 = P1 0;sbit P1_1 = P1 1; sbit P1_2 = P1 2;sbit P1_3 = P1 3;sbit P1_4 = P1 4;sbit P1_5 = P1 5;sbit P1_6 = P1 6;sbit P1_7 = P1 7;void main(void)while(1) P1_0 = 0;Delay(250);P1_0 = 1;P1_1 = 0;Delay(250);P1_1 = 1;P1_2 = 0;Delay(250);P1_2 = 1;P1_3 = 0;Delay(250);P1_3 = 1;P1_4 = 0;Delay(250);P1_4 = 1;P1_5 = 0;Delay(250);P1_5 = 1;P1_6 = 0;Delay(250);P1_6 = 1;P1_7 = 0;Delay(250);P1_7 = 1; void Delay(unsigned char a) unsigned char i; while( -a != 0) for(i = 0; i 125; i+); /一个 ; 表示空语句,CPU空转。 /i 从0加到125,CPU大概就耗时1毫秒(3)数码管显示讲用单片机让数码管显示0-8,8段数码管分为共阴和共阳两种。8段数码管是由8个LED组成(还包括一个小数点)。若为共阳,则8个LED的阳级是连接在一起的,同理若为共阴,则阴极连接在一起。8个LED对应的标号如图3-4:afg be c dpd3-4 a-dp对应图一般情况下,为了计算或取码的方便,我们把a-dp依次接到单片机某个口上的Px.0-Px.7上。x表示0,1,2,3其中的一个。这样我们只要给某个口,赋一个值,则相应的LED段就被点亮,但是在硬件连接上要注意了:单片机可能不能直接驱动LED,所以我们可以通过控制三级管的导通或截止,来控制LED的亮与灭。如果我们把共阴的数码管的a-dp依次接到单片机的P0.0-P0.7上,注意:P0口需接上拉电阻。何为上拉电阻,简单的说,就是把电平拉高,以提高驱动能力。那么比如:P0 = 0X3F;则显示为数字0。因为0X3F 即为2进制的 0011 1111 我们低位往高位数,依次为1111 1100,其I/O的电平分别为高、高、高、高、高、高、低、低,即对应的a-dp 为亮、亮、亮、亮、亮、亮、灭、灭,由上图我们可以看出g和dp段不亮其他段均亮,即为我们所看到的数字 0 字样。其他的数字或字符,也同理可以得到。诸如上述0X3F的数值:#includevoid Delay(unsigned char a) unsigned char i; while( -a != 0) for(i = 0; i 125; i+); void main(void)P0 = 0X3F; /显示 0 Delay(250);/延时P0 = 0X00;/短暂的关闭显示,若不关闭,可能会造成显示模糊不清。P0 = 0X06; /显示 1Delay(250);P0 = 0X00;. /以下显示数字2-F,略。数码管的显示方式,可分为两种:动态扫描和静态显示。上面我们所说的即为静态显示。但是如果我们采用动态扫描显示,那么就可以解决上面的问题,即可以显示多个数码管了。上面我们所说的静态显示把数码管的COM脚接至VCC或GND端,其他的接至PX口上,这样只要PX口上输出相应的高低电平,就可以显示对应的数字或字符。但是如果我们采用动态扫描的方法,比如显示4个数码管,硬件连接可以这样解决:a-dp还是接至P0.0-P0.7上,还有4个COM脚再接至另外口的P2.0-P2.3。P0口作段选(控制数字字符)P2口作位选(选通哪个数码管导通)这样我们控制P0和P2口就可以控制4个数码管了。51单片机的机器周期和时钟周期等概念。所谓机器周期就是访问一次存储器的时间。而1个机器周期包括12个时钟周期。如果单片机工作在12M晶体下,那么一个时钟周期为:1/12微妙。一个机器周期12*1/12 = 1微妙。在任何某一时刻,有且只有一个数码管能发光。#includevoid Delay(unsigned char a) unsigned char i; while( -a != 0) for(i = 0; i 125; i+); void main(void) while(1) P0 = 0x06; /1的码段P2 = 0x01; /选通一位,或者P2_0 = 1; Delay(20); /延时约20毫秒P0 = 0X00; /关闭显示P0 = 0x5b; /2的码段P2 = 0x02; /选通一位,或者P2_1 = 1;Delay(20);P0 = 0X00;P0 = 0x4f; /3的码段P2 = 0x04; /选通一位,或者P2_2 = 1;Delay(20);P0 = 0X00;P0 = 0x66; /4的码段P2 = 0x08; /选通一位,或者P2_3 = 1;Delay(20);P0 = 0X00;P0 = 0x6d; /5的码段P2 = 0x10; /选通一位,或者P2_4 = 1; Delay(20);P0 = 0X00;P0 = 0x7d; /6的码段 P2 = 0x20; /选通一位,或者P2_5 = 1; Delay(20);P0 = 0X00; (4)定时器TMOD = 0X01;/设置定时器0 工作方式如图3-5所示。TH0 = (65536 - 5000) / 256;/载入高8位初值TL0 = (65536 - 5000) % 256;/载入低8位初值TR0 = 1;/启动定时器D7 D6 D5 D4 D3 D2 D1 D0GATE C/T M1 M0 GATE C/T M1 M0 |_ _| |_ _| T/C1 T/C0 3-4 工作方式其中TMOD为T/C方式控制寄存器。C/T就是counter(记数器)和timer(定时器)的选择位,若值为1,则作计数器用。为0,则为定时期用!GATE为门控位。M1和M0工作方式的选择:若M1=0;M0=0 则为方式0:13位定时/记数器。若M1=0;M0=1则为方式1,16定时/记数器。若M1=1;M0=0则为方式2,自动装载8位定时/记数器。若M1=1;M0=1则为方式3,只适用于T/C0,2个8位定时/记数器。TMOD= 0X01;我们选择的是定时器0方式0,所以T/C1全为0,而T/C0的M1为0。M0为1,所以D0-D7为0X01;0X01表示的是16进制数,还有D0-D7表示的是2进制数。还需要转换一下。TH0 = (65536 - 5000) / 256;/载入高8位初值。TL0并不是和上面一样的,而是直接TH0 = 0XEC;TL0 = 0X78 是不是和上面的一样的。用C语言的话,直接写上计算公式就行,计算就交给单片机完成。TR0 = 1;这句就是启动定时器0,开始记数。65536是设置定时器0 工作方式0是16位的(2的16次方)。TMOD = 0X01;/设置定时器0 工作方式0TH0 = (65536 - 5000) / 256;/载入高8位初值TL0 = (65536 - 5000) % 256;/载入低8位初值TR0 = 1; /启动定时器EA = 1; /开总中断ET0 = 1;/开定时器中断。若为0则表示关闭(5)消抖动就是按键时去抖动,利用延时就可以了。第三章 程程序的编成与讲解第四章 实验程序的硬件设计4、1复位电路的硬件设计确定单片机工作的起始状态,完成单片机的启动过程。该复位电路具有手动复位和上电复位两种功能。如图4-1所示。图4-1 复位电路单片机接通电源时产生复位信号,完成单片机启动,确定单片机起始工作状态。手动按键产生复位信号,完成单片机启动,确定单片机的初始状态。通常在单片机工作出现混乱或“死机”时,使用手动复位可实现单片机“重启”。当8051的ALE及/PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位。RST/VPD端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。图中,上电时,接通电源,电容器C相当于瞬间短路,+5V加到了RST/VPD端,该高电平使8051全机复位。若运行过程中,需要程序从头执行,只需按动按钮S,则直接把+5V加到了RST/VPD端,从而复位。显然,该电路即可以上电复位,也可以手动复位,是常用复位电路之一。4、2键盘电路硬件设计键盘可以分为两类:非编码键盘和编码键盘。非编码键盘是利用按键直接与单片机相连接而成,这种键盘通常使用在按键数量较少的场合。使用这种键盘,系统功能通常比较简单,需要处理的任务较少,但是可以降低成本、简化电路设计。常见的非编码键盘有两种结构:独立式键盘和矩阵式键盘。(1) 独立式键盘其特点是:一键一线,各键相互独立。每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,可以很容易的判断哪个按键被按下。这种键盘的优点是:电路简单,各条检测线独立,识别按下按键的软件编写简单。适用于键盘按键数目较少的场合,不适合用于键盘按键数目较多的场合,因为将占用较多的I/O口线。按键功能:长按S2进入调时状态,S2、S3增或减;再次长按S2进入调分状态,S2、S3增或减,再次长按S2退出该状态。短按S2进入省电模式,按S1复位。如图4-2所示图4-2 独立式键盘的电路图(2) 矩阵式键盘这种键盘用于按键数目较多的场合。4、3 显示电路硬件设计显示模块,LED 数码管是由发光二极管构成的,亦称半导体数码管。将条状发光二极管按照共阴极(负极)或共 阳极(正极)的方法连接,组成“8”字,再把发光二极管另一电极作笔段电极,就构成了 LED 数码 管。若按规定使某些笔段上的发光二极管发光, 就能显示从 09 的一系列数字。同荧光数码管(VFD), 辉光数码管(NRT)相比,它具有:体积小,功耗低,耐震动,寿命长,亮度高,单色性好,发光响应的时间短,能与 TTL,CMOS电路兼容等的数显器件。+,-分别表示公共阳极和公共阴极。ag是7个笔段电极,DP为小数点。另有一种字高为7.6mm 的超小型 LED数码管,管脚从左右两排引出,小数点则是独立的。本系统利用 4 位LED数码管显示时间,共阴极结构。LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。确定公共极(位选)以及段选,具体的是:数码管有引脚的一面向下,按逆时针为:1、2、3、12:公共总线的为;a、b、c、d、e、f、g、dp,1234其中1234为位选,Dp为点。共阴、共阳都是这样的。数码管是一种半导体发光器件,其基本单元是发光二极管。它的显示驱动方式分为两种:静态显示驱动和动态显示驱动。如图图4-3显示电路和4-4驱动电路所示。(1)静态显示驱动静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。(2)动态显示驱动数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,Dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。图4-3 显示电路图4-4 驱动电路第五章 系统软件设计5、1 系统主程序设计5、1、1键盘与数码管动和静态显示实验实验内容动态显示:根据电路图图5-1和图5-2编写按键程序,左侧第二位数码管显示独立式按键编号“1”、“2”、“3”、“4”,哪一个按下,对应的编号显示在左侧第一位数码管(左侧第二个数码管为全灭状态),右侧二位数码管显示“00-15”的十进制键值,无键按下时数码管为全灭状态;动态显示用定时/计数器的定时器中断完成。实验内容静态显示:根据电路图图5-1和图5-2编写按键程序,左侧第二位数码管显示独立式按键编号“1”、“2”、“3”、“4”,哪一个按下,对应的编号显示在左侧第一位数码管(左侧第二个数码管为全灭状态),右侧二位数码管显示“00-15”的十进制键值,无键按下时数码管为全灭状态。这俩个实验一个是动态显示一个是静态显示。原理图是一样的。下面我就介绍和编译动态显示的程序了。图5-1 动态显示电路图图5-2 键盘接口电路图#include /头文件定义Unsigned char code table duan=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0XFF,;/0-15的段码和全灭unsigned char code table_bit=0xef,0xdf,0xbf,0x7f; unsigned char dis_buf4; /缓冲单元unsigned char i;unsigned char aa,bb,cc,hang,lie;sbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;延迟程序void delay_ms(unsigned int i)unsigned char j;for(i;i0;i-) for(j=110;j0; j- );void key_scan(void) P3=0Xf0;if(P3&0xf0)!=0xf0)delay_ms(5);if(P3&0xf0)!=0xf0)aa=0xfe;for(lie=0;lie4;lie+)P3=aa;aa=(aa3) i=0;void init(void)TMOD=0x01; TH0=(65536-2000)/256; TL0=(65536-2000)%256; EA=1; ET0=1; TR0=1; void main () unsigned char num; init(); while(1) key_scan(); if(key1=0) delay_ms(10); if(key1=0) num=1; else if(key2=0) delay_ms(10); if(key2=0) num=2; else if(key3=0) delay_ms(10); if(key3=0) num=3; else if(key4=0) delay_ms(10); if(key4=0) num=4; else num=16; dis_buf0=num; dis_buf1=16; if(cc!=16) dis_buf2=cc/10; dis_buf3=cc%10; else dis_buf2=16; dis_buf3=16; 5、1、2计算占空比实验实验内容:用NE555设计一个频率和占空比可调的多谐震荡器,电路如图5-3所示。该电路用W1调节占空比。震荡器电路完成后,利用定时/计数器测定该震荡器波形的周期和占空比,并用4位LED数码管显示(如图5-4)脉宽高电平时间、周期时间、占空比,显示时间间隔2秒。测量原理如图5-5。显示格式:高电平时间为“xxx.x”ms;周期时间为“xxxx”ms;占空比为“0.xxx”。依据小数点的位置判断显示数据类型,必须使用T0门控位。图5-3 占空比可调振荡电路与单片机接口电路图图5-4 静态显示电路图图5-5 波形脉冲宽度测试原理#include Unsigned char code led code =0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09 ,0xff,0xfe;unsigned char dis_buf4;unsigned char count1,count0; unsigned long Th;unsigned long Tl; unsigned long Tz;unsigned int KON;unsigned int ti=0;sbit led_clk= P16 ;sbit led_data = P17 ;sbit IN1=P33;sbit IN0=P32; void led_display ( ) unsigned char t,i;unsigned char input_code; for(i=0;i4;i+) input_code=dis_bufi;for (t=0;t=1;led_clk=1; void timer_t0()interrupt 1 if(ti=0) count0+;else TH0=0X3c; TL0=0Xb0;ti+; void timer_t1()interrupt 3 TH1=0X00; TL1=0X00; count1+; void del() while(IN0=0);while(IN0=1); while(IN0=0); TR0=1; while(IN0=1); TR0=0; while(IN1=0); while(IN1=1); while(IN1=0); TR1=1; while(IN1=1); TR1=0;ti+;Th=count1*65536+TH1*256+TL1;Tl=count0*65536+TH0*256+TL0;Tz=Th+Tl; KON=(Th*1000)/Tz; Th=Th/100; TMOD=0X11; TH0=0X3c; TL0=0Xb0;TR0=1; count1=0; count0=0; void inti() TMOD=0X19; TH1=0X00; TL1=0X00; TH0=0X00; TL0=0X00; IE=0X8A;void main(void) inti();while(1) if(ti=0) del();else if(ti=1) dis_buf0=led_codeTh%10;dis_buf1=led_code11&led_codeTh/10%10;dis_buf2=led_codeTh/100%10;dis_buf3=led_codeTh/1000;led_display ();ti+; else if(ti=41) dis_buf0=led_codeTz%10;dis_buf1=led_codeTz/10%10;dis_buf2=led_codeTz/100%10;dis_buf3=led_codeTz/1000;led_display ();ti+; else if(ti=82) dis_buf0=led_codeKON%10;dis_buf1=led_codeKON/10%10;dis_buf2=led_codeKON/100;dis_buf3=led_code11&led_code0;led_display ();ti+; else if(ti=123) ti=0; TR0=0; TMOD=0X19; TH1=0X00; TL1=0X00; TH0=0X00; TL0=0X00; 5、1、3串行口自发自收实验实验内容:根据电路如图5-6所示编写程序。实现当键1按下,单片机串行口应用方式1连续向外发送“0、1、2、3”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键2按下,单片机串行口应用方式1连续向外发送“4、5、6、7”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键3按下单片机串行口应用方式1连续向外发送“8、9、a、b”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键4按下,单片机串行口应用方式1连续向外发送“c、d、e、f”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来。图2 静态显示电路图图5-6 波形脉冲宽度测试原理#include unsigned char code led_code=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff;unsigned char dis_buf4;sbit led_clk= P16 ;sbit led_data = P17 ;sbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;unsigned char read_flag ;unsigned char flag=0;unsigned char TT4,num;unsigned char i,j; void led_display ( )unsigned char t,i;unsigned char input_code;for(i=0;i4;i+)input_code=dis_bufi;for (t=0;t=1;led_clk=1; void Send(unsigned char dat) SBUF=dat; while(TI=0); TI=0;void recive(void) interrupt 4 if(RI) RI=0; TTnum=SBUF; num+; if(num=4) num=0; read_flag=1; void delay_ms(unsigned int x) unsigned int i; unsigned char j; for(i=x;i0; i-) for(j=110;j0;j-);void main(void) TMOD=0x20; SCON=0x50; PCON=0x00; TH1=0xfd; TL1=0xfd; EA=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位委托人才交流中心人事代理合同协议书范本模板
- 包头一模考试及答案
- tesol考试的样卷及答案
- E-Isopentadec-2-enoyl-CoA-E-Isopentadec-2-enoyl-coenzyme-A-生命科学试剂-MCE
- 9-10-Dibromoanthracene-d8-生命科学试剂-MCE
- 禁毒防艾知识培训简报课件
- 禁毒社工礼仪培训知识课件
- 禁毒知识竞赛培训会课件
- DB61T 572-2013 页岩气地质储量计算方法
- 禁毒知识培训课堂课件
- 2025年陕西高考化学试卷试题真题及答案详解(山西宁夏青海适用)
- 子宫腺肌症教学护理查房
- 中国可见光通信项目创业计划书
- 五金件盐雾测试报告
- JG/T 8-2016钢桁架构件
- 化肥质量安全管理制度
- 2025年湖南长沙市一中学集团七下英语期末经典模拟试题含答案
- 2023年河北省中考数学真题(原卷版)
- 国企员工合同协议书模板
- 软件移交协议书
- 租赁厂房移交协议书
评论
0/150
提交评论