单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 191|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
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. ……………………

  120. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
【实用电子小模块】4位数码管驱动模块-IIC接口-AIP650芯片.rar (1.24 MB, 下载次数: 2)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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