找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1763|回复: 7
收起左侧

单片机+74HC595四位数码管的驱动程序不太理解

[复制链接]
ID:950830 发表于 2021-7-18 22:13 | 显示全部楼层 |阅读模式
这是数码管的例程
LED[0]=1;
LED[1]=2;
LED[2]=3;
LED[3]=4;
主程序的这四句不太理解,也没有注释希望有大佬能解释一下
  1. #include <AT89X51.H>

  2. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  4. unsigned char  disbuf[4]={0,0,0,0};


  5. //-----------------------------------------------------------------------------
  6. // 函数原形定义
  7. #define uchar unsigned char

  8. void main (void);                                        // 主函数
  9. void LED4_Display (void);                        // LED显示
  10. void LED_OUT(uchar X);                                // LED单字节串行移位函数

  11. unsigned char code LED_0F[];                // LED字模表

  12. sbit DIO = P1^0;                                //串行数据输入
  13. sbit RCLK  = P1^1;                                //时钟脉冲信号——上升沿有效
  14. sbit SCLK = P1^2;                                //打入信号————上升沿有效

  15. //-----------------------------------------------------------------------------
  16. // 全局变量
  17. uchar LED[8];        //用于LED的8位显示缓存


  18. //*****************************************************************************
  19. // 主程序
  20. //
  21. void main (void)
  22. {

  23.         LED[0]=1;
  24.         LED[1]=2;
  25.         LED[2]=3;
  26.         LED[3]=4;

  27.         while(1)
  28.         {
  29.                 LED4_Display ();
  30.         }
  31. }

  32. void LED4_Display (void)
  33. {
  34.         unsigned char code *led_table;          // 查表指针
  35.         uchar i;
  36.         //显示第1位
  37.         led_table = LED_0F + LED[0];
  38.         i = *led_table;

  39.         LED_OUT(i);                        
  40.         LED_OUT(0x01);               

  41.         RCLK = 0;
  42.         RCLK = 1;
  43.         //显示第2位
  44.         led_table = LED_0F + LED[1];
  45.         i = *led_table;

  46.         LED_OUT(i);               
  47.         LED_OUT(0x02);               

  48.         RCLK = 0;
  49.         RCLK = 1;
  50.         //显示第3位
  51.         led_table = LED_0F + LED[2];
  52.         i = *led_table;

  53.         LED_OUT(i);                        
  54.         LED_OUT(0x04);        

  55.         RCLK = 0;
  56.         RCLK = 1;
  57.         //显示第4位
  58.         led_table = LED_0F + LED[3];
  59.         i = *led_table;

  60.         LED_OUT(i);                        
  61.         LED_OUT(0x08);               

  62.         RCLK = 0;
  63.         RCLK = 1;
  64. }

  65. void LED_OUT(uchar X)
  66. {
  67.         uchar i;
  68.         for(i=8;i>=1;i--)
  69.         {
  70.                 if (X&0x80) DIO=1; else DIO=0;
  71.                 X<<=1;
  72.                 SCLK = 0;
  73.                 SCLK = 1;
  74.         }
  75. }

  76. unsigned char code LED_0F[] =
  77. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  78.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  79. };
复制代码

回复

使用道具 举报

ID:161164 发表于 2021-7-18 23:50 | 显示全部楼层
就是把1,2,3,4放入數列LED的第0,1,2,3位
回复

使用道具 举报

ID:950830 发表于 2021-7-20 10:39 | 显示全部楼层
lkc8210 发表于 2021-7-18 23:50
就是把1,2,3,4放入數列LED的第0,1,2,3位

这个1、2、3、4具体指的是什么呢,是让数码管显示1、2、3、4吗,如果是这的话,我就更懵了
回复

使用道具 举报

ID:94031 发表于 2021-7-20 10:49 | 显示全部楼层
把全部工程发出来,否则无法看明白。
回复

使用道具 举报

ID:161164 发表于 2021-7-20 11:03 | 显示全部楼层
boboj 发表于 2021-7-20 10:39
这个1、2、3、4具体指的是什么呢,是让数码管显示1、2、3、4吗,如果是这的话,我就更懵了

1,2,3,4是数值
经过一些运算处理后就可以让数码管显示1,2,3,4
有啥问题?
回复

使用道具 举报

ID:934353 发表于 2021-7-20 11:13 | 显示全部楼层
boboj 发表于 2021-7-20 10:39
这个1、2、3、4具体指的是什么呢,是让数码管显示1、2、3、4吗,如果是这的话,我就更懵了

1,2,3,4就是数据呀,这四个的意思就是将LED[8]这个数组的一部分初始化,就是给数组中前四个数据赋值,因为之后的数码管显示要用到这个数组。
回复

使用道具 举报

ID:950830 发表于 2021-7-25 15:16 | 显示全部楼层
开心就好hhhh 发表于 2021-7-20 11:13
1,2,3,4就是数据呀,这四个的意思就是将LED[8]这个数组的一部分初始化,就是给数组中前四个数据赋值,因 ...

非常感谢,终于搞明白了
回复

使用道具 举报

ID:950830 发表于 2021-7-25 15:17 | 显示全部楼层
lkc8210 发表于 2021-7-20 11:03
1,2,3,4是数值
经过一些运算处理后就可以让数码管显示1,2,3,4
有啥问题?

非常感谢,搞明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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