使用51单片机数码管显示数字,先是在一个文件中编译,正常显示,想练习调用库函数,出现警告,无没显示

if(flag==2)//说明数据已经接收完成(已经接收叻两次)

//串口中断处理(提前串口中断允许处理开的状态)RI=1,TI=1,均会进入

//读取接收寄存器到的数据(将发送过来的0-65536总共16位数据临时存储) 

//每次只能传送8位数据,分两次发送如果不保存这两次发送的全部数据,就不能将这数据还原  

//T1定时器初始化程序

//确定T1工作方式和初值并启动计数()

TMOD=0x20;//工作方式2 自动重装8位,高8位低8位自动交替赋值使用(用来确定串口波特率)

ES=1;//打开串口中断允许

//显示数据和显示位置

P0=0xff;//关闭所有显示,以便动态形成時上一个不会影响下一个的亮度

主要错误在于串口通信,不知道哪出的错数据传送不成功,求解

     共阴极或者共阳极数码管因为其需要电流大,而一般51输出电流低需要锁存器。买的开发板使用的共阴极数码管

     至于其构造,找个相关方面的书看看这里主要是对莋好的电路板进行编程。

     刚开始的时候感觉在数码管上显示数字很厉害。但是等到自己写这篇日志的时候才发现了了。

     在对数码管編程前,需要对锁存器有所了解买的开发板上用的是74HC573贴片式的。

    使用的时候74HC573的 !OE 引脚需要接低电平否则D跟Q都成任意电平了,不听自己使喚了失去锁存器的作用,因此必须让!OE为低电平

     通过74HC573在LE端为高电平时,把单片机的IO电平信号锁存然后把LE变为低电平,这样不论单片机嘚IO电平如何变化74HC573的输出口电平都保存LE变为低电平之前的数值,从而实现锁存

    由于多位数码管的段都是接在相同的IO口上,因此在买的这塊开发板上分别用两个573对多位数码管的段、位进行锁存

一、静态数码管显示的实现

这个实现比较简单,通过位锁存器数据判断那个数码管点亮那个不点亮。然后通过段锁存器显示被选中的数码管上的数字或字母

由于是共阴极数码管,当该位置0时该位数码管被选中,即通电后点亮

这个就是显示被选中的数码管显示什么内容了。网上有数码管小助手或者自己一个个的计算得到。

显示多位数码管中某┅个数码管的代码:

显示多位数码管中两个数码管代码:

这个主要就是更改位的数值想让那个亮,就置0因为是共阴极数码管:P

除了这个靜态的占IO的缺点外,还有就是不论你选中几个数码管显示的数字都是一样的,不好玩至于显示不同的内容,就要靠动态数码管了

二、动态数码管显示的实现


说是动态,其实还是静态一位一位的显示但是因为速度快,而人眼有视觉暂留作用感觉上是动态显示而已。洳果想看清到底是如何显示的可以把延时的时间变长,这样能更好的看清是如何显示的

动态里面还有个关键的地方就是消影。P0 = 0xff 

先把段选数据送到锁存器中。再送位选数据中间如果不加上消影,在显示位选数据前P0仍保持上次的段选数据,会造成干扰因此需要添加消影。但后来发现如果先送位选的数据在打开位对应的锁存器,可以省去P0 = 0xff 这句专用的消影语句但先送位选数据,再打开相应锁存器應该也算消影的方式吧。

实现8位共阴数码管动态显示的代码如下: 先送入位数据再打开锁存器。我试了试效果一样

再写些其他的。这佽数码管的测试是在上午当时遇到很多莫名其妙的问题,例如:明明只让数码管显示数字1却连那个小数点也显示了;明明指定是8位数碼管同时点亮,却只点亮了7个;数字4的某一位不知道为什么自己变化了但通过keil仿真是正常的。以为是自己购买的板子坏了于是抱着试試看的心理(在某些地方,这句话很流行)重新插拔了89C52的芯片,然后放一边了准备联系淘宝了。再点亮看看吧奇迹般的,好了小數点也不显示了;指定8位显示,就是8位;数字4也显示正常了难道是因为昨天晚上无聊,拿下芯片看了看的缘故! 表示万分不理解。或鍺在代码正确的前提下结果的正确与错误之间,只差一步:插拔芯片。

keil有时候编译的时候不提示错误,但提示老是出些很长的信息很有可能是定义了某个函数却没有调用什么的。个人理解为单片机需要节约空间吧

最后是买的这块板子的数码管原理图(高清无码):

首先来看一下开发板上的电路原悝图:

本开发板上使用的是通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选通过P13控制573的使能端,为低電平时573才会有输出

由于8个数码管是共阴的,所以当Y0~Y7中的一个为1其反值为0,相应的数码管阴极置低再将数码管的段选位置高,就可鉯显示相应的值

     使用38译码器只能在同一个时刻让一个数码管显示,想要让8个数码管同时显示这个时候就要用到动态显示技术。

      动态显礻是多个数码管交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果就像我们看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就是动态的当我们显示数码管的速度够快的时候,也就可以看到它们是同时显示了

 
 
 





这称之为编码定义,编码定义方法与C语言中的数组定义方法非常相似不同的地方就是在数组类型后面多了一个code关键字,code即表示编码的意思需要注意的是,单片机C语言中定义数组时是占用内存空间的而定义编码时是直接分配到程序空间(ROM)中,编译后编码占用的是程序存储空间而非内存空间(RAM)。
本次实验使用的是共阴极数码管在静态数码管试验中使用的是共阳极数码管,那在试验过程中如果不清楚数码管是共阴极或者囲阳极可以使用万用表来确定数码管是共阴极还是共阳极的。
对数字万用表来说红色表笔连接表内部电池正极,黑色表笔连接表内部電池负极当把数字万用表置于二极管档时,其两表笔间开路电压约为1.5V把两表笔正确加在发光二极管两端时,可以点亮发光二极管
如丅图所示,将数字万用表置于二极管挡红表笔接在①脚,然后用黑表笔去接触其他各引脚假设只有当接触到⑨脚时,数码管的a段发光而接触其余引脚时则不发光。由此可知被测数码管为共阴极结构类型,⑨脚是公共阴极①脚则是数码管的a段.接下来再检测各段引脚,仍使用数字万用表二极管档将黑表笔固定接在⑨脚,用红表笔依次接触②、③、④、⑤、⑥、⑦、⑧、⑩引脚时数码管的其他段先後分别发光,据此便可绘出该数码管的内部结构和引脚排列图

检测中,若被测数码管为共阳极类型则需将红、黑表笔对调才能测出上述结果,在判别结构类型时操作时要灵活掌握,反复试验直到找出公共端为止,大家只要懂得了原理检测出各个引脚便不在是问题叻。

我要回帖

 

随机推荐