登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] C51单片机 静态及动态数码管显示(详细)

[复制链接]
发表于 2023-2-3 11:23:05 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51单片机
学习安排:
开始时间: 2023-01-14
结束时间:
本帖最后由 马新豪 于 2023-2-3 11:30 编辑

C51单片机 静态及动态数码管显示(详细)

(详细版学习笔记,如有错误或不足,欢迎指正)

  我们要做的第一件事是要先点亮数码管,我们单片机所用的是共阳数码管,点亮需要激活相应数码管,再把想要点亮的LED处给0。

共阳数码管.png

  将数码管对应的管脚赋值为0,即点亮。这里让第一个数码管显示字母S。

s.jpg

代码如下:

  1. #include <STC12C5AXX.h>

  2. void main ()
  3. {       P11=0;

  4.         P22=0;
  5.         P21=0;
  6.         P20=0;
  7.         
  8.                                 P00=0;
  9.         P01=1;
  10.         P02=0;
  11.         P03=0;
  12.         P04=1;
  13.         P05=0;
  14.         P06=0;
  15.         P07=1;
  16.         
  17. while (1)
  18.    {
复制代码

  由下图可以看出对a-g对应的各个数码管是什么,咱们的板子是高位对高位,低位对低位,所以赋值时,DB0对应个位,DB1对应十位,以此类推,可得0-9的数码管段码为0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98

共阳数码管1.png

  下面可以用switch case及数组来做到更方便的显示,这需要如上的段码来做到。这里让第六个数码管显示6。

6.jpg

代码如下:
  1. #include <STC12C5AXX.h>

  2. unsigned char Nixie[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};

  3. void Nixietube(unsigned char Location,unsigned char Number)
  4. {
  5.         switch (Location)
  6.         {
  7.                   case 1:P20=0;P21=0;P22=0;break;
  8.       case 2:P20=1;P21=0;P22=0;break;
  9.       case 3:P20=0;P21=1;P22=0;break;      
  10.       case 4:P20=1;P21=1;P22=0;break;
  11.       case 5:P20=0;P21=0;P22=1;break;
  12.       case 6:P20=1;P21=0;P22=1;break;
  13.         }
  14.         P0=Nixie[Number];
  15. }

  16. void main()
  17. {
  18.         P11=0;
  19.         Nixietube(6,6);
  20.         while(1)
  21.         {
  22.                
  23.         }
  24. }
复制代码

  下一步需要做到多个数码管同时显示数字,但因为电路限制,不能让代码同时运行,所以可以用人眼的余晖效应,让每个数码管高速循环,以至于我们眼睛无法判断,来达到同时显示数字的目的。(这里需要添加延时函数,后面还需要清零来消影。)
0203.jpg

代码如下:

  1. #include <STC12C5AXX.h>
  2. #include <intrins.h>

  3. void Delay1us() //@32MHz
  4. {
  5. unsigned char i;

  6. i = 5;
  7. while (--i);
  8. }



  9. unsigned char Nixie[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};

  10. void Nixietube(unsigned char Location,unsigned char Number)
  11. {
  12. switch (Location)
  13. {
  14. case 1:P20=0;P21=0;P22=0;break;
  15. case 2:P20=1;P21=0;P22=0;break;
  16. case 3:P20=0;P21=1;P22=0;break;
  17. case 4:P20=1;P21=1;P22=0;break;
  18. case 5:P20=0;P21=0;P22=1;break;
  19. case 6:P20=1;P21=0;P22=1;break;
  20. }
  21. P0=Nixie[Number];
  22. Delay1us();
  23. P0=0xFF; //??:?????0xFF,?????0x00;
  24. }

  25. void main()
  26. {
  27. P11=0;

  28. while(1)
  29. {
  30. Nixietube(1,0);
  31. Nixietube(2,2);
  32. Nixietube(3,0);
  33. Nixietube(4,3);
  34. }
  35. }


复制代码
注意:共阳归零0xFF,共阴0x00.


好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表