实验八数码管LED实验报告.doc_第1页
实验八数码管LED实验报告.doc_第2页
实验八数码管LED实验报告.doc_第3页
实验八数码管LED实验报告.doc_第4页
实验八数码管LED实验报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

第 1 页 苏 州 大 学 实 验 报 告 院、系 年级专业 姓名 学号 课程名称 成绩 指导教师 同组实验者 实验日期 实验名称: 数码管 LED 实验 一实验目的 理解 8 段数码管的基本原理,理解 8 段数码管的显示和编程方法,理解 4 连排共阴极 8 段数码管 LG5641AH 与 MCU 的接线图。 二实验内容 理解 8 段数码管原理,运行与理解各子程序,编制一个 4 连排 8 段数码管程序,MCU 的 PTA7-PTA4 接各 LED 的位选线(自左到右),PTB7-PTB0 接 LED 的数据线 hgfedcba,在 4 连排 8 段数码管显示 MCU 复位后的开始到现在的运行时间。由于只有四个数码管,所以 只显示 MCU 运行到目前为止的分钟和秒,当计时达到一个小时,就重新从 00:00 开始计 时。另外,也可以通过 PC 方的串口通信程序,指定计时的开始值。 三实验过程 (一)原理图 (二)接线图 图 8-2 数码管外形 a g d f ec b h 图 8-1 数码管 (a)共阴极 GND abc def gdp (b) 共阳极 Vcc abc def gdp 第 2 页 (三)基本原理 8 段数码管一般由 8 个发光二极管(Llight-emitting diode,LED)组成,每一个位段就 是一个发光二极管。一个 8 段数码管分别由 a、b、c、d、e、f、g 位段,外加上一个小数点 的位段 h(或记为 dp)组成。根据公共端所接电平的高低,可分为共阳极和共阴极两种。有 时数码管不需要小数点,只有 7 个位段,称 7 段数码管。共阴极 8 段数码管的信号端高电平 有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使 a 段发光,则 在 a 段加上高电平即可。共阳极的 8 段数码管则相反,在相应的位段加上低电平即可使该位 段发光。 四编程 (一)流程图 图 8-3 MCU 与 4 连排 8 段数码管的连接 a g d f ec b h a g d f ec b h a g d f ec b h a g d f ec b h abfCS0CS1 CS2 cdeghCS3 123456 7891011 12 PTC3 PTB6 PTB2 PTB7 PTB3 PTB4 1K 1K1K 1K PTB1 PTC2 PTC1 PTB5 PTB0 PTC0 第 3 页 (二)所用寄存器名称及其各个位 程序中没有使用与 LED 显示相关的控制和状态寄存器,仅仅使用了通用 I/O 口 A 口和 B 口。 (三)主要代码段 1汇编方式: 数码管 LED 显示的主程序部分代码 MainInit: /复位后程序从此开始执行 /系统初始化 SEI /关中断 /1.堆栈初始化为 RAM 最高端 LDHX #RAMEndAddr /HX=#RAMEndAddr TXS /HX-1-SP /2.系统初始化 JSR MCUInit /初学时跳过此处 /3.串行口初始化 JSR SCIInit /4.定时器 1 初始化 JSR Timer1Init /调定时器 1 初始化子程序 BSET #5,SCC2 /设置接收中断允许 CLI /开中断 /LED 口初始化 LDA #0xff STA LEDdata_D /数据口为输出到 LED STA LEDcs_D /位选口为输出到 LED /给 Time0-2“时分秒“赋初值 0、0、0 (?多一个 0-1 即可) LDA #$0 图 8-4 数码管 LED 显示流程图(及其中断子程序) 开始 SCI 初始化 子程序 头文件 和声明 1 ? 人工复位 结束 开放 SCI 接收中断、 定时器 1 溢出中断, 开放总中断 等待定时器溢出中断 事件的发生 开始 结束 定时器初始 化子程序 计时值的秒加 1 秒达到 60 则清零, 分钟值加 1 分钟达到 60 则清零 等待 SCI 接收中断 事件的发生 开始 结束 把当前计时值改变为 接收到的计时初始值 取得计时初始值 第 4 页 STA Time STA Time+1 STA Time+2 /程序总循环入口 MainLoop: /LEDbuf0-3中放入要显示的数字 /分 LDA Time+1 CLRH LDX #10 DIV STA LEDbuf PSHH PULA STA LEDbuf+1 /秒 LDA Time+2 CLRH LDX #10 DIV STA LEDbuf+2 PSHH PULA STA LEDbuf+3 /在 4 位共阴极 LED 上显示 LEDbuf 中的 4 个数据(只允许 0-9) MOV #%11111110,I1 /初始位选信号(共阴极情况) /MOV #4,I2 /显示个数 AIS #-1 LDA #4 STA 1,SP LDHX #LEDbuf LEDShow: PSHH /保护数据地址 PSHX LDX ,X /数据 LDA I1 /位选信号 JSR LEDShow1 /显示一个数据 LDA I1 /变动位选信号 SEC ROLA STA I1 /延时 LDHX #10 JSR Delay_ms PULX /恢复数据地址 PULH AIX #1 /指向下一个数据 DBNZ 1,SP,LEDShow AIS #1 JMP MainLoop 数码管 LED 显示的中断子程序部分代码 /Timer1Int:定时器 1 溢出中断子程序-* /功能:给内存单元 Time0-2(时分秒)赋值 * /入口:无 * /出口:无 * /-* 第 5 页 Timer1Int: SEI /关总中断 PSHH /保护 H INC Time+2 /秒数加 1 LDA Time+2 CMP #60 BNE Timer1Int_1 /秒数未增加到 60,转 LDA #0 /秒数增加到 60,清 0 STA Time+2 INC Time+1 /分钟数加 1 LDA Time+1 CMP #60 BNE Timer1Int_1 /分钟数未增加到 60,转 LDA #0 /分钟数增加到 60,清 0 STA Time+1 INC Time /小时数加 1 LDA Time CMP #24 BNE Timer1Int_1 /小时数未增加到 24,转 LDA #0 /小时数增加到 24,清 0 STA Time Timer1Int_1: LDA T1SC BCLR #TOFBit,T1SC /清除定时器溢出标志位 PULH /恢复 H CLI /开总中断 RTI /SCIRecINT:SCI 接收中断子程序-* /功能:接收 3 字节基准时分秒放入内存单元 Time0-2 * /入口:无 * /出口:Time0-2 * /-* SCIRecINT: SEI /关总中断 PSHH /保护 H LDA #$03 LDHX #Time JSR SCIReN /接收 3 字节数据 PULH /恢复 H CLI /开总中断 RTI /中断返回 2C 语言方式: 数码管 LED 显示的主程序部分代码 /主函数 void main() INT8U i,j; DisMCUInt(); /禁止总中断 MCUInit(); /芯片初始化 SCIInit(); /串行口初始化 Timer1Init(); /定时器初始化 EnSCIReInt(); /开放 SCI 接收中断 EnT1OverflowInt(); /开放 Timer1 溢出中断 T1SC /允许定时器 1 计数 第 6 页 EnMCUInt(); /开放总中断 LEDdata_D = 0xff; /数据口为输出 LEDcs_D = 0xff; /位选口为输出 /给时分秒赋值初始化 time0 = 0; /时 time1 = 0; /分 time2 = 0; /秒 while(1) /LED 显示分和秒 LEDShowNum(0,time1 / 10); for(j=0;j250;j+); /延时 LEDShowNum(1,time1 % 10); for(j=0;j250;j+); /延时 LEDShowNum(2,time2 / 10); for(j=0;j250;j+); /延时 LEDShowNum(3,time2 % 10); for(j=0;j250;j+); /延时 数码管 LED 显示的中断程序部分代码 #pragma interrupt_handler isrSCIRe void isrSCIRe(void) DisMCUInt(); /禁止总中断 SCIReN(3,time); /接收时分秒 3 个字节的数据 EnMCUInt(); /开放总中断 #pragma interrupt_handler isrTimer1 void isrTimer1(void) DisMCUInt(); time2+; /秒加 1 if(time2 != 60) goto exit; /秒未增加到 60,转 exit time2 = 0; /秒增加到 60,清 0,分加 1 time1+; if(time1 != 60) goto exit; /分未增加到 60,转 exit time1 = 0; /分增加到 60,清 0,时加 1 time0+; if(time0 != 24) goto exit; /时未增加到 24,转 exit time0 = 0; /时增加到 24,清 0 exit: T1SC /清除定时器溢出标志位 EnMCUInt(); 五实验问答(根据实验指导书所列举的问题) 1驱动 LED 数码管有哪些方法? 答:用单片机驱动 LED 数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译 码方式可分硬件译码和软件译码。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的 数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据。动态显示需要 CPU 时刻对显 第 7 页 示器件进行数据刷新,显示数据有闪烁感,占用的 CPU 时间多。 2LED 静态显示和动态显示方式各有什么优缺点? 答:静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直 到下一次显示数据需要更新时再传送一次新数据。静态显示数据稳定,占用很少的 CPU 时间。动态显示 需要 CPU 时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的 CPU 时间多。这两种显示方式各 有利弊,静态显示虽然数据稳定,占用很少的 CPU 时间,但每个显示单元都需要单独的显示驱动电路, 使用的硬件较多;动态显示虽然有闪烁感,占用的 CPU 时间多,但使用的硬件少,能节省线路板空间。 3在本自编程序中,让第二个数码管的小数点仿照电子时钟 1 秒钟闪烁一下,只要改一处,能行吗? 答:可以。只

温馨提示

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

评论

0/150

提交评论