找回密码
 立即注册

QQ登录

只需一步,快速开始

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

能否分享AIP1948DEMO程序

[复制链接]
跳转到指定楼层
楼主
ID:21455 发表于 2025-6-5 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁有AIP1948DEMO程序?求分享,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1175769 发表于 2026-9-18 20:31 | 只看该作者
AiP1948是中微爱芯的LED驱动控制芯片,与AiP1628指令完全兼容。

下面是一个完整的51单片机DEMO程序:

#include <reg52.h>
#include <intrins.h>


// 引脚定义(根据实际硬件连接修改)
sbit AIP_CLK = P1^0;  // 时钟线
sbit AIP_DIO = P1^1;  // 数据线
sbit AIP_STB = P1^2;  // 片选线


// 段码表(共阴极数码管0-9)
unsigned char code SEG_TABLE[] = {
    0x3F, 0x06, 0x5B, 0x4F, 0x66,  // 0-4
    0x6D, 0x7D, 0x07, 0x7F, 0x6F   // 5-9
};


// 延时函数
void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for(i = ms; i > 0; i--)
        for(j = 110; j > 0; j--);
}


// 向AiP1948写一个字节数据
void AIP1948_WriteByte(unsigned char dat) {
    unsigned char i;
    AIP_CLK = 1;
    for(i = 0; i < 8; i++) {
        AIP_CLK = 0;
        if(dat & 0x01)
            AIP_DIO = 1;
        else
            AIP_DIO = 0;
        dat >>= 1;
        AIP_CLK = 1;
    }
}


// 从AiP1948读取按键数据
unsigned char AIP1948_ReadKey(void) {
    unsigned char i, key_data = 0;
    AIP_STB = 0;
    AIP1948_WriteByte(0x42);  // 读按键命令
    AIP_DIO = 1;  // 释放数据线
    for(i = 0; i < 8; i++) {
        AIP_CLK = 0;
        key_data >>= 1;
        if(AIP_DIO)
            key_data |= 0x80;
        AIP_CLK = 1;
    }
    AIP_STB = 1;
    return key_data;
}


// 设置显示模式(16段16位模式)
void AIP1948_SetDisplayMode(void) {
    AIP_STB = 0;
    AIP1948_WriteByte(0x00);  // 显示模式设置:16段16位
    AIP_STB = 1;
}


// 设置数据命令(地址自动加1)
void AIP1948_SetDataCommand(void) {
    AIP_STB = 0;
    AIP1948_WriteByte(0x40);  // 数据命令:写数据到显示寄存器,地址自动加1
    AIP_STB = 1;
}


// 设置显示地址
void AIP1948_SetAddress(unsigned char addr) {
    AIP_STB = 0;
    AIP1948_WriteByte(0xC0 | addr);  // 地址命令:设置显示地址
    AIP_STB = 1;
}


// 设置显示控制(亮度0-7级)
void AIP1948_SetBrightness(unsigned char brightness) {
    AIP_STB = 0;
    AIP1948_WriteByte(0x88 | (brightness & 0x07));  // 显示控制:开启显示,设置亮度
    AIP_STB = 1;
}


// 显示数字(在指定位置显示0-9)
void AIP1948_DisplayNum(unsigned char pos, unsigned char num) {
    if(num > 9) return;
   
    AIP1948_SetDataCommand();
    AIP1948_SetAddress(pos * 2);  // 每个数字占2个字节
   
    AIP_STB = 0;
    AIP1948_WriteByte(SEG_TABLE[num]);  // 写段码低字节
    AIP1948_WriteByte(0x00);            // 写段码高字节(无小数点)
    AIP_STB = 1;
   
    AIP1948_SetBrightness(7);  // 最大亮度
}


// 清屏
void AIP1948_Clear(void) {
    unsigned char i;
    AIP1948_SetDataCommand();
    AIP1948_SetAddress(0x00);
   
    AIP_STB = 0;
    for(i = 0; i < 32; i++) {  // 16位×2字节=32字节
        AIP1948_WriteByte(0x00);
    }
    AIP_STB = 1;
   
    AIP1948_SetBrightness(7);
}


// 主函数
void main() {
    unsigned char i;
    unsigned char key;
   
    // 初始化
    AIP_CLK = 1;
    AIP_DIO = 1;
    AIP_STB = 1;
   
    delay_ms(100);  // 上电延时
   
    // 设置显示模式
    AIP1948_SetDisplayMode();
   
    // 清屏
    AIP1948_Clear();
   
    // 主循环
    while(1) {
        // 示例1:依次显示0-9
        for(i = 0; i < 10; i++) {
            AIP1948_DisplayNum(0, i);  // 在第0位显示数字
            delay_ms(1000);
        }
        
        // 示例2:多位显示(如显示"1234")
        AIP1948_DisplayNum(0, 1);
        AIP1948_DisplayNum(1, 2);
        AIP1948_DisplayNum(2, 3);
        AIP1948_DisplayNum(3, 4);
        delay_ms(2000);
        
        // 示例3:读取按键(如果有按键矩阵)
        key = AIP1948_ReadKey();
        if(key != 0) {
            // 根据按键值执行相应操作
            // 这里简单地在第0位显示按键值
            AIP1948_DisplayNum(0, key & 0x0F);
        }
    }
}

核心功能
三线串口通信:使用CLK、DIO、STB三个引脚与AiP1948通信
显示驱动:支持16段16位或24段8位显示模式
按键扫描:支持16×2按键矩阵读取
亮度调节:8级亮度可调(0-7级)
指令兼容性
AiP1948与AiP1628指令完全兼容,主要指令包括:
x00:显示模式设置(16段16位)
x40:数据命令(地址自动加1)
x42:读按键命令
xC0:地址命令
x88:显示控制(开启显示+亮度)

硬件连接
单片机          AiP1948
P1.0 (CLK)  →    PIN 11 (CLK)
P1.1 (DIO)  ↔    PIN 10 (DIO)
P1.2 (STB)  →    PIN 12 (STB)

根据实际硬件连接修改引脚定义
如需使用24段8位模式,将显示模式命令改为0x01
按键读取需要在STB低电平期间完成
显示刷新建议在定时器中断中进行,避免闪烁

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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