STM32H7单片机+SI5351双通道高频信号发生器IC解密
IC解密STM32H7单片机源程序:
/*************************
内部RC时钟8MHZ
***********************************/
#include "mega16.h"
#include "i2c.h"
#include "delay.h"
#asm
.equ __i2c_port=0x12 //D端口地址0x12
.equ __sda_bit=6 //6脚
.equ __scl_bit=7 //7脚
#endasm
#define uchar unsigned char
#define uint unsigned int
#define uint8_t unsigned char
#define uint16_t unsigned int
#define uint32_t signed long int
/////////////////////////////////////
#define SI_CLK0_CONTROL 16
#define SI_CLK1_CONTROL 17
#define SI_CLK2_CONTROL 18
#define SI_SYNTH_PLL_A 26
#define SI_SYNTH_PLL_B 34
#define SI_SYNTH_MS_0 42
#define SI_SYNTH_MS_1 50
#define SI_SYNTH_MS_2 58
#define SI_PLL_RESET 177
#define SI_R_DIV_1 0x00
#define SI_R_DIV_2 0x16
#define SI_R_DIV_4 0x20
#define SI_R_DIV_8 0x30
#define SI_R_DIV_16 0x40
#define SI_R_DIV_32 0x50
#define SI_R_DIV_64 0x60
#define SI_R_DIV_128 0x70
#define SI_CLK_SRC_PLL_A 0x00
#define SI_CLK_SRC_PLL_B 0x20
#define XTAL_FREQ 25000000 // 晶体频率
#define I2C_START 0x08
#define I2C_START_RPT 0x10
#define I2C_SLA_W_ACK 0x18
#define I2C_SLA_R_ACK 0x40
#define I2C_DATA_ACK 0x28
#define I2C_WRITE 0xc0
#define I2C_READ 0xc1
unsigned char Table[]="0123456789";
unsigned char Data[9];
/**********1602**************/
#define RS_1 PORTC.2=1
#define RS_0 PORTC.2=0
#define EN_1 PORTC.0=1
#define EN_0 PORTC.0=0
#define LCD_D4_1 PORTB.4=1
#define LCD_D4_0 PORTB.4=0
#define LCD_D5_1 PORTB.3=1
#define LCD_D5_0 PORTB.3=0
#define LCD_D6_1 PORTB.2=1
#define LCD_D6_0 PORTB.2=0
#define LCD_D7_1 PORTB.1=1
#define LCD_D7_0 PORTB.1=0
//////////函数声明//////////////////////////////////
void i2cSendRegister(uint8_t reg,uint8_t data);
void setupPLL(uint8_t pll, uint8_t mult, uint32_t num, uint32_t denom);
void setupMultisynth(uint8_t synth, uint32_t divider, uint8_t rDiv);
//void si5351aOutputOff(uint8_t clk);
void si5351aSetFrequency(uint8_t td,uint32_t frequency);
void LCD_en_write(void);//液晶使能
void LCD_by(uchar abc);//写字节
void LCD_set_xy(uchar x, uchar y);//写地址
void LCD_write_str(uchar X,uchar Y,uchar *s);//写字符串
void LCD_init(void);//液晶初始化
void delay_nus(uint n);
void del_ms(uint n);
void delay_us(unsigned int n);
void process_8(unsigned long i,unsigned char *p);
void display_8(unsigned char x, unsigned char y, unsigned char *p);
/*8位数预处理函数*/
void process_8(unsigned long i,unsigned char *p)
{
p[0]=i/100000000%10;
p[1]=i/10000000%10;
p[2]=i/1000000%10;
p[3]=i/100000%10;
p[4]=i/10000%10;
p[5]=i/1000%10;
p[6]=i/100%10;
p[7]=i/10%10;
p[8]=i%10;
}
/*8位数显示函数*/
void display_8(unsigned char x, unsigned char y, unsigned char *p)
{
unsigned char i;
LCD_set_xy( x, y );
RS_1; //RS=1,写显示内容
for(i=0;i<9;i++)//8
{
if(i==3)
{
LCD_write_str(3,0,".");
}
if(i==6)
{
LCD_write_str(7,0,".");
}
LCD_by(Table[p[ i]]);
}
}
void LCD_en_write(void)
{
delay_us(5);
EN_1;
delay_us(5);
EN_0;
}

芯片解密