新手入门
- 积分
- 3
- 金钱
- 3
- 注册时间
- 2018-9-29
- 在线时间
- 7 小时
|

楼主 |
发表于 2018-10-1 12:06:28
|
显示全部楼层
//主程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "myp.h"
int main(void)
{
long int indata=0;
u8 key;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化与按键连接的硬件接口
LED0=0; //点亮LED
GPIO_HC165_Configuration();
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES){
GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_SET);//CLK-1;
GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_RESET);//SH-0;
GPIO_HC165_Input();
delay_ms(10);
}
if(key==KEY1_PRES)//KEY1 按下,读取字符串并显示
{
GetHC74165();
}
}
}
// myp.c文件
#include"myp.h"
#include "delay.h"
void GPIO_HC165_Input(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //设置为浮空输入
GPIO_Init(GPIOC, &GPIO_InitStructure); //调用GPIO初始化函数
}
void GPIO_HC165_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启AFIO时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //禁止JTAG功能
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //CLK IN
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大输出速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //调用GPIO初始化函数
GPIO_HC165_Input();
}
long int GetHC74165(void)
{
long int i;
long int indata=0;
GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_RESET);//SH-0;
delay_ms(10);
GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_SET);//SH-1;
delay_ms(20);
for(i=0;i<8;i++)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_RESET);//CLK-0;
delay_ms(10);
indata=indata<<1; //左移一位
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)==1)
{
indata=indata+1;
}
GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_SET);//CLK-1;
delay_ms(10);
}
return(indata);
}
|
|