仿真电路

  • 元件:
英文名 中文名 属性
7SEG-MPX1-CA 共阳极数码管 -
7SEG-MPX1-CC 共阴极数码管 -
BUTTON 按键 -
RES 电阻 元件值设置为10K
  • 电路图:
    电路图

  • 仿真图:
    仿真图

    按键1 数字减1(0123456789.)
    按键2 数字加1
    按键3 切换字形码

程序设计

  • main.c:
    #include <AT89X51.H>
    #define uchar unsigned char
    #define uint unsigned int
    uchar ca[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,
                0x92, 0x82, 0xf8, 0x80, 0x90,
                0x7f}; //CA(共阳极)数码管字形码
    uchar cc[11] = {0x3f, 0x06, 0x5b, 0x4f, 0x66,
                0x6d, 0x7d, 0x07, 0x7f, 0x6f,
                0x80}; //CC(共阴极)数码管字形码
    //延时函数 t为毫秒(不准)
    void delay(uint t)
    {
    uint i;
    while (t--)
    {
    for (i = 120; i; i--)
      ;
    }
    }
    //主程入口
    void main()
    {
    uchar *p = ca; //指针,用于切换字形码
    char n = 0;    //当前显示的数字
    P1 = 0xff;     //P1所有脚输出高电平
    for (;;)
    //死循环,和while(1)等价
    {
    if ((P1 & 0x07) != 0x07)
    //判断P2的1,2脚是不是高电平
    {
      delay(10); //延时消除抖动
      if (!(P1 & 0x01))
      //P1.0相连的按键被按下
      {
        if (--n < 0)
        {
          n = 10;
        }
      }
      if (!(P1 & 0x02))
      //P1.1相连的按键被按下
      {
        if (++n > 10)
        {
          n = 0;
        }
      }
      if (!(P1 & 0x04))
      //P1.2相连的按键被按下
      {
        if (*p == 0xc0)
        //指针p指向ca
        {
          p = cc;
        }
        else
        {
          p = ca;
        }
      }
    }
    P2 = *(p + n); //控制P1输出
    delay(200);     //粗略延时
    }
    }

注解

数码管

  • 数码管

    数码管由8个LED组成,8个LED有一脚连在一起,称为公共极
    如果公共极是正极,称作共阳极(CA)数码管,反之称作共阴极(CC)数码管。
    数码管的引脚从左到右对应LED的顺序如图所示

字形码表

字形码表:

字符 共阳极 共阴极
0 0xC0 0x3F
1 0xF9 0x06
2 0xA4 0x5B
3 0xB0 0x4F
4 0x99 0x66
5 0x92 0x6D
6 0x82 0x7D
7 0xF8 0x07
8 0x80 0x7F
9 0x90 0x6F
A 0x88 0x77
B 0x83 0x7C
C 0xC6 0x39
D 0xA1 0x5E
E 0x86 0x79
F 0x8E 0x71
H 0x89 0x76
L 0xC7 0x38
P 0x8C 0x73
R 0xCE 0x31
U 0xC1 0x3E
Y 0x91 0x6E
- 0xBF 0x40
. 0x7F 0x80
无 0xFF 0x00

  • 指针的使用

    p = ca; 等价于p = *ca[0],指向数组的第一个元素
    指针p指向ca或cc两个数组
    使用*(p+n)访问数组中的元素,n称为偏移
    使用指针的时候小心超过数组的上下限

最后修改:2020 年 04 月 06 日
如果觉得我的文章对你有用,请随意赞赏