/*******************************************************************************
**版权信息 : www.yxarm.com
**文件名 : main.c
**作者 : 霍小波
**版本号 : V1.0
**时间 : 2011-6-1
**功能描述 : 应用74LS164的单工通信,实现流水灯
********************************************************************************/
/*Includes--------------------------------------------------*/
#include"stm32f10x_lib.h" //包含所有的头文件,它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的连接
#include<stdio.h>
//------------显示数据-------------------
u8 const LS164_TAB[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,};
u8 const LS164_TAB1[2]={0X00,0XFF};
u8 const LS164_TAB2[8]={0X18,0X24,0X42,0X81,0X81,0X42,0X24,0X18};
u8 const LS164_TAB3[8]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
//------------函数的声明-----------------
void Delay_MS(u16 time); //延时函数的声明
void RCC_Configuration(void); //时钟配置
void GPIO_Configuration(void); //GPIO的配置
void LS164_SendData(u8 data); //LS164数据发送
/*******************************************************************************
** 名称 :int main(void)
** 功能 :主函数
** 入口参数 :无
** 出口参数 :无
*******************************************************************************/
int main(void)
{
u8 i,j;
#ifdef DEBUG
debug();
#endif
//----------初始化RCC和GPIO-----
RCC_Configuration();
GPIO_Configuration();
//---------流水灯效果-------------
while(1)
{
for(i=0;i<8;i++) //从左至右依次点亮
{
LS164_SendData(LS164_TAB[i]);
Delay_MS(1000);
}
for(j=0;j<4;j++) //闪烁
{
for(i=0;i<2;i++)
{
LS164_SendData(LS164_TAB1[i]);
Delay_MS(1000);
}
}
for(i=0;i<8;i++)
{
LS164_SendData(LS164_TAB3[i]);
Delay_MS(1000);
}
for(i=0;i<8;i++) //从中间到两头,然后再到中间点亮
{
LS164_SendData(LS164_TAB2[i]);
Delay_MS(1000);
}
}
}
/*******************************************************************************
** 名称 :void Delay_MS(u16 time)
** 功能 :延时1MS
** 入口参数 :time
用户的延时参数
** 出口参数 :无
*******************************************************************************/
void Delay_MS(u16 time)
{
u16 i,j;
for(i=0;i<time;i++)
for(j=1000;j>0;j--);
}
/*******************************************************************************
* Function Name : RCC_Configuration
* Description : Configures the different system clocks.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RCC_Configuration(void)
{
//-------使用外部RC晶振-----------
RCC_DeInit(); //初始化为缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待高速时钟使能就绪
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//Enable Prefetch Buffer
FLASH_SetLatency(FLASH_Latency_2); // Flash 2 wait state
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72MHz
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//Wait till PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock source
while(RCC_GetSYSCLKSource() != 0x08); //Wait till PLL is used as system clock source
//=================================================================
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); //使能APB2外设GPIO的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能APB2外设GPIO的时钟
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : 初始化GPIO外设
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量
//=================给结构体成员赋值=============
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; //选择PE.10-PE.11,PE.10为LS164_DATA,PE.11为LS164_CLR
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚输出频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //模式选择为推挽输出
GPIO_Init(GPIOE,&GPIO_InitStructure); //初始化GPIOE寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //选择PB.5 为LS164_CLK
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚输出频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //模式选择为推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化GPIOB寄存器
}
/**************************************************************************
*名称: void LS164_SendData(uint8 data )
*功能: 向74LS164发送一个8位数据。
*入口参数: data 需要发送的数据
*出口参数: 无
**************************************************************************/
void LS164_SendData(u8 data)
{
u8 j;
GPIO_ResetBits(GPIOE,GPIO_Pin_11); //LS164_CLR=0
GPIO_SetBits(GPIOE,GPIO_Pin_11); //LS164_CLR=1 74LS164输出清零
for(j=0;j<8;j++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //向74LS164发送一个低电平时钟信号 LS164_CLK=0
if((data & 0x01) != 0 ) //低位先传送,判断最低位是否为1
GPIO_SetBits(GPIOE,GPIO_Pin_10); //LS164_DATA=1
else
GPIO_ResetBits(GPIOE,GPIO_Pin_10); //LS164_DATA=0
data >>=1; //数据每次右移一位
GPIO_SetBits(GPIOB,GPIO_Pin_5); //向74LS164发送一个高电平时钟信号 LS164_CLK=1
}
GPIO_ResetBits(GPIOB,GPIO_Pin_5); //LS164_CLK=0
}
GPIO.zip_stm32 gpio_visual c
版权申诉
84 浏览量
2022-09-19
19:27:27
上传
评论
收藏 2KB ZIP 举报
刘良运
- 粉丝: 68
- 资源: 1万+
最新资源
- 微信小程序 - 同乐居商城:购物车合算源码
- 1、根据输入的三条边值判断能组成何种三角形,并设计测试数据进行判定覆盖测试 三条边为变量a、b、c,范围为1≤边值≤10,不在范
- SQL server 练习题目8道(小白教学).zip
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
- 简单的Python示例,演示了如何使用TCP/IP协议进行基本的客户端和服务器通信
- 考试.sql
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈