/* * 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); }