用stm32写16X16点阵

2019-03-23 17:39发布

主程序:#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);#endifled_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纠结了半天了,都查不出问题所在,求高手指导啊!!!!!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。