#include "stm32f10x.h"
#include "74hc595.h"
#include "sys.h"
#include "delay.h"
u8 fseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 segbit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
u8 disbuf[4]={0,0,0,0};
void LED4_Display (void); // LED显示
void LED_OUT(u8 X); // LED单字节串行移位函数
u8 LED[8]; //用于LED的8位显示缓存
unsigned char LED_0F[] =
{// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
void hc595_Init(void) //IO初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);//使能PORTA,PORTE时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//KEY0-KEY2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化GPIOE2,3,4
}
void LED4_Display (void)
{
unsigned char *led_table; // 查表指针
u8 i;
//显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第4位
led_table = LED_0F + LED[3];
i = *led_table;
LED_OUT(i);
LED_OUT(0x08);
RCLK = 0;
RCLK = 1;
}
void LED_OUT(u8 X)
{
u8 i;
for(i=8;i>=1;i--)
{
if (X&0x80)
HC595_DATA_H();
else
HC595_DATA_L();
X<<=1;
HC595_CLK_L();
HC595_CLK_H();
}
}