共3页
苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师向印实验3实验日期实验名称:数码管LED实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管LG5641AH与MCU的接线图。二.实验内容理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,MCU的PTA7PTB0接LED的数据线hgfedcba在4连排8段数码管显示MCU复位后的开始到现在的运行时间。由于只有四个数码管,所以只显示MCU运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。另外,也可以通过PC方的串口通信程序,指定计时的开始值。三.实验过程
(一)原理图图83MCU与4连排8段数码管的连接
三)基本原理8段数码管一般由8个发光二极管(Llght4数码管LED显示流程图(及其中断子程序)
二)所用寄存器名称及其各个位程序中没有使用与LED显示相关的控制和状态寄存器,仅仅使用了通用/O口A口和B口
三)主要代码段汇编方式:数码管LED显示的主程序部分代码Mannt:复位后程序从此开始执行系统初始化SE/关中断/1.堆栈初始化为RAM最高端LDH_#RAMEndAddrH_=#RAMEndAddrT_S/H_ ;SP/2.系统初始化JSRMCUnt/3.串行口初始化JSRSCn.定时器1初始化JSRTmerllnt初学时跳过此处调定时器1初始化子程序BSET#5,SCC2设置接收中断允许CL开中断/LED口初始化LDA#0_ffSTALEDdata_D数据口为输出至ULEDSTALEDcs_D/位选口为输出至ULED给Tme01即可)LDA#$0STATmeSTATme 1STATme 2程序总循环入口ManLoop:/LEDbuf09)MOV#111110,1初始位选信号(共阴极情况)/MOV#4,2显示个数AS#2(时分秒)赋值入口:无出口:无/Tmerlnt:SE关总中断PSHH/保护HNCTme 2秒数加1LDATme 2CMP#60BNETmer1nt_1秒数未增加到60,转LDA#0秒数增加到60,清0STATme 2NCTme 1/分钟数加1LDATme 1CMP#60BNETmer1nt_1分钟数未增加到60,转LDA#0分钟数增加到60,清0STATme 1NCTme小时数加1LDATmeCMP#24BNETmer1nt_1小时数未增加到24,转LDA#0小时数增加到24,清0STATme_Tmer1nt_1:LDAT1SCBCLR#TOFBt,T1SCPULHCLRT/清除定时器溢出标志位恢复H开总中断/SCRecNT:SC接收中断子程序功能:接收3字节基准时分秒放入内存单元入口:无出口:Tme02_2.C语百方式:SEPSHHLDA#$03LDH_#TmeJSRSCReNPULHCLRT关总中断/保护H/接收3字节数据/恢复H开总中断中断返回数码管LED显示的主程序部分代码主函数vodman()NT8U,j;DsMCUnt();禁止总中断MCUnt();芯片初始化SCnt();串行口初始化Tmer1nt();/定时器初始化EnSCRent();/开放SC接收中断EnT1Overflownt();/开放TmeU溢出中断T1SC=(1 ; ;TSTOPBt);允许定时器1计数EnMCUnt();开放总中断LEDdata_D=0_ff;LEDcs_D=0_ff;给时分秒赋值初始化tme0=0;tme1=0;tme2=0;/数据口为输出位选口为输出时分秒whle
(1)/LED显7K分和秒LEDShowNum(0,tme1/10);for(j=0;j ;250;j );/延时LEDShowNum(1,tme1);for(j=0;j ;250;j );/延时LEDShowNum(2,tme2/10);for(j=0;j ;250;j );/延时LEDShowNum(3,tme2);for(j=0;j ;250;j );/延时1数码管LED显示的中断程序部分代码#pragmanterrupt_handlersrSCRevodsrSCRe(vod)DsMCUnt();SCReN(3,tme);EnMCUnt();/禁止总中断/接收时分秒3个字节的数据/开放总中断#pragmanterrupt_handlersrTmer1vodsrTmer1(vod)DsMCUnt();tme2 ;/f(tme2!=60)gotoe_t;/tme2=0;/tme1 ;f(tme1!=60)gotoe_t;/tme1=0;/tme0 ;秒加1秒未增加到60,转e_t秒增加到60,清0,分加1分未增加到60,转e_t分增加到60,清0,时加1f(tme0!=24)gotoe_t;/时未增加到24,转e_ttme0=0;/时增加到24,清0e_t:T1SC=(1 ; ;TOFBt);/清除定时器溢出标志位EnMCUnt();五.实验问答(根据实验指导书所列举的问题)1.驱动LED数码管有哪些方法?答:用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。2.LED静态显示和动态显示方式各有什么优缺点?答:静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据。静态显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊,静态显示虽然数据用定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。3.在本自编程序中,让第二个数码管的小数点仿照电子时钟1秒钟闪烁一下,只要改一处,能行吗?答:可以。只要在定时器的中断处理程序中,该小数点类似小灯,每次对点电平取反的语句,即可达到该效果。4.LED要显示的数字如果较多,那么要占用MCU较多的/O引脚。想一想,为了节约引脚,可以芯片扩充,那么4个引脚最多能扩充出几个引脚?答:4个引脚最多能扩充出16个引脚。六.实验小结通过该实验实习,了解如何用单片机的来控制LED的显示,理解8段数码管的基本原理以及显示和编程方法。学会了用“位选线扫描法”来控制4连排共阴极8段数码管的显示。
举报
