原理图
一个芯片实现四位数码管显示以及LED指示灯驱动
代码如下:源文件aip1668.c
/******************************************************************************
* File Name:aip1668.c
* Author:pandy
* Date:2021-4-17
*
* Copyright (C) 2021,pandy All rights reserved.
*
* This software is owned and published by: pandy .
******************************************************************************/
#include "aip1668.h"
/*---------------------------------------段码数据表----------------------------------------------------------*/
//数码管:正向位置;共阴极;正向连接
//const volatile uint8_t SMG_Code[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//0-9,A-F
const volatile uint8_t SMG_Code[16]={
0xF4,0x44,0x72,0x56,0xC6,0x96,0xB6,0x44,0xF6,0xD6,0xE6,0xB6,0xB0,0x76,0xB2,0xA2};//0-9,A-F
const volatile uint8_t SMG_A[16]={
0x01,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x00,0x01,0x01};//数码管A段 0-9,A-F
const volatile uint8_t LED_K1[2]={
0x00, 0x01};//数码管A段作为LED1,0为关,1位开,
const volatile uint8_t LED_K2[2]={
0x00, 0x02};//数码管A段作为LED2 ,0为关,2位开
void Delay_us(unsigned int us)//微秒偏差2us,延时低于20us时偏差更大
{
for(;us>0;us--)
{
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
//时钟由原来的20MH变成现在40MH
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
NOP();NOP();NOP();NOP();
}
}
void Delay_ms(unsigned int t_ms)
{
uint16_t i,j;
for(i=0;i<t_ms;i++)
{
for(j=0;j<3290;j++); //时钟由原来的20MH变成现在40MH
}
}
/*-----------------------------------------------------------------
功能:开始传输数据
返回:无
------------------------------------------------------------------*/
void AiP1668_Start(void)
{
Aip1688_CLK_HIGH;
Aip1688_DIO_HIGH;
Aip1688_STB_LOW;
Delay_us(2);
}
/*-----------------------------------------------------------------
功能:结束传输数据
返回:无
------------------------------------------------------------------*/
void AiP1668_End(void)
{
Aip1688_CLK_HIGH;
Aip1688_DIO_HIGH;
Aip1688_STB_HIGH;
Delay_us(2);
}
/*----------------------------------------------------------------------------------
功能: 向1688写入一个数据。(写一个bit时需要在时钟的上升沿操作)
返回:无
------------------------------------------------------------------------------------*/
void AiP1668_WriteByte(unsigned char byte)