主程序:#include "stm32f10x.h"#include <includes.h>#include<zimou.h>#include <led_scan.h>GPIO_InitTypeDef GPIO_InitStructure; //声明GPIO_InitStructure为DPIO的结构体u8 weixuan[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /*位选段码*/u8 num;void GPIO_Configuration(void);void RCC_Configuration(void);void Delay (uint32_t nCount);int main(void){
GPIO_Configuration();
RCC_Configuration();
CLR_MR;
set_OE1;
set_OE2;
set_MR;
CLR_OE1;
CLR_OE2; while (1)
{ for(num=0;num<16;num++)
{
Write_HC595_8Byte_one(zimou[2*num]);
Write_HC595_8Byte_one(zimou[2*num+1]);//行数据
Write_HC595_8Byte_two(weixuan[(2*num)/8]); Write_HC595_8Byte_two(weixuan[(2*num+1)/8]); //列数据
Delay(500); } } }/******************************************************************************** Function Name : GPIO_Configuration* Description : Configure GPIO Pin* Input : None* Output : None* Return : None* Attention
: None*******************************************************************************/void GPIO_Configuration(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);
//在设置外设前,我们必须给它调用一个时钟函数来使能外设时钟 //GPIO在APB2上 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//设为推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//初始化外设GPIOE}/*****************************************************************************/void RCC_Configuration(void){ ErrorStatus HSEStartUpStatus; /* 定义枚举类型变量 HSEStartUpStatus */ RCC_DeInit(); /* 复位系统时钟设置 */ RCC_HSEConfig(RCC_HSE_ON);/* 开启HSE */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 等待HSE 起振并稳定 */ if(HSEStartUpStatus == SUCCESS) /* 判断HSE 起是否振成功,是则进入 if()内部 */ { RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 选择HCLK(AHB)时钟源为SYSCLK 1 分频 */ RCC_PCLK2Config(RCC_HCLK_Div1);
/* 选择PCLK2 时钟源为 HCLK(AHB) 1分频 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* 选择PCLK1 时钟源为 HCLK(AHB) 2分频 */ FLASH_SetLatency(FLASH_Latency_2);
/* 设置FLASH 延时周期数为2 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* 使能FLASH 预取缓存 */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* 选择锁相环(PLL)时钟源为HSE 1 分频,倍频数为 9,则 PLL输出频率为 8MHz * 9 = 72MHz */ RCC_PLLCmd(ENABLE);
/* 使能PLL */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 等待PLL输出稳定 */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 选择SYSCLK 时钟源为PLL */ while(RCC_GetSYSCLKSource()!= 0x08); /* 等待PLL成为 SYSCLK时钟源 */ }}/**************************************************************************延时函数**************************************************************************/void Delay (uint32_t nCount){ for(; nCount != 0; nCount--);}/************************************************************************/
led_scan.h中的定义:#ifndef __LED_SCAN_H#define __LED_SCAN_H#include "stm32f10x.h"
#define set_MR GPIO_SetBits(GPIOE, GPIO_Pin_12) #define CLR_MR GPIO_ResetBits(GPIOE, GPIO_Pin_12) //MR=0 主复位#define set_DS1 GPIO_SetBits(GPIOE, GPIO_Pin_7)
//串行数据输入#define CLR_DS1 GPIO_ResetBits(GPIOE, GPIO_Pin_7)#define set_DS2 GPIO_SetBits(GPIOE, GPIO_Pin_13)
//串行数据输入#define CLR_DS2 GPIO_ResetBits(GPIOE, GPIO_Pin_13)#define set_SHCP
GPIO_SetBits(GPIOE, GPIO_Pin_9) // 移位寄存器时钟输入#define CLR_SHCP
GPIO_ResetBits(GPIOE, GPIO_Pin_9) // 移位寄存器时钟输入#define set_OE1
GPIO_SetBits(GPIOE, GPIO_Pin_8)#define
CLR_OE1
GPIO_ResetBits(GPIOE, GPIO_Pin_8)
//输出使能#define set_OE2
GPIO_SetBits(GPIOE, GPIO_Pin_11)#define
CLR_OE2
GPIO_ResetBits(GPIOE, GPIO_Pin_11)//输出使能#define
set_STCP1
GPIO_SetBits(GPIOE, GPIO_Pin_14)#define CLR_STCP1
GPIO_ResetBits(GPIOE, GPIO_Pin_14)//存储寄存器时钟输入#define
set_STCP2
GPIO_SetBits(GPIOE, GPIO_Pin_10)#define CLR_STCP2
GPIO_ResetBits(GPIOE, GPIO_Pin_10) void Write_HC595_8Byte_one(u8 data);void Write_HC595_8Byte_two(u8 data1);#endif
led_scan.c中的定义:#include "stm32f10x.h"#include <led_scan.h>/************************************************************************************************************/函 数 名:void Write_HC595_8Byte_one(u8 data)
?函数功能:向移位寄存器74HC595发送8字节的串行数据 //行数据入 参:行数据出 参:无***********************************************************************************************************/void Write_HC595_8Byte_one(u8 data){
u8 i,temp;
temp=data;
CLR_STCP1;
CLR_SHCP;
for(i=0;i<8;i++)
{
CLR_SHCP;
if(temp & 0x80)
{set_DS1; }
else
{CLR_DS1;}
set_SHCP; //上升沿发生移位
temp<<=1;
} set_STCP1;
CLR_SHCP;
CLR_STCP1;}/************************************************************************************************************函 数 名:void Write_HC595_8Byte_onetwo(u8 data1)
?函数功能:向移位寄存器74HC595发送8字节的串行数据 //列数据入 参:行数据出 参:无***********************************************************************************************************/void Write_HC595_8Byte_two(u8 data1){
u8 i,temp;
temp=data1 ;
CLR_STCP2;
CLR_SHCP;
for(i=0;i<8;i++)
{
CLR_SHCP;
if(temp & 0x80)
{
set_DS2; }
else
{
CLR_DS2; }
set_SHCP; //上升沿发生移位
temp<<=1;
} set_STCP2;
CLR_SHCP;
CLR_STCP2;}
编译会出现这样的错误:..USERled_scan.h(22): error: #65: expected a ";"..USERmain.c(26): warning: #223-D: function "Write_HC595_8Byte_one" declared implicitly纠结了半天了,都查不出问题所在,求高手指导啊!!!!!
此帖出自
小平头技术问答
一周热门 更多>