北京信息科技大学单片机课程设计.docx

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 29 1 基本要求 ?利用动态显示方式实现在数码管上稳定显示012345;?通过单片机的I/O口控制步进电机运转,实现正转和反转;?利用单片机控制直流电机,掌握脉宽调制直流调速的方法。通过调节脉冲宽度,改变占空比,从而改变输出,达到改变直流电机运转的目的。 1.1数码管显示系统 数码管显示系统利用的是软件译码动态显示的方法在8段式共阴极LED上稳定显示所需显示的内容。具体原理就是将所有的数码管的段选线并接在一起,用一个I/O接口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是由相应的I/O接口线控制。工作过程就是:先给第一个数码管公共端有效,其他无效,同时给段选线相应的信号。这样,第一个数码管就显示相应的内容,其他数码管不亮。延迟一段时间后,给第二个数码管公共端有效,其他无效,同时给段选线相应的信号。这样,第二个数码管就显示相应的内容,其他数码管不亮。以此类推,直到最后一个,这样所用数码管轮流显示相应的信息,一次循环完毕后,下一次循环又这样轮流显示。从计算机的角度看是一个一个的显示,但是由于人的视觉暂停效应,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动态显示的原理。 动态显示所用的I/O口信号线少,线路简单,但软件开销大,需要CPU周期性的对它刷新,占用CPU大量的时间。 1.1.1 数码管显示硬件连接 本次实验所用电路是键盘与数码管显示电路。此电路利用8255芯片扩展并行I/O接口接数码管与键盘,数码管采用动态显示方式,8位数码管的段选线并联,与8255的B口相连,公共端则与A口相连。即8255的B口输出字段码使数码管显示相应的字符,A口输出位选码选择要显示的数码管,A、B口都工作在方式0输出。A口、B口、C口和控制字的地址分别为7f00H、7f01H、7f02H和7f03H。8255 可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图所示,8255 工作方式控制字和C口按位置位/复位控制字格式如图所示。 图 8255内部结构及外部引脚图 图 8255控制字格式 键盘扫描及数码管显示单元原理图 键盘扫描及数码显示接线图 1.1.2芯片8255介绍 芯片说明:8255A是Intel公司生产的可编程输入输出接口芯片,它具有3个8位的并行I/O口,具有三种工作方式,可通过程序改变其功能,因而使用灵活,通用性强,可作为单片机与多种外围设备连接时的中间接口电路。8255有三种基本工作方式,?三种工作方式由工作方式控制字决定,方式控制字由CPU通过输入/输出指令来提供.三个端口中PC口被分为两个部分,上半部分随PA口称为A组,下半部分随PB口称为B组.其中PA口可工作与方式0、1和2,而PB口只能工作在方式0和1。8255共有40个引脚,采用双列直插式封装,各引脚功能如下: D0--D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。 CS:片选信号线,低电平有效,表示芯片被选中。 RD:读出信号线,低电平有效,控制数据的读出。 WR:写入信号线,低电平有效,控制数据的写入。 Vcc:+5V电源。 PA0--PA7:A口输入/输出线。 PB0--PB7:B口输入/输出线。 PC0--PC7:C口输入/输出线。 RESET:复位信号线。 A1、A0:地址线,用来选择8255内部端口。 GND:地线 1.1.3具体源程序 #includereg51.h #includeabsacc.h //定义绝对地址访问 #define uchar unsigned char #define uint unsigned int uchar value[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71}; //0~F的字段码表 uchar value1[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位选码表 uchar a,b,c,d; void delay() //定义延时函数 {uchar j; for(j=0;j20;j++);} void main() //主函数 {XBYTE[0X7F03]=0X80; //8255初始化 while(1){ for(a=0;a6;a++){ b=value[a]; /

您可能关注的文档

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档