单片机数码管动态显示实验报告 实验一 数码管动态显示实验 实验目的 1、掌握数码管动态扫描显示的原理和编程实现方法; 2、掌握软件延时程序的使用。实验任务 利用数码管动态显示,设计一个两位秒表,计时0-59,时间到了显示“FF”,使用软件延时实现。实验原理 数码管动态显示的连接方式是将所有数码管的段码a、b、c、d 、e 、f、g、dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,如图1-1所示。
图1-1 多位LED数码管动态显示原理图 所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。具体过程是:当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的位选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中每位数码管的点亮时间为2ms左右,由于人的视觉暂留现象及发光极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 实现延时通常有两种方法:一种是硬件延时,这需要用到单片机的定时器,这种方法可以提高CPU的工作效率,也能做到精确控制时间,此方法将在实验四中再学习;另一种方法是软件延时,这种方法主要采用循环体进行。可以采用for循环以及for循环嵌套的方式达到粗略的长时间延时,利用Keil软件可以调试和观察for语句的延时时间。 电路原理图如图1-2所示。
图1-2 数码管动态显示实验电路 程序流程图
实验结果及分析总结 实验结果:
总结:本次实验我很好的复习了有关C语言的相关语句知识点,合理的运用到了单片机的程序编码中去,但实验过程中,也出现了很多问题。比如在运行过程中,数码管会乱码,检查后发现是扫描信号端口错误,将扫描信号端口顺序调换,重新运行则解决了乱码问题。共阴数码管电路0到15的显示参数代码表要记清楚。也知道了keil工程的建立步骤以及相关使用方法,在Proteus软件中按照要求画出单片机的要求电路,再利用Keil软件按需要实现的功能编写C语言程序,生成Hex文件,把这个文件导入Protues软件进行仿真。程序附录程序采用了共阴的数码管电路参数,用for循环达到延迟的效果,用while函数实现循环的效果;i/10是显示的内容是i的十位,i%10显示i的个位数,采用求整/求余%来分离某个出十位个位,从而达到规律的数字选择与显示。代码如下: #include”reg51.h” #define SEGNUM P0 #define BITUNM P2 char code table_CC[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f}; void delay(unsigned char num) { unsigned char i,j; while(num–); for(i=0;i<num;i–) for(j=0;j<150;j++) ; } void main() { int i,j; for(i=0;i<60;i++) for(j=0;j<150;j++) { SEGNUM=table_CC[i/10]; BITUNM=0xfe; delay(250); BITUNM=0xff; SEGNUM=table_CC[i%10]; BITUNM=0xfd; delay(250); BITUNM=0xff; } while(1) { P0=0x71; BITUNM=0xfe; delay(250); BITUNM=0xff; P0=0x71; BITUNM=0xfd; delay(250); BITUNM=0xff; } }
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/42699.html