hc138.h
#ifndef __HC138_H
#define __HC138_H
#include "stm32f10x_conf.h"
extern void hc138_init(void);//初始化
extern void hc138_Out(int nu);//通过形参nu选择输出端
extern void hc595_Out(u8 data);//发送data
extern void show_digital_Out(int nu);//显示数字
#endif
shc138.c
#include"hc138.h"
#include"bitband.h"
#include"delay.h"
#define HC595_SCLK PBOut(5)
#define HC595_LCLK PBOut(4)
#define HC595_DATA PBOut(3)
#define HC138_A2 PDOut(2)
#define HC138_A1 PCOut(12)
#define HC138_A0 PCOut(11)
void hc138_init(void)
{
GPIO_InitTypeDef Gpio_Value;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
Gpio_Value.GPIO_Mode=GPIO_Mode_Out_PP;
Gpio_Value.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
Gpio_Value.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&Gpio_Value);
Gpio_Value.GPIO_Mode=GPIO_Mode_Out_PP;
Gpio_Value.GPIO_Pin=GPIO_Pin_2;
Gpio_Value.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD&Gpio_Value);
Gpio_Value.GPIO_Mode=GPIO_Mode_Out_PP;
Gpio_Value.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_11;
Gpio_Value.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&Gpio_Value);
}
void hc138_Out(int nu)
{
switch(nu)
{
case 0:HC138_A2=0;HC138_A1=0;HC138_A0=0;break;
case 1:HC138_A2=0;HC138_A1=0;HC138_A0=1;break;
case 2:HC138_A2=0;HC138_A1=1;HC138_A0=0;break;
case 3:HC138_A2=0;HC138_A1=1;HC138_A0=1;break;
}
}
void hc595_Out(u8 data)
{
u8 i=0;
for(i=0;i<8;i++)
{
HC595_SCLK=0;
if(data&0x80)
HC595_DATA=1;
else
HC595_DATA=0;
HC595_SCLK=1;
data<<=1;
}
HC595_LCLK=0;
HC595_LCLK=1;
}
void show_digital_Out(int nu)
{
u8 i=0;
u8 table[] = {0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
int d[4]={0};
d[0]=nu/1000;//千位
d[1]=nu/100%10;//百位
d[2]=nu/10%10;//十位
d[3]=nu%10;//个位
for(i=0;i<4;i++)
{
hc138_Out(i);
hc595_Out(table[d[i]]);
delay_ms(1);
hc595_Out(0);
}
}
main.c
#include"iwdg.h"
#include"led.h"
#include"fmq.h"
#include"key.h"
#include"delay.h"
#include"inte.h"
#include"hc138.h"
void h0(void)
{
Led_On(0);
Led_On(1);
Led_On(2);
}
void h1(void)
{
Fmq_On();
}
void h2(void)
{
Led_Off(1);
Fmq_Off();
}
int main(void)
{
int i=0,j=0;
inte_init();
Led_Init();
Key_Init();
Fmq_Init();
delay_init();
iwdg_init(5);
hc138_init();
set_inte_handler(h0,h1,h2);
for(i=0;i<3;i=(i+1)%3)
{
show_digital_Out(9999);
iwdg_fee_dog();
/*
Led_On(i);
delay_ms(1000);
Led_Off(i);
delay_ms(1000);
*/
}
return 0;
}