172 lines
3.1 KiB
C
172 lines
3.1 KiB
C
/*
|
|
* ht1621.c
|
|
*
|
|
* Created on: 2021年10月12日
|
|
* Author: wuwenfeng
|
|
*/
|
|
|
|
|
|
#include "ht1621.h"
|
|
#include "my_code.h"
|
|
|
|
#define HT1621_addrbit 6 //驱动ic的ram地址位数 A5-A0
|
|
|
|
/**
|
|
* @brief HT1621 clk
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
void WriteClockHT1621(void)
|
|
{
|
|
HC595_SCK(0);
|
|
HC595_SCK(1);
|
|
}
|
|
/**
|
|
* @brief Write HT1621 Command
|
|
* @param FunctonCode->功能/命令码
|
|
* @retval None
|
|
*/
|
|
void WriteCommandHT1621(unsigned char FunctonCode)
|
|
{
|
|
unsigned char Shift = 0x80;
|
|
unsigned char i;
|
|
HC595_RCK(0); //CS 片选开
|
|
HC595_DCK(1); //100
|
|
WriteClockHT1621();
|
|
HC595_DCK(0);
|
|
WriteClockHT1621();
|
|
HC595_DCK(0);
|
|
WriteClockHT1621();
|
|
for(i = 0; i < 8; i++)
|
|
{
|
|
if(Shift & FunctonCode)
|
|
{HC595_DCK(1);}
|
|
else
|
|
{HC595_DCK(0);}
|
|
|
|
WriteClockHT1621();
|
|
Shift = Shift >> 1;
|
|
}
|
|
{HC595_DCK(0);}
|
|
WriteClockHT1621(); //发送一个 0 命令码中最后一位 X
|
|
HC595_RCK(1); //CS 片选关
|
|
HC595_DCK(1);
|
|
}
|
|
/**
|
|
* @brief Write 1 data to HT1621
|
|
* @param Addr->写入ram的地址
|
|
* @param Databuf->写入ram的数据
|
|
* @retval None
|
|
*/
|
|
void Write1DataHT1621(unsigned char Addr,unsigned char Dat)
|
|
{
|
|
unsigned char i;
|
|
unsigned char Shift;
|
|
HC595_RCK(0); //CS 片选开
|
|
HC595_DCK(1); //101
|
|
WriteClockHT1621();
|
|
HC595_DCK(0);
|
|
WriteClockHT1621();
|
|
HC595_DCK(1);
|
|
WriteClockHT1621();
|
|
Shift = 0x20; //屏蔽高3位 只用5位
|
|
for( i = 0; i < HT1621_addrbit; i++)
|
|
{
|
|
if(Addr & Shift)
|
|
{HC595_DCK(1);}
|
|
else
|
|
{HC595_DCK(0);}
|
|
WriteClockHT1621();
|
|
Shift = Shift >> 1;
|
|
}
|
|
|
|
Shift = 0x01;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if( Dat & Shift)
|
|
{HC595_DCK(1);}
|
|
else
|
|
{HC595_DCK(0);}
|
|
WriteClockHT1621();
|
|
Shift = Shift << 1;
|
|
}
|
|
HC595_RCK(1); //CS 片选关
|
|
HC595_DCK(1);
|
|
}
|
|
/**
|
|
* @brief Write n data to HT1621
|
|
* @param Addr->写入ram的起始地址
|
|
* @param Databuf->写入ram的数据buffer
|
|
* @param Cnt->写入ram的数据个数
|
|
* @retval None
|
|
*/
|
|
void WritenDataHT1621(unsigned char Addr,unsigned char *Databuf,unsigned char Cnt)
|
|
{
|
|
unsigned char i,j;
|
|
unsigned char Shift;
|
|
unsigned char dataval;
|
|
HC595_RCK(0); //CS 片选开
|
|
HC595_DCK(1); //101
|
|
WriteClockHT1621();
|
|
HC595_DCK(0);
|
|
WriteClockHT1621();
|
|
HC595_DCK(1);
|
|
WriteClockHT1621();
|
|
Shift = 0x20; //屏蔽高3位 只用5位
|
|
for( i = 0; i < HT1621_addrbit; i++)
|
|
{
|
|
if (Addr & Shift)
|
|
{HC595_DCK(1);}
|
|
else
|
|
{HC595_DCK(0);}
|
|
WriteClockHT1621();
|
|
Shift = Shift >> 1;
|
|
}
|
|
for (j = 0; j < Cnt; j++)
|
|
{
|
|
Shift = 0x01;
|
|
dataval=*Databuf++;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if( dataval & Shift)
|
|
{HC595_DCK(1);}
|
|
else
|
|
{HC595_DCK(0);}
|
|
WriteClockHT1621();
|
|
Shift = Shift << 1;
|
|
}
|
|
}
|
|
HC595_RCK(1); //CS 片选关
|
|
HC595_DCK(1);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @brief HT1621 Init
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
void HT1621_Init(void) //退出掉电低功耗状态重新初始化HT1621
|
|
{
|
|
HC595_RCK(1);
|
|
HC595_SCK(1);
|
|
HC595_DCK(1);
|
|
|
|
WriteCommandHT1621(OSC_ON);
|
|
WriteCommandHT1621(DISP_ON);
|
|
|
|
WriteCommandHT1621(COM_1_3__4);
|
|
|
|
//上电默认配置(以下未用功能关闭降低功耗)
|
|
|
|
WriteCommandHT1621(TIMER_DIS);
|
|
WriteCommandHT1621(WDT_DIS);
|
|
WriteCommandHT1621(BUZZ_OFF);
|
|
WriteCommandHT1621(IRQ_DIS);
|
|
|
|
|
|
}
|
|
|
|
|