单片机实训报告悉元器件与电路原理图.doc_第1页
单片机实训报告悉元器件与电路原理图.doc_第2页
单片机实训报告悉元器件与电路原理图.doc_第3页
单片机实训报告悉元器件与电路原理图.doc_第4页
单片机实训报告悉元器件与电路原理图.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

实 训 报 告课程名称: 单片机实训 专业: 班级:学号: 姓名:指导教师: 成绩: 完成日期: 2012年7月12日 1 实训任务名称:熟悉元器件与电路原理图1.1 电路板的组成与主要器件工作原理 电路板原理图图1.1所示:图1.1 电路板原理图1.2 单片机部分 单片微型计算机简称单片机,又称微控制器。是指在一块芯片上集成了中央处理器、随机存储器、程序存储器、定时/计数器、并行i/o接口、中断控制器和串行接口等部件而构成的微型计算机系统。目前,新型的单片机内还有和a/d和d/a转换器、dma通道、显示驱动电路等特殊功能部件。1.2.1 89系列单片机的型号编码 89系列单片机的型号编码由三个部分组成,它们是前缀、型号和后缀。格式如下:at89cxxxxxxxx其中,at是前缀,89cxxxx是型号,xxxx是后缀。 (l)前缀 由字母“at”组成,表示该器件是atmel公司的产品。 (2)型号由“89cxxxx”或“89lvxxxx”或“89sxxxx”等表示。“89cxxxx”中,9是表示内部含flash存储器,c表示为cmos产品。“89lvxxxx”中,lv表示低压产品。“89sxxxx”中,s表示含有串行下载flash存储器。在这个部分的“xxxx”表示器件型号数,如51、1051、8252等。 (3)后缀 由“xxxx”四个参数组成,每个参数的表示和意义不同,在型号与后缀部分有“”号隔开。后缀中的第一个参数x用于表示速度,它的意义如下:x12,表示速度为12mhz。x20,表示速度为20mhz。x16,表示速度为16mhz。x24,表示速度为24mhz。后缀中的第二个参数x用于表示封装,它的意义如下:xd,表示陶瓷封装。xq,表示pqfp封装。xj,表示plcc封装。xa,表示tqfp封装。xp,表示塑料双列直插dip封装。xw,表示裸芯片。xs,表示soic封装。后缀中第三个参数x用于表示温度范围,它的意义如下:xc,表示商业用产品,温度范围为0十70。xi,表示工业用产品,温度范围为40十85。xm,表示军用产品,温度范围为65十 125。后缀中第四个参数x用于说明产品的处理情况,它的意义如下:x为空,表示处理工艺是标准工艺。x883,表示处理工艺采用milstd883标准。例如:有一个单片机型号为“at89c5112pi”,则表示意义为该单片机是atmel公司的flash单片机,内部是cmos结构,速度为12mhz,封装为塑封dip,是工业用产品,按标准处理工艺生产。1.2.2 新旧型号产品的区别与联系mcs-51系列单片机是美国intel公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用hmos,功耗是630mw,是89c51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, mcs-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89s51、已经停产的89c51等),各高校及专业学校的教材仍用mcs-51单片机作为代表进行理论基础学习。有些文献甚至也将8051泛指mcs-51系列单片机,8051是早期的最典型的代表作,由于mcs-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说mcs-51内核实际上已经成为一个8位单片机的标准。其它的公司的51单片机产品都是和mcs-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如atmel的89c51(已经停产)、89s51, philips(菲利浦),和winbond(华邦)等,已经停产的89c51指的是atmel公司的 at89c51单片机,同时是在原基础上增强了许多特性,如时钟,由flash(程序存储器的内容至少可以改写1000次)存储器取带了原来的rom(一次性写入),at89c51的性能相对于8051已经算是非常优越的了。在市场化方面,89c51受到了pic单片机阵营的挑战,89c51最致命的缺陷在于不支持isp(在线更新程序)功能。89s51就是在这样的背景下取代89c51的。89s51在工艺上进行了改进,89s51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89sxx可以向下兼容89cxx等51系列芯片。1.2.3 89s51与89c51比较 (1)新增加很多功能,性能有了较大提升,价格基本不变,甚至比89c51更低。 (2)isp在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。 (3)最高工作频率为33mhz,89c51的极限工作频率是24m,就是说s51具有更高工作频率,从而具有了更快的计算速度。 (4)兼容性方面,向下完全兼容51全部字系列产品。比如8051、89c51等等早期mcs-51兼容产品。也就是说所有教科书上的程序(不论教科书上采用的单片机是8051还是89c51还是mcs-51等等),在89s51上一样可以照常运行,这就是向下兼容。 (5)程序存储器写入方式,二者的写入程序的方式不同,89c51只支持并行写入,同时需要vpp烧写高压。89s51则支持isp在线可编程写入技术,串行写入、速度更快、稳定性更好,烧写电压也仅仅需要45v即可。 (6)电源范围,89s5*电源范围宽达45.5v,而89c5*系列在低于4.8v和高于5.3v的时候则无法正常工作。 (7)烧写寿命更长,89s5*标称的1000次,实际最少是1000次10000次,这样更有利初学者反复烧写,降低学习成本。1.3 led数码管显示部分1.3.1 led器件规格、颜色、极性 led器件规格为圆形,颜色为单红色,在本部分采用了4个数码管组合共阳极接法。1.3.2 led器件与单片机连接方式 led器件在本部分与单片机连接时采用动态显示方式。1.3.3 led器件的驱动问题 led器件在本部分采用了单管放大驱动。1.3.4 单片机引脚的占用或分配 led器件在本部分将p0口与段连接,四个数码管的阳极分别与p2口的p2.4、p2.5、p2.6、p2.7连接。1.3.5 led器件的译码问题led器件在本部分在该部分是通过软件译码。1.3.6 字型编码字型编码,用的是按共阳极标准形式的,09的编码定义是(0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90)。1.4 矩阵键盘部分1.4.1 按键的类型、数量、功能定义、使用方式 本部分采用的是2行2列的矩阵式按键键盘,有4个按键,通过这些按键可以控制发光二级管的点亮与熄灭。在使用时,通过扫描的方式来确定键值。1.4.2 与单片机的连接方式 与单片机之间连接采用了矩阵式,如图1.2所示,矩阵式键盘注意行和列的概念,一般采用行扫描法。行线一般接上拉电阻,作为输入口与单片机连接,列线作为输出口与单片机连接,按键跨接行列线。图1.2 单片机与键盘连接方式1.4.3 键盘编程扫描法识别按键 (1)判别有无键按下:向所有的列线上输出低电平,再读入所有的行信号。如果4个键中任意一个键被按下,那么读入的行电平则不全部为高;如果4个键中无键按下,则读入的行全部为高电平。如上图所示,如果k4被按下,则k4所在的第一行第一列被导通,第一行被拉低,读入行信号为低电平,表示有键按下。 (2)键盘扫描取得闭合键的行、列号:往列线上逐列送低电平,先送第0列为低电平,第1列为高电平,读入的行电平的状态就显示了位于第0列的k1和k2的按键状态,如果读入的行值全为高电平,则无键按下,再送第1列为低电平,第0列为高电平,读入的行电平的状态就显示了位于第1列的k3和k4的按键状态,最后再重新从第0列开始。 (3)用计算法或查表法得到键值:键值=列号*2+行号。 (4)判断闭合键是否释放,如没释放则继续等待。 (5)将闭合键的键值保存,同时转去执行该闭合键的功能。1.4.4 矩阵式键盘与单片机的连接 本部分的矩阵式键盘用了p2口的个4个i/o口,列线用的是p2.0和p2.1,行线用的是p2.2和p2.3。1.4.5 按键消抖 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型,如图1.3所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。这是一个很重要的时间参数,在很多场合都要用到。 图1.3 按键触点的机械抖动 按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保cpu对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。 (1)硬件消抖:在键数较少时可用硬件方法消除键抖动。图1.4所示的rs触发器为常用的硬件去抖。图1.4 按键去抖电路 图中两个“与非”门构成一个rs触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开b),中要按键不返回原始状态a,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使b点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析rs触发器的工作过程很容易得到验证。 利用电容的放电延时,采用并联电容法,也可以实现硬件消抖,如图1.5所示。图1.5 电容法去抖电路 (2)软件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。1.5 继电器控制部分继电器是一种电控制器件,一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)释放。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。由于继电器的强电触点与吸合线圈之间是隔离的,所以继电器控制输出电路不需要专门设计隔离电路。其工作电路如下图1.5所示,图中二极管的作用是把继电器吸合线圈的反电动势吸收掉,从而保护晶体管。图1.6 继电器工作电路1.6 温度检测部分1.6.1 温度检测工作电路 温度检测工作电路图如图1.7所示。图1.7 温度检测工作电路1.6.2 温度传感器ds18b20结构 温度传感器ds18b20结构图如图1.8所示。 图1.8 ds18b20封装图1.6.3 ds18b20的主要特性 (1)适应电压范围更宽,电压范围为3.05.5v,在寄生电源方式下可由数 据线供电 (2)独特的单线接口方式,ds18b20在与微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯 (3) ds18b20支持多点组网功能,多个ds18b20可以并联在唯一的三线上,实现组网多点测温 (4)ds18b20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内 (5)温范围55125,在-10+85时精度为0.5 (6)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 (7)在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 (8)测量结果直接输出数字温度信号,以一 线总线串行传送给cpu,同时可传送crc校验码,具有极强的抗干扰纠错能力 (9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 1.6.4 ds18b20的外形和内部结构ds18b20内部结构主要由四部分组成:64位光刻rom 、温度传感器、非挥发的温度报警触发器th和tl、配置寄存器,如图1.9所示。 图1.9 ds18b20内部结构图 1.6.5 ds18b20工作原理 ds18b20的读写时序和测温原理与ds1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 ds18b20测温原理如图1.10所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图1.10中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图1.10 ds18b20测温原理框图1.6.6 ds1820使用中注意事项 ds1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: (1)较小的硬件开销需要相对复杂的软件进行补偿,由于ds1820与微处理器间采用串行数据传送,因此,在对ds1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用plm、c等高级语言进行系统程序设计时,对ds1820操作部分最好采用汇编语言实现。 (2)在ds1820的有关资料中均未提及单总线上所挂ds1820数量问题,容易使人误认为可以挂任意多个ds1820,在实际应用中并非如此。当单总线上所挂ds1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。 (3)连接ds1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的 测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用ds1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。 (4)在ds1820测温程序设计中,向ds1820发出温度转换命令后,程序总要等待ds1820的返回信号,一旦某个ds1820接触不好或断线,当程序读该ds1820时,将没有返回信号,程序进入死循环。这一点在进行ds1820硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接vcc和地线,屏蔽层在源端单点接地。1.7 串行通信部分1.7.1 串行通信部分工作电路 微机与单片机最简单的连接是零调制3线经济型,这是进行全双工通信所必须的最少数目的线路。其工作电路图如图1.11所示。图1.11 串行部分工作电路1.7.2 串行通信电平由于89c52单片机输入、输出电平为ttl电平,而pc机配置的是rs-232c标准串行接口,二者的电气规范不一致。数字值: 1 0ttl电平: +5v 0v232电平: -3v-15v +3v+15v1.7.3 串行通信电平转换 要完成pc机与单片机的数据通信必须进行电平转换。max232单芯片可实现89c52单片机与pc机的rs-232c之间的电平转换。max232芯片是maxim公司生产的、包含两路接收器和驱动器的ic芯片,适用于各种eia-232c和v.28/v.24的通信接口。1.7.4 max232芯片功能 max232内部有一个电源电压变换器,可以把输入的+5v电源电压变换成为rs-232c输出电平所需的10v电压。采用此芯片接口的串行通信系统只需单一的+5v电源就可以了。对于没有12v电源的场合,其适应性更强。其引脚图如图1.12所示。图1.12 max232引脚图2 实训任务名称:发光二级管点亮效果控制单片机程序下载练习2.1 keil c51调试软件 使用c语言肯定要使用到c编译器,以便把写好的c程序编译为机器码,这样单片机才能执行编写好的程序。keil uvision2是众多单片机应用开发软件之一,它支持众多不同公司的mcs51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持plm、汇编和c语言的程序设计。要使用keil51软件,必需先要安装。首先是运行keil51软件,出现如图2.1的屏幕。图2.1启动时的屏幕2.1.1 keil项目的建立 (1)点击project菜单,选择弹出的下拉式菜单中的new project,如图2.2。接着弹出一个标准windows文件对话窗口,如图2.3。在文件名中输入一个c程序项目名称,这里用test,只要符合windows文件规则的文件名都行。保存后的文件扩展名为uv2,这是keil uvision2项目文件扩展名,可以直接点击此文件以打开先前做的项目。图2.2new project菜单图2.3文件窗口 (2)选择所要的单片机,这里选择常用的ateml公司的at89s51。此时屏幕如图2.4所示。完成上面步骤后,就可以进行程序的编写了。 (3)首先要在项目中创建新的程序文件或加入旧程序文件。如果没有现成的程序,那么就要新建一个程序文件,点击新建文件的快捷按钮,出现一个新的文字编辑窗口,这个操作也可以通过菜单filenew或快捷键ctrl+n来实现。图2.4 选取芯片图2.5 新建程序文件 (4)保存新建的程序,可以用菜单filesave或快捷键ctrl+s进行保存。因是新文件所以保存时会弹出类似图2.3的文件操作窗口,把第一个程序命名为test1.c,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明keil的c语法检查生效了。如图2.6鼠标在屏幕左边的source group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。add file to group source group 1弹出文件窗口,选择刚刚保存的文件,按add按钮,关闭文件窗,程序文件已加到项目中了。这时在source group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图2.6 把文件加入到项目文件组中 (5)c程序文件已被加到了项目中了,下面就剩下编译运行了。这个项目只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的hex文件。编译见图2.7。图2.7 编译程序(6) 进入调试模式,软件窗口样式如图2.8所示。这个窗口可以看到运行结果,这些在菜单中也有。要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮,就可以进行关闭keil等相关操作了。 图2.8 调试运行程序2.2 hex文件的生成hex文件格式是intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示,常用来保存单片机或其它处理器的目标程序代码。它保存物理程序存储区中的目标代码映象,一般的编程器都支持这种格式。打开项目,打开它的所在目录,找到test.uv2的文件就可以打开先前的项目了。然后右击图2.9中的项目文件夹,弹出项目功能菜单,选options for targettarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在project菜单中也有一样的菜单可选。打开项目选项窗口,转到output选项页图2.9所示,再将它重新编译一次,编译信息窗口中就显示hex文件创建到指定的路径中,如图2.10,编译的信息窗口如图2.11所示,可用编程器附带的软件读取并烧到芯片中。图2.9 项目功能菜单图2.10项目选项窗口图2.11编译信息窗口2.3 程序下载工具及下载过程2.3.1 安装usb转串行口驱动程序 常用软件文件夹stc89c52rc单片机烧写资料文件夹usb转串口线驱动程序文件夹ch341ser文件夹双击setup.exe文件。2.3.2 安装下载驱动程序常用软件文件夹stc89c52rc单片机烧写资料文件夹stc下载软件非安装版文件夹双击stc-isp v38a.exe文件。2.3.3 程序下载步骤 (1)打开stc-isp v38a.exe,出现界面如图2.12所示。图2.12 stc-isp v38a.exe打开界面 (2)选择单片机型号,如图2.13所示。图2.13 单片机型号选择操作图 (3)添加程序文件,如图2.14所示,点击打开程序文件,出现界面如图2.15所示。图2.14 程序文件添加图图2.15 文件添加界面 (4)选择串行口,设置波特率,操作界面如图2.16所示。图2.16 串行口选择操作图 (5)设置一些相关选项,操作界面如图2.17所示。图2.17 相关选项设置图 (6)程序下载,操作界面如图2.18所示。图2.18 下载程序操作图 (7)等待上电,出现如图2.19所示界面时,就给mcu上电。图2.19 上电允许图2.4 流水灯设计2.4.1 程序实现功能 首先让发光二极管依次被点亮,接着让发光二级管每隔一个被点亮,最后使发光二级管每隔三个被点亮。2.4.2 硬件设计 发光二级管我们采用了共阳极连接方式,阴极分别与单片机p0口8的i/o口相连接。其工作电路原理图如图2.20所示。图2.20 流水灯控制电路图2.4.3 软件设计 由工作原理图可以看出,当给i/o口送低电平时发光二级管被点亮,给不同的i/o口送低电平就可以使不同的发光二级管被点亮,从而有闪烁的效果,产生出流水灯。流水灯控制程序如下:#include#includevoid delay() /延时函数 unsigned int i; for(i=0;i25000;i+);void main() unsigned char j,k,m,led; led=1; while(1) for(j=0;j8;j+) p1=led; led=_crol_(led,1); /发光二极管依次点亮 delay(); for(k=0;k4;k+) p1=led; led=_crol_(led,2); /发光二级管每隔一个被点亮 delay(); for(m=0;m2;m+); led=p1; led=_crol_(led,4); /发光二级管每隔三个被点亮 delay(); 2.5 任务总结 在本任务中使用了软件延时,循环变量的循环次数是25000,因为单片机是采用的是12mhz的,所以振荡周期为1us,循环执行语句25000次,耗时25000us,即延时25ms。以下任务中的软件延时函数应用也是以同样方法推算出来。 通过该任务学会了keil软件的使用,及程序的下载。keil软件使用时值得注意的是,在编写程序之前必须先建立工程,在生成hex文件之前应该在工程里面先进行“选项”设置。在烧写程序时应该按照步骤操作,先选择单片机型号,接着选择串行口,点击下载后应该等到握手连接成功,显示给mcu上电时才按开关按钮上电。通过编写程序也认识到了不同的程序就可以实现不同的功能效果,我们可以做出复杂而与好看的流水灯。3 实训任务名称:一般应用设计与调试-矩阵键盘的使用3.1 任务目的 通过该任务将独立式键盘和矩阵式键盘区别开来,学会矩阵式键盘的使用,学会矩阵式键盘的每种扫描方式,能够巧妙地将其运用在其他程序中。3.2 硬件设计 我们采用了2*2的矩阵式键盘,将单片机的p2口的p2.0和p2.1分别与键盘的列线相连,将p2.2和p2.3分别与键盘的行线相连,还采用了数码管显示,其工作原理图如图3.1所示。图3.1 矩阵式键盘工作原理图3.3 软件设计 最常用的矩阵式键盘识别按键方法是编程扫描法,这里采用列扫描法。给两行均送高电平,给列线逐次送低电平,如果有键被按下,行线上就会出现低电平,如果没有键按下,行线上全是高电平。当有一个键被按下时,发光二级管被点亮一个,另一个键被按下时,先前点亮的发光二级管熄灭,另外一个被点亮。同时,第一个键被按下时,4个数码管显示1,第二个键被按下时,4个数码管显示2,第,三个键被按下时,4个数码管显示3,第四个键被按下时,4个数码管显示4。矩阵式键盘使用程序如下:#include#define uchar unsigned charcode uchar table4=0xfe,0xfd,0xfb,0xf7; /发光二级管亮灭数组code uchar led4=0xf9,0x4c,0x58,0x99; /数码管显示数组void delay(uchar i); /延时函数声明void keyscan(); /扫描函数声明void main() uchar com=0; p1=0xff; /先让灯灯全灭 while(1) keyscan(); p2=com; void delay(uchar i) uchar j,k; for(k=0;ki;k+) for(j=1;j1;j+); void keyscan() uchar temp,key,x; p2=0xfe; /第二列送零 temp=p2; temp=temp&0x0c; if(temp!=0x0c) /有键按下 第二列 delay(6); /去抖 p2=0xfe; /再次确认 temp=p2; temp=temp&0x0c; if(temp!=0x0c) /读行值 switch(temp) case 0x08: key=table0;x=led0; break; case 0x04: key=table1;x=led1; break; p1=key;p0=x; /发光二级管点亮,数码管显示 p2=0xfd; /第一列送零temp=p2; temp=temp&0x0c; if(temp!=0x0c) delay(6); /去抖 p2=0xfd; /再次确认 temp=p2; temp=temp&0x0c; if(temp!=0x0c) /读行值 switch(temp) case 0x08: key=table2;x=led2;break; case 0x04: key=table3;x=led3;break; p1=key;p0=x; /发光二级管点亮,数码管显示 3.4 任务小结 通过该任务学会了矩阵式键盘的扫描方法和矩阵式键盘与独立式键盘的区别。4 实训任务名称:基本功能设计与调试-继电器触点通断与蜂鸣器控制4.1 任务目的通过对继电器触点通断与蜂鸣器控制,更进一步的认识继电器与蜂鸣器的工作原理,和更加熟悉掌握程序的下载与调试。4.2 实现功能 先让继电器工作,蜂鸣器不工作,接着在两次循环里面,让蜂鸣器工作2秒,停止工作1秒,接着使继电器停止工作。4.3 硬件设计 我们采用的是单片机的p3.2口与蜂鸣器相连接,p3.6与p3.7分别与两个继电器相连接,如图4.1所示。图4.1 继电器与蜂鸣器工作电路图4.4 软件设计 由图4.1可以看出:当给p3.2口送入低电平时,蜂鸣器工作;当给p3.6和p3.7送入低电平时,继电器触点吸合。继电器触点通断与蜂鸣器控制程序如下:#includeunsigned char t0;sbit j1=p37; /定义继电器j1sbit j2=p36; /定义继电器j2sbit bell=p32; /定义蜂鸣器belluchar i,k,t0;void delay0_5s() /0.5秒延时函数 unsigned char i; / 定义循环变量i for(i=0;i10;i+) th0=0x3c; /定时/计数器0赋初值 tl0=0xb0; tr0=1; /定时/计数器0启动标志 while(!tf0); /查询计数是否溢出 tf0=0; /溢出标志位清零 void delay_t0(uchar t) / 实现0.5*t延时 for(t0=0;t0t;t0+) /采用变量t0作为循环变量 delay0_5s(); void main() tmod=0x01; /选工作方式1 j1=0; /继电器工作 j2=0; bell=1; /蜂鸣器不工作 while(1) for(k=0;k2;k+) bell=0; /蜂鸣器工作 delay_t0(4); /延时2秒 bell=1; /蜂鸣器不工作 delay_t0(2); /延时1秒 j1=1; /继电器不工作 j2=1; 1.5 任务总结在本次任务中运用了定时/计数器0,定时时间50ms。采用方式1,定时时间为2的16次方,即66636乘上单片机的机械周期1us,所以定时50ms的初值应该是65536-50000,为15536,化为十六进制后为3cb0h。 通过对继电器触点通断与蜂鸣器控制系统的设计,更加了解了继电器与蜂鸣器的工作原理,为以后在使用时打下了坚实的基础。通过该任务也让我们更加熟悉了单片机keil软件的使用与程序的下载。5 实训任务名称:基本功能设计与调试- led数码管显示控制(显示:班号末两位+学号)5.1 任务目的 通过用单片机编程实现学号的显示,从而更好地了解led数码管显示的控制。5.2 实现功能 先让4个数码管依次显示我学号中的数字5 2 0 6,最后让4个数码管完整的将我的学号5206显示出来。5.3 硬件设计 我们采用的是共阳极数码管,将单片机的p1口与数码管的8个段控制段相连,将p2口的高四位分别与数码管的com端相连接,如图4.1所示。图4.1 数码管显示工作电路图5.4 软件设计 数码管采用的是共阳极,单片机p0的8个i/o口分别与数码管的a、b、c、dp、e、g、f、d段控制端相连,vcc及com端与p2口高四位相连,因此可以计算出0到9的字型编码是:0x28,0xf9,0x4c,0x58,0x99,0x1a,0x0a,0xf8,0x08,0x18。学号显示程序如下:#include#define uchar unsigned charcode uchar table4=0x1a,0x4c,0x28,0x0a; /数码管显示数组uchar t0;void delay() /延时函数 unsigned int i; for(i=0;i50;i+); void delay_t0(uchar t) /t*delay()的延时函数 for(t0=0;t0t;t0+) delay(); void main(void) while(1) p2=0xef; /第1个数码管被点亮 p0=table0; delay_t0(255); /显示数组中第一个数5 p2=0xdf; /第2个数码管被点亮 p0=table1; delay_t0(255); /显示数组中第二个数2 p2=0xbf; /第三个数码管被点亮 p0=table2; delay_t0(255); /显示数组中第三个数0 p2=0x7f; /第4个数码管被点亮 p0=table3; delay_t0(255); /显示数组中第四个数6 for(;) /实现完整显示学号10305206 p2=0xef; p0=table0; delay(); p2=0xdf; p0=table1; delay(); p2=0xbf; p0=table2; delay(); p2=0x7f; p0=table3; delay(); 5.5 任务小结 通过该任务了解了数码管显示时应注意的东西,应该首先判断采用的是共阳极还是共阴极,看清楚段控制端的顺序,再算出各个数字的字型码。6 实训任务名称:一般应用设计与调试-分秒显示(显示:分分+秒秒)6.1 任务目的 通过数码管显示实现分分秒秒的动态显示,更加熟悉掌握数码管工作原理。6.2 实现功能 主要功能是显示分分秒秒,完成0到60分钟的显示,其次是发光二级管的闪烁,当定时时间50ms每到一次时d5,d6闪烁一次,定时时间1秒每到一次时d7,d8闪烁一次,定时时间1分钟每到一次时d9,d10闪烁一次。6.3 硬件设计 数码管显示部分和学号显示任务中设计相同,发光二级管部分与流水灯任务中设计相同。其工作电路图如图6.1所示。图6.1 分分秒秒显示工作电路图6.4 软件设计数码管显示部分和学号显示任务中的设计思想一样,只是在本任务中显示的数据有0到9,用到了中断,定时50ms每到一次,k加1,k值等于20时,k值清零,sec加1,当sec等于60时,sec值清零,min加1,当min等于60时,min清零。数码管采用了动态显示,因此设计了一个微小延时。分分秒秒显示程序如下:#includeunsigned char led=0x28,0xf9,0x4c,0x58,0x99,0x1a,0x0a,0xf8,0x08,0x18;/定义数字0到9的字型显示码void delay(unsigned char i); /延时函数声明void int_0(); /中断函数声明unsigned char sec=0,min=0,k;void main() tmod=0x01; /选择工作方式1 th0=0x3c; /定时/计数器0赋初值 tl0=0xb0; tr0=1; /启动定时/计数器0 ea=1; /开中断 et0=1; /定时/计数器0中断允许 while(1) p0=ledsec%10; /显示秒的个位 p2=0x7f; delay(5); /选通第一个数码管 p0=ledsec/10; /显示秒的十位 p2=0xbf; delay(5); /选通第二个数码管 p0=ledmin%10; /显示分的个位 p2=0xdf; delay(5); / 选通第三个数码管 p0=ledmin/10; /显示分的十位 p2=0xef; delay(5); /选通第四个数码管 void int_0() interrupt 1 th0=0x3c; /重新送初值 tl0=0xb0; tr0=1; k+; /50ms到,k加1 p1=0xfc; /50ms到,第1,2个发光二级管点亮 if(k=20) k=0; /1秒到,k清零 sec+; /1秒到,sec加1 p1=0xf3; /1秒到,第3,4个发光二级管点亮 if(sec=60) sec=0; /1分钟到,sec清零 min+; /1分钟到,min加1 p1=0xcf; /1分钟到,第5,6个发光二级管点亮 if(min=60) min=0; /60分钟到,min清零 void delay(unsigned char i) /数码管显示微小延时函数 unsigned char m,n; f

温馨提示

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

评论

0/150

提交评论