版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、s51单片机开发板设计单片机及应用设计实训报告 s-51单片机开发板设计 -单片机及应用设计实训报告 姓 名: 学 号: 班 级: xx级电子信息工程专业本科班 学 院: 计算机电子信息工程学院 时 间: xx年x月x日x月x日 指导教师: 目录 一前言 2 二单片机及各模块简介 2 1.总体设计方案 2 2.硬件模块简介 3 2.1 s51单片机主控制模块 3 2.2 键盘模块 4 2.3 ds1302时钟模块 4 2.4 串口通信模块 5 2.5 led数码管显示和流水灯模块 5 2.6下载线模块 6 2.7 蜂鸣器模块 6 2.8 其他模块 7 三开发板(串口通信模块)设计原理介绍 7
2、1实验工程要求 7 1.1元器件功能介绍 7 1.2串口通信原理 8 2原理图的绘制 10 21串口通信模块仿真电路设计 10 3程序的编写 11 3.1 keil操作过程 11 3.2程序框图 12 3.3usb模块电路原理图的绘制 12 四印刷板的焊接及流程 14 焊接流程 14 五调试及遭遇的问题解决方法 14 1调试 14 1.1程序下载 14 1.2开发板调试 15 2问题解决 15 六总结体会 15 附录: 16 串口通信c语言源程序 16 一前言 近年来随着科技的飞速开展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往
3、往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本次实训的主要目的就是为了学习单片机的根本理论知识,进而进行单片机的开发、实践和扩展,以更好的运用到实际的软硬件开发中去。此次单片机的实训目的如下: (1)掌握单片机的相关理论知识。 学习单片机相关存放器的配置,单片机内部结构及特点,存储器组织及外部接口,中断及串口功能,功能存放器的相关配置,确定软硬件设计总体方案; (2)掌握硬件设计和软件设计的根本知识,学会使用根本的设计软件,依据总体的设计方案对单片机进行软硬件开发。 在protel中对单片机的各个功能模块进行外部电路的设计,在实现各个模块的功
4、能的前提下充分合理利用单片机的内部资源和外围接口,以求最大限度的发挥单片机的功能。 学会使用keil c进行、编译及仿真调试,实现对单片机进行c语言开发。 以proteus为平台,对单片机外围各个功能模块进行软件仿真验证功能。 (3)开发板板上资源的硬件实现及下载器的制作。 对软硬件设计仿真验证功能无误后,将protel绘制的pcb进行加工、焊接元器件,制作出s51开发板及下载器。 二单片机及各模块简介 1.总体设计方案 本开发板共分为十个模块,分别是:s51单片机主控制器模块、键盘模块、ds1302时钟模块、数码管模块、lcdcps364br模块、ark点阵模块、下载器模块、流水灯模块、蜂鸣
5、器模块、电源模块。其中以s51单片机作为核心控制器; 键盘模块用来向单片机输入特定编码的信息; ds1302时钟模块用来实现实时时钟; 数码管模块用来显示简单的数字、字母; lcd模块用来显示字母、数字、符号; 点阵模块用来显示图像、符号、汉字; 下载器模块用来实现s51单片机的isp在线编程; 流水灯模块用来显示单片机i/o口电平的变化; 蜂鸣器模块用来发出声音。总体硬件电路如下列图1所示: 图1 总体硬件电路 2.硬件模块简介 2.1 s51单片机主控制模块 s51单片机最小系统包括:mcu、复位电路、晶振电路。s51系列单片机内部具有128字节ram、5个中断源、32条i/o口线、2个1
6、6位定时器、4kb的程序存储器、一个全双工异步串行口,具有isp在线编程功能,该单片机不需要烧写器,可在开发板上isp在线编程, s51单片机除兼容c51单片机外,还具有工作频率0至33mhz的高工作频率。 原理图如图2所示: 图2 主控制模块 2.2 键盘模块 按键模块,通过外部中断int1实现按键功能,并通过软件编程识别按键k0-k3四个按键,进而实现相关功能,例如数码管显示字符数字的加减,led灯速度的变换等。原理图如图3所示: 2.3 ds1302时钟模块 ds1302 的引脚如图4所示: 图3 按键模块 图4 ds1302引脚图 v1为后备电源,v2为主电源。在主电源关闭的情况下,也
7、能保持时钟的连续运行。ds1302由v1或v2两者中的较大者供电。当v2高于v1 + 0.2v时,v2给ds1302供电。当v2低于v1时,ds1302由v1 供电。x1、x2为振荡源,外接32.768 khz晶振。i/o为串行数据输入/输出端(双向),scl k为时钟输入端。rst是复位片选线,通过把rst输入驱动置为高电平来启动所有的数据传送。rst输入有两种功能:rst接通控制逻辑,允许地址/命令序列送入移位存放器; rst提供了终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许ds1302进行操作。如果在传送过程中置rst为低电平,那么会终止此次数据传送
8、,并且i/ o引脚变为高阻态。上电运行时,在v高于2.5v之前,rst必须保持低电平。只有在scl k为低电平时,才能将rst置为高电平。ds1302时钟模块的原理图如图5所示: 图5 ds1302时钟原理图 单片机与ds1302通过p1.1、p1.2、p1.3相连,分别为时钟信号线、输入输出线、复位信号线。ds1302的晶振引脚连接32768hz的晶振。 2.4 串口通信模块 串口通信模块的原理图如图6所示: 图6 串口通信模块的原理图 单片机与max232通过p3.0、p3.1相连,分别为发送线、接收线,另外单片机要与max232共地。 2.5 led数码管显示和流水灯模块 led显示器有
9、静态显示和动态显示两种显示方式。 led静态显示方式:led显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或+5v); 每位的段选线(adp)分别与一个8位的锁存器输出相连。各个led的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。 led动态显示方式:在多位led显示时,将所有位的段选线相应的并联在一起,有一个8位i/o口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的i/o线控制,实现各位的分时选通。要各位led能够显示出与本位相应的显示字符,就必须采用扫描显示方式,段选线上输出相应位要显示字节的段码。 流水灯模块包含8个led
10、灯,单片机的p0口接10k上拉电阻,八个led的负极依次连接单片机p0口的8个引脚,八个led的正极依次与510欧姆的排阻的八个端子相连。 led数码管和流水灯模块原理图如图7: 图8 lcd数码管和流水灯模块 2.6下载线模块 下载器模块实现将usb信号转换为能通过spi协议传输的信号,从而实现对单片机的编程。下载模块原理图如图9所示: 图9 下载线接口模块 图10 蜂鸣器模块 2.7 蜂鸣器模块 单片机的p1.4与q1的基极通过1k欧姆电阻连接,当p1.4为高电平时,q1导通,q1的发射极与集电极导通,将发射极下拉为低电平,蜂鸣器两端出现电位差,蜂鸣器发声; 当p1.4为低电平时,q1不导
11、通,蜂鸣器两端没有电流流过,蜂鸣器不发声。 2.8 其他模块 i2c eeprom模块用于程序或数据存储器的扩展功能,片外可最大扩展到64kb,地址为0000ffffh。此存储芯片支持电科擦除,即可写。 电源模块通过整流电桥实现交直流的转换功能,直接供单片机使用。 原理图如图11图12所示: 图11 电源模块 图12 i2c eeprom模块 三开发板(串口通信模块)设计原理介绍 1实验工程要求 实验任务是通过串口通信实现单片机数据的自发自收以及双机通信功能,并且通过数码管循环显示0f来表现其实现过程。 1.1元器件功能介绍 at89s51: at89s51 是一种低功耗、高性能cmos8位微
12、控制器,具有 8k 在系统可编程flash 存储器。使用atmel 公司高密度非 易失性存储器技术制造,与工业80c51 产品指令和引脚完全兼容。片上flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位cpu和在系统可编程flash,使得at89s51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s51具有以下标准功能:8k字节flash,256字节ram,32 位i/o口线,看门狗定时器,2个数据指针,三16位定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外at89s51 可降至0hz 静态逻辑操作,支持2种软件
13、可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工 作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器 8k 字节在系统可编程 flash at89s51。 rs232:rs232是由电子工业协会(electronic industries association,eia) 所制定的异步传输标准接口。对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。 rs232与ttl电路之间需要进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。max2
14、32芯片可完成ttlrs232双向电平转换。 max232:max232芯片是rs232标准接口芯片,使用+5v单电源供电。是pc机与单片机串口进行通讯的电平转换芯片。内部结构根本可分三个局部: 第一局部是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供应rs232串口电平的需要。 第二局部是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(r1in)、12脚(r1out)、11脚(t1in)、14脚(t1out)为第一数据通道。8脚(r2in)、9脚(r2out)、10脚(t2in)、7脚(t2out)为第
15、二数据通道。ttl/cmos数据从t1in、t2in输入转换成rs232数据从t1out、t2out送到电脑dp9插头; dp9插头的rs232数据从r1in、r2in输入转换成ttl/cmos数据后从r1out、r2out输出。 第三局部是供电。15脚dng、16脚vcc(+5v)。 图13 rs232芯片引脚图 图14 max232芯片引脚图 1.2串口通信原理 s-51单片机内部有一个全双工的串行接收和发射缓冲器(sbuff),这两个在物理上独立的接收发射器,即可以接收也可以发射数据,但接收缓冲器只可以读出不能写入,而发送缓冲器只能写入不能读出,它们的地址是99h。这个通信口即可以用于网
16、络通信,亦可以实现串行异步通信,还可以构成同步移位存放器使用。如果在串行口的输入输出引脚上加上电平转换器,就可以方便的构成标准的rs-232接口。 s-51单片机串行口专用存放器。sbuf为串行口的收发缓冲器,它是一个可寻址的专用存放器,其中包含了接收器和发射器存放器,可以实现全双工通信。但这两个存放器具有同一地址(99h)。s-51的串行数据传输很简单,只要向缓冲器写入数据就可发送数据。而从接收缓冲器读出数据既可接收数据。串行通信存放器scon控制存放器,它是一个可寻址的专用存放器,用于串行数据通信的控制。 数据通信的传输方式:常用于数据通信的传输方式有单工、半双工、全双工和工方式。串行通信
17、的两种通信形式,包括异步通信和同步通信。scon控制存放器是一个可寻址的专用存放器,用于串行数据通信的控制,其结构格式如下: 表1 存放器scon结构 scon d7 d6 d5 d4 d3 d2 d1 d0 sm0 sm1 sm2 ren tb8 rb8 ti ri 位地址 9fh 9eh 8dh 9ch 9bh 9ah 99h 98h 下面我们对个控制位功能介绍如下: (1)sm0、sm1:串行口工作方式控制位 (2)sm2:多机通信控制位 多机通信是工作方式2和方式3,sm2位主要用于方式2和方式3。接收状态,当串行口工作方式2或3,以及sm2=1时,只有当接收到第9位数据(rb8)为1
18、时,才把接收的前8位数据送入sbuf,且置位ri发出中断申请,否那么会将收到的数据放弃。当sm2=0时,只有在接收到有效停止位时才启动ri,假设没接收到有效停止位,那么ri清“0”。在方式0中sm2应该为“0”。 ren:允许接收控制位。由软件置“1”时,允许接收; 软件置“0”时,不许接收。 tb8:在方式3和方式3中要发送的第9位数据,需要时用软件置位和清零。 tb8:在方式2和方式3中是接收到的第9位数据。在方式1时,如sm2=0,rb8接收到的停止位。在方式0中,不使用rb8。 ti:发送中断标志。由硬件在方式0发送完第8位时置“1”,或在其它方式中串行发送停止位的开始时置“1”。必须
19、由软件清“0”。 ri:接收中断标志。由硬件在方式0串行发射第8位结束时置“1” b:特殊功能存放器pcon pcon:主要是是chmos型单片机的电源控制而设置的专用存放器 2原理图的绘制 21串口通信模块仿真电路设计 (1)翻开isis7professional窗口,执行菜单命令file new design,新建一个default命名为“单片机串口通信自发自收.dsn”。 (2)在器件选择按钮单击“p”按钮,添加如表所示的原件: 单片机 at89s51 电容cap-elec cap-pol max232 pim 按钮 button 数码管 7seg-mpx4-ca 74ls244 排阻
20、rx8 三极管 npn 晶振 crystal (3)在isis原理图窗口中,放置电源和地。布好线,设置好相应原件的参数。完成电骡图的设计。 (4)调试与仿真:加载生成的.hex文件,进行调试,观察是否符合预期效果。 仿真效果图如图15所示: 图15 仿真效果图 3程序的编写 3.1 keil操作过程 1)翻开桌面上的keil软件:,下面新建一个工程,选择project->new新建一个名字叫“单片机串口通信”的工程,保存在事先创立的文件夹下,点击保存按钮。出现选择器件型号对话框:选择实验板上的所用芯片的型号atmel->at89s51 点击确定就建立完毕工程了。 2)添加代码文件到
21、工程中,首先新建一个后缀为.c的源文件,点击开发环境中的file->new,新建c文件,然后点击保存按钮,注意一定要保存为后缀为.c的格式, 在开发环境中左边栏找到在source group1上右击选中,弹出添加文件对话框,如图:把单片机串口通信.c选中,点击add添加源文件到工程中。 3)点击按钮,编译你的代码,如果下面有错误提示,修改好后再次编译直到顺利通过编译为止。如图16所示: 图16 keil编译图 4)在target1上右击选择,出现如下对话框:.选择output栏,将一栏打上勾,这样编译通过之后就可以生成可以执行的下载文件(可执行文件后缀为hex),再次点击编译,生成可执行
22、的代码串口通信.hex。 3.2程序框图 单片机通过max232与单片机通讯程序流程图17所示: 图17 单片机通过max232与pc机或单片机通讯程序流程图 单片机通过p3.0.和p3.1发送数据到单片机,单片机接收到数据后发送给单片机,并通过led数码管显示出。 3.3usb模块电路原理图的绘制 (1)在d盘建立名为protel的文件夹,在protel的文件夹中建立名为usb.ddb设计数据库文件,新建原理图文件,命名为usb.sch。 (2)根据提供的usb原理图,自己画出原理图。电路中所有的元器件都可在miscellaneous devices.ddb、protel dos schem
23、atic libraries.ddb这两个元器件数据库中找。 (3)画完电路后,要按照图中元件参数逐个设置元件属性,元件要自动编号,并进行电气规那么检查。设置某个元器件的属性的方法是双击该元器件出现对话框设置即可。原理图如图18所示: 图18 usb原理图 (4)最后形成该电路的网络表,为设计电路板做准备。 (5)根据仿真好的电路图,画出印刷电路板图。新建pcb文件,设置pcb设计环境和绘制印刷电路的版框。 (6)、翻开所有要用到的pcb 库文件后,调入网络表文件和修改零件封装。布置零件封装的位置,进行自动布局。 (7)对所有过孔和焊盘补泪滴,放置覆铜区。 敷铜后的效果如图18所示: 图18
24、pcb原理图 四印刷板的焊接及流程 焊接流程 1 、焊前准备 首先要熟悉所焊印制电路板的装配图,并按图纸配料,检查元器件型号、规格及数量是否符合图纸要求,并做好装配前元器件引线成型等准备工作。 2 、焊接顺序 元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。 3 、对元器件焊接要求 1 )电阻器焊接 按图将电阻器准确装人规定位置。尽量使电阻器的上下一致。焊完后将露在印制电路板外表多余引脚齐根剪去。 2 )电容器焊接 将电容器按图装人规定位置,并注意有极性电容器其 “ ” 与 “ ” 极不能接错。 3 )二极管的焊接 二极管焊接要注意阳极阴极的极性
25、,不能装错; 发光二极管要与印刷版保持0.5cm距离。 4 )三极管焊接 注意 e 、 b 、 c 三引线位置插接正确; 焊接时间尽可能短,焊接时用镊子夹住引线脚,以利散热。 5 )集成电路焊接 首先按图纸要求,检查型号、引脚位置是否符合要求。焊接时先焊边沿的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。 6)usb接口和电源接口 找到正确位置,注意将其与印刷版焊接牢固,不松动。 五调试及遭遇的问题解决方法 1调试 1.1程序下载:开发板和pc机通过下载器连接,使用+5v电源给开发板供电。在pc机上安装isp在线下载器驱动,翻开烧写器软件,选择烧写单片机类型,加载flash,点击编程,
26、即可把程序烧录到单片机中。 使用usb isp下载:请安装并翻开progisp167软件, 编程器及接口选择usbasp,usb默认,选择器件类型at89s52,点击调入flash按钮,找到你刚刚生成的led.hex文件 将usb下载线一头连接电脑u口,另外一头连接实验板左上方的isp下载口,(注意方向),点击自动,可以看到,编程成功, 1.2开发板调试: (1)键盘模块实验效果:烧写.hex文件到单片机,将jp7插上短路帽,按下键盘上的某一个键,lcd1602上显示该键对应的键值; (2)ds1302时钟模块实验效果:烧写.hex文件到单片机,插上lcd1602,液晶上显示秒、分、时; (3
27、)数码管模块实验效果:烧写led动态显示.hex文件到单片机,将j3上端插上短路帽,数码管显示从0开始计数 ; (4)流水灯模块实验效果:烧写流水灯.hex文件到单片机,流水灯显示几种不同的花型; (5)蜂鸣器模块实验效果:烧写.hex文件到单片机,蜂鸣器以一定的声音频率鸣叫。 2问题解决 (1)印刷版焊完之后,无法烧入程序,总是出错。 经过分析后判断可能是单片机有的接口焊点虚焊所致,回去后,用电烙铁把单片机的管口查询焊接了一遍。问题就解决了,能够烧入程序了。 (2)数码管显示的是乱码,并非完整数字。 分析应该是数码管编码与实际所用的编码或引脚不相同。对程序中的数码管显示代码重新编译之后就通过
28、了。 六总结体会 在老师的指导下,自己找资料、看书,完成了老师布置的任务。通过这次的实训设计,使我对单片机以及智能仪器的结构和功能都有了更深的认识,从理论和实践上都得到了很大的提高,这次的实训真的给我很大的提高。总结经验来说,首先,我丰富了自己的知识面,将以前没能学通的东西深入透彻的学会学懂,具体了解了怎样去完成一个电路的设计:从流程图、电路图、焊接电路板、检查电路板、仿真到烧片一整套东西。没有浪费珍贵的时间,学习到了难得的经验。 自己找资料,了解单片机89s51、数码显示管的有关知识,学习时钟电路、控制电路的设计原理,看不懂的时候就去问老师、同学。和同学们一起探讨不懂得难点之时我仿佛感觉到了
29、真正的大学应该有的学习气氛。在这些都搞得比拟明白后就开始画设计流程图和电路图,最后用了很长时间才画出自己的电路图,同学老师都帮我检查,改正了几处有问题的地方。电路的焊接比拟难。要细心稳重,应为这是一件很要求技术的工作。但是我克服困难终于完成了但接下来的检测可就费了不少劲,发现并解决了很多问题。在解决完所有问题后,自己又一种成功感,还在想,要是没有这些错误,就不会学会这么多检测电路的方法,而且对自己所做的电路有了进一步的了解。做到这一步满以为不会再有什么错误了,但是仿真的时候却又遇到了马麻烦,先是数码管不亮,在后来就是全亮,按键后没反响,刚有的一点成功感马上就没了,又一次陷入了反复的检测。检测发
30、现了不少问题,解决后仿真成功。在后来就开始烧片,烧片的过程还算顺利。烧好后插上电路板,显示成功了。接下来的工作一切还算顺利,在老师还有同学的帮助下,都一一完成。 这次的实训设计总的来说还是很成功的,自己从中学到很多,也发现了不少问题,为自己以后的学习、进步打下了不错的根底。从实训设计中,学到了单片机at89c51的内部结构及其工作原理,了解了串口通信的工作原理,还有共阳极数码管的工作原理,稳固了c语言的使用能力,提高了自己动手的能力,学到了很多经验,并且提高了自己分析问题的能力和创新能力,得到了理论联系实际的时机,做出了成果。使自己在硬件设计方面树立了信心,为以后从事这方面的工作打好了根底,这
31、也是这次实训设计的最大收获。 附录: 串口通信c语言源程序 /*单片机自发自收程序*/ #include #define uchar unsigned char #define uint unsigned int sbit p20=p20; sbit p21=p21; sbit p22=p22; sbit p23=p23; sbit p24=p24; sbit p25=p25; sbit p26=p26; sbit p27=p27; uchar code dsy16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc
32、6,0xa1,0x86,0x8e,; /* 实验板数码管的编码 */ signed int a; void delay(uint n) /延时程序 uint j; uchar k; for(j=0;j<10000;j+) for(k=0;k 0) a=a-1; else a=15; break; /按键2 ,减一个数 default:break; 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 单片机c语言程序设计实训100例基于8051+proteus仿真案例 第 01 篇 根底程序设计 01 闪烁的led /* 名称:闪烁的led */ #include #d
33、efine uchar unsigned char #define uint unsigned int sbit led=p10; /延时 void delayms(uint x) uchar i; while(x-) 说明:led按设定的时间间隔闪烁 for(i=0;i while(1) led=led; delayms(150); 02 从左到右的流水灯 /* 名称:从左到右的流水灯 说明:接在p0口的8个led从左到右循环依次点亮,产生走马灯效果 */ #include #include #define uchar unsigned char #define uint unsigned
34、int 1 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /延时 void delayms(uint x) uchar i; while(x-) for(i=0;i 03 8只led左右来回点亮 /* 名称:8只led左右来回点亮 说明:程序利用循环移位函数crol和cror形成来回滚动的效果 */ #include #include #define uchar unsigned char #define uint unsigned int /延时 void delayms(uint x) uchar i; while(x-) f
35、or(i=0;i delayms(150); /主程序 void main() uchar i; p2=0x01; while(1) 2 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 for(i=0;i delayms(150); 04 把戏流水灯 /* 名称:把戏流水灯 说明:16只led分两组按预设的多种把戏变换显示 */ #include #define uchar unsigned char #define uint unsigned int uchar code patternp0= 0xfc,0xf9,0xf3,0xe
36、7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,
37、0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0
38、xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff ; uchar code patternp2= 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8
39、,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
40、0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 3 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff ; /延时 void delayms(uint x) uchar i; while(x-) for(i=0;i uchar
41、 i; while(1) /从数组中读取数据送至p0和p2口显示 for(i=0;i p0=patternp0i; p2=patternp2i; delayms(100); 05 led模拟交通灯 /* 名称:led模拟交通灯 说明:东西向绿灯亮假设干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,假设干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。 */ #include #define uchar unsigned char #define uint unsigned int sbit reda=p00; /东西向灯 sbit yellowa=p01; sbit gr
42、eena=p02; sbit redb=p03; /南北向灯 sbit yellowb=p04; sbit greenb=p05; uchar flashcount=0,operationtype=1; /闪烁次数,操作类型变量 4 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /延时 void delayms(uint x) uchar i; while(x-) for(i=0;i case 1: /东西向绿灯与南北向红灯亮 reda=1;yellowa=1;greena=0; redb=0;yellowb=1;greenb=1
43、; delayms(2000); operationtype=2; break; case 2: /东西向黄灯闪烁,绿灯关闭 delayms(300); yellowa=yellowa;greena=1; if(+flashcount!=10) return; /闪烁5次 flashcount=0; operationtype=3; break; case 3: /东西向红灯,南北向绿灯亮 reda=0;yellowa=1;greena=1; redb=1;yellowb=1;greenb=0; delayms(2000); operationtype=4; break; case 4: /南
44、北向黄灯闪烁5次 delayms(300); yellowb=yellowb;greenb=1; if(+flashcount!=10) return; flashcount=0; operationtype=1; /主程序 void main() while(1) trafficlight(); 06 单只数码管循环显示09 上海师范大学信息与机电工程学院倪继锋 5 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /* 名称:单只数码管循环显示09 */ #include #include #define uchar unsigned char #define uin
45、t unsigned int uchar code dsycode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /延时 void delayms(uint x) uchar t; while(x-) for(t=0;t uchar i=0; p0=0x00; while(1) p0=dsycodei; i=(i+1)%10; delayms(300); 说明:主程序中的循环语句反复将09的段码送至p0口,使数字09循环显示 07 8只数码管滚动显示单个数字 /* 名称:8只数码管滚动显示单个数字 说明:数码管从左到右依次滚动显
46、示07,程序通过每次仅循环选通一只数码管 */ #include #include #define uchar unsigned char #define uint unsigned int uchar code dsycode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /延时 void delayms(uint x) uchar t; while(x-) for(t=0;t 6 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /主程序 void main() uchar
47、i,wei=0x80; while(1) for(i=0;i p2=0xff; /关闭显示 wei=crol(wei,1); p0=dsycodei; /发送数字段码 p2=wei; /发送位码 delayms(300); 08 8只数码管动态显示多个不同字符 电路如上图 /* 名称:8只数码管动态显示多个不同字符 说明:数码管动态扫描显示07。 */ #include #include #define uchar unsigned char #define uint unsigned int uchar code dsycode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0
48、x82,0xf8,0x80,0x90; /延时 void delayms(uint x) uchar t; while(x-) for(t=0;t for(i=0;i p0=0xff; p0=dsycodei; /发送段码 wei=crol(wei,1); 上海师范大学信息与机电工程学院倪继锋 7 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 p2=wei; /发送位码 delayms(2); 09 8只数码管闪烁显示数字串 电路如上图 /* 名称:8只数码管闪烁显示数字串 说明:数码管闪烁显示由07构成的一串数字 本例用动态刷新法显示一串数字,在停止刷新时所有数字显
49、示消失。 */ #include #define uchar unsigned char #define uint unsigned int /段码表 uchar code dsycode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /位码表 uchar code dsyidx=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /延时 void delayms(uint x) uchar t; while(x-) for(t=0;t for(i=0;i for(j=0;j p0=0xff; p0=dsyc
50、odej; /发送段码 p2=dsyidxj; /发送位码 delayms(2); p2=0x00; /关闭所有数码管并延时 delayms(1000); 上海师范大学信息与机电工程学院倪继锋 8 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 10 8只数码管滚动显示数字串 电路如上图 /* 名称:8只数码管滚动显示数字串 说明:数码管向左滚动显示3个字符构成的数字串 */ #include #include #define uchar unsigned char #define uint unsigned int /段码表 uchar code dsycode=0x
51、c0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; /下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏) uchar num=10,10,10,10,10,10,10,10,2,9,8; /延时 void delayms(uint x) uchar t; while(x-) for(t=0;t for(i=0;i for(j=0;j /发送段码,采用环形取法,从第k个开始取第j个 p0=0xff; p0=dsycodenum(k+j)%11; m=crol(m,1); p2=m; /发送位码 delayms(2); k=(k+
52、1)%11; /环形队列首支针k递增,num下标范围010,故对11取余 11 k1-k4 控制led移位 /* 名称:k1-k4 控制led移位 说明:按下k1时,p0口led上移一位; 上海师范大学信息与机电工程学院倪继锋 9 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 */ 按下k2时,p0口led下移一位; 按下k3时,p2口led上移一位; 按下k4时,p2口led下移一位; #include #include #define uchar unsigned char #define uint unsigned int /延时 void delayms(ui
53、nt x) uchar i; while(x-) for(i=0;i /根据p1口的按键移动led void moveled() if (p1&0x10)=0) p0=cror(p0,1); /k1 else if(p1&0x20)=0) p0=crol(p0,1); /k2 else if(p1&0x40)=0) p2=cror(p2,1); /k3 /k4 else if(p1&0x80)=0) p2=crol(p2,1); /主程序 void main() uchar recentkey; /最近按键 p0=0xfe; p2=0xfe; p1=0xff;
54、recentkey=0xff; while(1) if(recentkey!=p1) recentkey=p1; /保存最近按键 moveled(); delayms(10); 12 k1-k4 按键状态显示 10 上海师范大学信息与机电工程学院倪继锋 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /* 名称:k1-k4 按键状态显示 说明:k 1、k2按下时led点亮,松开时熄灭, */ #include #define uchar unsigned char #define uint unsigned int sbit led1=p00; sbit led2=p0
55、1; sbit led3=p02; sbit led4=p03; sbit k1=p10; sbit k2=p11; sbit k3=p12; sbit k4=p13; /延时 void delayms(uint x) uchar i; while(x-) for(i=0;i k 3、k4按下并释放时led点亮,再次按下并释放时熄灭; /主程序 void main() 13 k1-k4 分组控制led 11 上海师范大学信息与机电工程学院倪继锋 p0=0xff; p1=0xff; while(1) led1=k1; led2=k2; if(k3=0) while(k3=0); led3=led
56、3; if(k4=0) while(k4=0); led4=led4; delayms(10); 单片机c语言程序设计实训100例-基于8051和proteus仿真案例 /* 名称:k1-k4 分组控制led 说明:每次按下k1时递增点亮一只led,全亮时再次按下那么再次循环开始, k2按下后点亮上面4只led,k3按下后点亮下面4只led,k4按下后关闭所有led */ #include #define uchar unsigned char #define uint unsigned int /延时 void delayms(uint x) uchar i; while(x-) for(i=0;i uchar k,t,keystate; p0=0xff; p1=0xff; while(1) t=p1; if(t!=0xff) delayms(10); if(t!=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度房产买卖合同标的及交易程序
- 2024中国电信贵州公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国人民财产保险股份限公司永嘉支公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中储粮油脂镇江基地招聘41人易考易错模拟试题(共500题)试卷后附参考答案
- 2024上海红浦劳务派遣限公司招聘10名易考易错模拟试题(共500题)试卷后附参考答案
- 2024年度能源供应合同:光伏发电项目
- 2024年度旅游推广合同标的为旅游产品
- 2024年度泵车设备租赁风险管理合同
- 2024年度电子商务平台用户服务与支持合同3篇
- 2024年度互联网金融平台运营许可协议
- 《赤壁赋》《登泰山记》群文教学课件-统编版高中语文必修上册
- 园长课程领导力课件
- 部编版八年级语文上册全册习题精编课件含答案
- UN38.3 金属锂电池和锂离子电池组-中英文对照版
- 臀位分娩课件-
- 大学生节能减排科技竞赛作品申报书
- 单位工程竣工验收证明书(完整版)
- 小学数学北师大三年级上册数学好玩《校园中的测量》活动设计树德小学张三莉
- 大型机械租赁供应商考评表
- 初二数学秋季讲义 第8讲.分式恒等变形 教师版
- 线束检验标准(修订版)
评论
0/150
提交评论