单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:16854|回复:25
打印上一主题下一主题

AIP650芯片单片机程序 实用电子小模块-4位数码管驱动模块-IIC接口

 [复制链接]
跳转到指定楼层
楼主
ID:600684发表于 2019-8-16 10:34|只看该作者|只看大图回帖奖励
L90-01是基于AiP650专用数码管按键驱动芯片的显示模块(以下简称模块),该模块包含一个12脚的4位共阴数码管(0.36英寸)、AiP650专用驱动芯片和三颗6×6×6的轻触按键,只需2根信号线即可使单片机控制该模块。
模块特点:
Ø 四位共阴红字数码管,8级灰度可调;
Ø 三颗6×6轻触按键方便用户人机互动,手柄高度可定制;
Ø 接线端子位置和定位孔共用市面上使用较多的0.96”OLED,方便用户置换;
Ø 驱动采用IIC串行数据总线接口,减少I/O数量;
Ø 可采用3-5.5V供电,适用3.3V5V单片机,无需增加电压转换电路;
应用:
Ø 本模块可应用于制作计数器、频率计、秒表、电压表等等数码管显示的场合;
适用:
Ø 单片机学习、DIY等。




附件包含原理图,51单片机的驱动例程,和芯片的Datasheet。

单片机源程序如下:
  1. #include "Config.H"
  2. //数码管0-9显示代码         0     1     2     3   4   5   6     7   8   9  
  3. u8 DISPLAY_CODE[10]     = {   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
  4. //数码管位数             1     2   3     4
  5. u8 DIG_BIT_CODE[4]     = {   0x68,0x6a,0x6c,0x6e };
  6. //8段显示亮度等级           1     2     3     4   5     6   7     8                
  7. u8 Light_Level_CODE[8]   = {   0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x01 };

  8. void I2CStart(void)//开始信号
  9. {
  10.    CLK_H;
  11.    DIO_H;
  12.    Delay_us(5);
  13.    DIO_L;
  14. }

  15. void I2Cask(void) //ACK信号
  16. {
  17.    u8 timeout = 1;
  18.    CLK_H;
  19.    Delay_us(5);
  20.    CLK_L;
  21.    while((DIO)&&(timeout<=100))
  22.    {
  23.        timeout++;
  24.    }
  25.    Delay_us(5);
  26.    CLK_L;
  27. }

  28. void I2CStop(void) //停止信号
  29. {
  30.    CLK_H;
  31.    DIO_L;
  32.    Delay_us(5);
  33.    DIO_H;
  34. }

  35. void I2CWrByte(u8 oneByte) //写一个字节高位在前,低位在后
  36. {
  37.    u8 i;
  38.    CLK_L;
  39.    Delay_us(1);
  40.    for(i=0;i<8;i++)
  41.    {
  42.        oneByte = oneByte<<1;
  43.        DIO = CY;
  44.        CLK_L;
  45.        Delay_us(5);
  46.        CLK_H;
  47.        Delay_us(5);
  48.        CLK_L;
  49.    }
  50. }

  51. void AiP650_Set(u8 add,u8 dat) //数码管显示
  52. {
  53.    //写显存必须从高地址开始写
  54.    I2CStart();
  55.    I2CWrByte(add); //第一个显存地址
  56.    I2Cask();
  57.    I2CWrByte(dat);
  58.    I2Cask();
  59.    I2CStop();
  60. }

  61. void AiP650_DisPlay(u8 DIG_Bit, u8 Display_num)       //显示一位数字
  62. {
  63.    AiP650_Set(DIG_BIT_CODE[DIG_Bit-1],DISPLAY_CODE[Display_num]);
  64. }

  65. void AiP650_CLR()                         //清屏
  66. {
  67.    u8 i;
  68.    for(i=0;i<4;i++)
  69.    {
  70.        AiP650_Set(DIG_BIT_CODE[i],0x00);      
  71.    }
  72. }

  73. void AiP650_DisPlayFourNum(u16 Display_num)       //显示一个四位数 (0-9999)
  74. {
  75.    u8 One,Two,Three,Four;
  76.    One   = Display_num/1000;
  77.    Two   = Display_num%1000/100;
  78.    Three = Display_num%100/10;
  79.    Four  = Display_num%10;
  80.    if(One == 0)
  81.    {
  82.        AiP650_Set(DIG_BIT_CODE[0],0x00);  
  83.        if(Two == 0)
  84.        {
  85.          AiP650_Set(DIG_BIT_CODE[1],0x00);
  86.          if(Three == 0)
  87.          {
  88.            AiP650_Set(DIG_BIT_CODE[2],0x00);
  89.          }
  90.          else
  91.          {
  92.            AiP650_DisPlay(3,Three);
  93.          }
  94.          AiP650_DisPlay(4,Four);
  95.        }
  96.        else
  97.        {
  98.          AiP650_DisPlay(2,Two);
  99.          AiP650_DisPlay(3,Three);
  100.          AiP650_DisPlay(4,Four);  
  101.        }
  102.    }
  103.    else  
  104.    {
  105.        AiP650_DisPlay(1,One);
  106.        AiP650_DisPlay(2,Two);
  107.        AiP650_DisPlay(3,Three);
  108.        AiP650_DisPlay(4,Four);
  109.    }        
  110. }

  111. void Light_Level_Set(u8 Level)                 //设置亮度等级 1-8级
  112. {
  113.    AiP650_Set(0x48,Light_Level_CODE[Level-1]);
  114. }

  115. u8 Scan_Key(void)  // 按键扫描
  116. {
  117.    u8 i;
  118.    u8 rekey;
  119.    I2CStart();
  120.    I2CWrByte(0x49);//读按键命令
  121.    I2Cask();
  122.    for(i=0;i<8;i++)
  123.    {
  124.      CLK_H;
  125.      rekey = rekey<<1;
  126.      if(DIO)
  127.      {
  128.      rekey++;
  129.      }
  130.      Delay_us(10);
  131.      CLK_L;
  132.    }
  133.    I2Cask();
  134.    I2CStop();
  135.    return(rekey);
  136. }
复制代码

Keil代码和原理图PDF手册下载:
【实用电子小模块】4位数码管驱动模块-IIC接口-AIP650芯片.rar(1.24 MB, 下载次数: 718)

评分

黑币 +15
收起理由
+ 15
赞一个!

查看全部评分

沙发
ID:515225发表于 2019-9-29 17:12|只看该作者
好资料,51黑有你更精彩!!!
板凳
ID:607312发表于 2019-11-8 11:21|只看该作者
很好。学习了
地板
ID:61860发表于 2019-11-29 10:06|只看该作者
很好。学习了
5#
ID:663393发表于 2019-12-17 14:16|只看该作者
好东西,拼接到STM32上完全可以使用,感谢
6#
ID:377247发表于 2020-3-19 21:25|只看该作者
谢谢分享!
7#
ID:90619发表于 2020-4-25 17:01|只看该作者
公司正用这款芯片,正好能学习下
8#
ID:739721发表于 2020-4-27 23:20|只看该作者
ATM51可以用这个程序吗?
9#
ID:744022发表于 2020-5-4 17:45|只看该作者
正在用这芯片,学习一下
10#
ID:682543发表于 2020-7-7 15:42|只看该作者
按键那部分读不出呀楼主
11#
ID:869417发表于 2021-1-24 23:00|只看该作者
有几块AIP1637的模块,到处找资料,谢谢了。不知道通不通用。
12#
ID:869417发表于 2021-2-13 10:29|只看该作者
正好手上有AIP1637的模块,不过是没键盘的。学习了。谢谢!
13#
ID:691135发表于 2021-9-7 20:02|只看该作者
正在用这芯片,学习一下
14#
ID:1009468发表于 2022-3-10 14:54|只看该作者
刚好用到AIP650的芯片
15#
ID:509666发表于 2022-4-26 17:13|只看该作者
显示有重影什么问题
16#
ID:618310发表于 2022-5-9 23:59|只看该作者
正在用这芯片,学习一下
17#
ID:142559发表于 2022-6-15 10:59|只看该作者
位选为什么是0x68,0x6a,0x6c,0x6e呢?这几位分别是什么寄存器
18#
ID:142559发表于 2022-10-12 16:34|只看该作者
归依龙井 发表于 2022-6-15 10:59
位选为什么是0x68,0x6a,0x6c,0x6e呢?这几位分别是什么寄存器

了解了,原来是数码管片选在芯片对应管脚上
19#
ID:168237发表于 2022-10-27 23:25|只看该作者
按键读取失败
20#
ID:1011952发表于 2022-10-28 09:09|只看该作者
这个芯片完全和TM1650兼容。
21#
ID:1095112发表于 2023-10-5 11:48|只看该作者
好资料,51黑有你更精彩!!!
22#
ID:1095481发表于 2023-10-9 11:34|只看该作者
好资料,多谢楼主
23#
ID:433219发表于 2023-10-9 15:08|只看该作者
始祖 TM1650  ---》AIP 650  程序兼容吧?
24#
ID:1110724发表于 2024-2-6 00:39|只看该作者
学习学习,感谢分享。
25#
ID:1064915发表于 2024-2-7 17:25|只看该作者
datasheet读按键指令是0x4f00,应该有误

26#
ID:387572发表于 2024-6-17 20:31|只看该作者
好资料学习中。还是51HEI这网好。

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

Powered by 单片机教程网