74HC138、74HC595和数码管实验

数码管显示9999

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;
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值