//DIO PA0
#define DIO_L GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define DIO_H GPIO_SetBits (GPIOA,GPIO_Pin_0)
#define DATA_READ GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
//CLK PC15
#define CLK_L GPIO_ResetBits(GPIOC,GPIO_Pin_15)
#define CLK_H GPIO_SetBits (GPIOC,GPIO_Pin_15)
//STB PC14
#define STB_L GPIO_ResetBits(GPIOC,GPIO_Pin_14)
#define STB_H GPIO_SetBits (GPIOC,GPIO_Pin_14)
void DIO_GPIO_OUT_Init(void);
void DIO_GPIO_IN_Init(void);
void CLK_GPIO_OUT_Init(void);
void STB_GPIO_OUT_Init(void);
void TM1668_Start(void);
void TM1668_End(void);
void Write_Byte(uint8_t byte);
void send_command(uint8_t cmd ); //发送命令字节
void display(void);
void display1 (void);
void display2 (void);
void read_bite(void);
void read_key1(void);
以上是.H文件
结构体配置
void DIO_GPIO_OUT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void DIO_GPIO_IN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void CLK_GPIO_OUT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void STB_GPIO_OUT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void TM1668_Start(void)
{
CLK_H;
DIO_H;
STB_L;
DHT11_DELAY_US(2);
}
void TM1668_End(void)
{
CLK_H;
DIO_H;
STB_H;
DHT11_DELAY_US(2);
}
/***************发送8bit数据,从低位开始**************/
void Write_Byte(uint8_t byte){
uint8_t i=0;
CLK_H;
for(i=0;i<8;i++)
{
CLK_L;
if(byte&0x01)
{
DIO_H;
}
else
{
DIO_L;
}
DHT11_DELAY_US(1);
CLK_H;
DHT11_DELAY_US(3);
byte>>=1;
}
DHT11_DELAY_US(1);
}
/******************发送控制命令***********************/
void send_command(uint8_t cmd ) //发送命令字节
{
STB_H; //STB置高
DHT11_DELAY_US(2);
STB_L; //STB置低
DHT11_DELAY_US(2);
Write_Byte(cmd);
DHT11_DELAY_US(2); //发送8bit数据
}
void display (void) //显示关闭程序
{
DIO_GPIO_OUT_Init();
CLK_GPIO_OUT_Init();
STB_GPIO_OUT_Init();
TM1668_Start();
send_command(0x80);
STB_H;
TM1668_End( );
}
void display1 (void) //固定地址显示A
{
DIO_GPIO_OUT_Init();
CLK_GPIO_OUT_Init();
STB_GPIO_OUT_Init();
TM1668_Start();
// uint8_t i;
send_command(0x00);
send_command(0x44);
//数码管1
send_command(0xC0);
Write_Byte(0x77);
send_command(0xC1);
Write_Byte(0x00);
send_command(0xC2);
Write_Byte(0x77);
send_command(0xC3);
Write_Byte(0x00);
send_command(0xC4);
Write_Byte(0x77);
send_command(0xC5);
Write_Byte(0x00);
send_command(0xC6);
Write_Byte(0x77);
send_command(0xC7);
Write_Byte(0x00);
send_command(0xC8);
Write_Byte(0xFF);
send_command(0xC9);
Write_Byte(0x00);
send_command(0xCA);
Write_Byte(0xFF);
send_command(0xCB);
Write_Byte(0x00);
send_command(0xCC);
Write_Byte(0x00);
send_command(0xCD);
Write_Byte(0x00);
send_command(0x8D);
STB_H;
TM1668_End( );
}
void display2 (void) //固定地址显示2
{
DIO_GPIO_OUT_Init();
CLK_GPIO_OUT_Init();
STB_GPIO_OUT_Init();
TM1668_Start();
// uint8_t i;
send_command(0x00);
send_command(0x44);
//数码管1
send_command(0xC0);
Write_Byte(0x5B);
send_command(0xC1);
Write_Byte(0x00);
send_command(0xC2);
Write_Byte(0x5B);
send_command(0xC3);
Write_Byte(0x00);
send_command(0xC4);
Write_Byte(0x5B);
send_command(0xC5);
Write_Byte(0x00);
send_command(0xC6);
Write_Byte(0x5B);
send_command(0xC7);
Write_Byte(0x00);
send_command(0xC8);
Write_Byte(0xFF);
send_command(0xC9);
Write_Byte(0x00);
send_command(0xCA);
Write_Byte(0x00);
send_command(0xCB);
Write_Byte(0x00);
send_command(0xCC);
Write_Byte(0x00);
send_command(0xCD);
Write_Byte(0x00);
send_command(0x8F);
STB_H;
TM1668_End( );
}
uint8_t key[5]={0};
void read_bite(void)//按键读取,读取5个字节的数据,这个按键读取注意延时时间
{
u8 i,j;
send_command(0x42);
DIO_H;
for(j=0;j<5;j++)
{
for(i=0;i<8;i++)
{
CLK_L;
key[j]=key[j]>>1;
CLK_H;
if(DATA_READ)
key[j]= key[j]|0x80;
DHT11_DELAY_US(3);
}
DHT11_DELAY_US(5);
}
TM1668_End();
}
void read_key1(void)//12个按键的按键对应程序
{
read_bite();
if(key[0]==0x01) {display1();}
if(key[0]==0x02) {display2();}
if(key[0]==0x08){display();}
if(key[0]==0x10){display1();}
if(key[1]==0x01) {display1();}
if(key[1]==0x02) {display2();}
if(key[1]==0x08){display();}
if(key[1]==0x10){display1();}
if(key[2]==0x01) {display1();}
if(key[2]==0x08){display2();}
if(key[3]==0x01) {display1();}
if(key[3]==0x08){display2();}
}