微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 控制数码管的静态显示学习

控制数码管的静态显示学习

时间:10-02 整理:3721RD 点击:

单片机数码静态管的显示

电路原理图如下:



数码管的示意图:


上面是6个数码管,是共阴极连接的,we1 we2 we3 we4 we5 we6是位选引脚分别接在了U4锁存器的输出端口上,标有a b c ,d, e, f  g h的引脚全部是连在一起的,并且也连接在U3锁存器的输出端Q0-Q7上。如果要控制第一个共阴极数码管发光的话应该是we1输出要为0,如果要让它显示8的话,则a b c ,d, e, f g h全要点亮,小数点dp不能点亮这样才会显示数字8。
程序如下:

  1. #include <reg52.h>
  2. sbit dula=P2^6;
  3. sbit wela=P2^7;
  4. void main()
  5. {
  6.        wela=1;
  7.        P0=0xfe;
  8.     wela=0;
  9.       
  10.        dula=1;
  11.        P0=0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />7f;
  12.        dula=0;
  13.        while(1);
  14. }

复制代码


分析一下上面的程序,因为我们是把单片机的P0输出口用来控制锁存器的输入D0-D7电平进而控制其输出电平Q0-Q7,U3锁存器和U4锁存器的锁存端分别接在了单片机的P26,P27引脚上,wela=1是让U4锁存端开启,这样U4锁存器的输入与输出是连通的,其D端输入什么,Q端就输出什么电平,P0=0xfe=11111110的作用是让第一个数码管工作,其他的5个不工作,然后执行wela=0;关闭U4的锁存端,使位选的电平保持住了,之后是控制第一个数码管显示8了,要显示8的话则a b c ,d, e, f  g h全要点亮,小数点dp不能点亮,再来看看编码是什么a=1 b=1 c=1 d=1 e=1 f=1 g=1 h=0于是P0=01111111B=0x7f,然后dula=0关闭锁存端,这样段选的电平就保持住了,直到,段选电平改变时,才消失。

仿真结果:



按照上面的理解编写一个程序让实验板上的6个数码管全工作,并且每隔0.5s依次显示0—F。

//让实验板上的六个数码管同时点亮,依次显示0-F,间隔为05S

  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar num;
  7. uchar code table[]={
  8. 0x3f,0x06,0x5b,0x4f,
  9. 0x66,0x6d,0x7d,0x07,
  10. 0x7f,0x6f,0x77,0x7c,
  11. 0x39,0x5e,0x79,0x71};  //显示0-F P0口的输出端编码
  12. void delay_ms(uint);
  13. void main()
  14. {
  15. wela=1;
  16. P0=0xc0;
  17. wela=0;
  18. while(1)
  19.   {
  20.    for(num=0;num<16;num++)
  21.     {
  22.      dula=1;
  23.      P0=table[num];
  24.      dula=0;
  25.      delay_ms(500);
  26.     }
  27.   }
  28. }
  29. void delay_ms(uint xms)
  30. {
  31. uint i,j;
  32. for(i=xms;i>0;i--)
  33.   for(j=110;j>0;j--);
  34. }

复制代码

以上都参考自郭天祥的教程。




多谢诶分享,收藏看看。

谢谢小编哦

最基本的东西,简单易懂,初学者可以拿来入门

谢谢小编哦

有没有键盘输入,在2个4位7段数码管上显示8个数字的相关教程啊,我想要来学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top