初级会员
- 积分
- 112
- 金钱
- 112
- 注册时间
- 2023-3-26
- 在线时间
- 16 小时
|
1金钱
/**********************
请教大佬,帮我指正一下代码的错误
**********************/
#include "Display.h"
#include "stm32f10x.h"
#include "key.h"
#include "LED.h"
#include "sys.h"
#include "delay.h"
//显示函数初始化
void Display_init(void)
{
GPIO_InitTypeDef GPIO_Struct;
KEYinit(); //按键GPIO端口初始化
LED_init();
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,ENABLE);
GPIO_Struct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Struct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Struct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG,&GPIO_Struct);
}
//74hc164发送数据函数
void send_data(uint8_t data,uint8_t m)
{
uint8_t i;
for(i = 0; i < 8;i ++)
{
if(data & 0x80)
GPIO_WriteBit(GPIOG,GPIO_Pin_3,1);
else
GPIO_WriteBit(GPIOG,GPIO_Pin_3,0);
data <<= 1;
// GPIO_ResetBits(GPIOG,GPIO_Pin_4);
GPIO_WriteBit(GPIOG,GPIO_Pin_4,0);
// GPIO_SetBits(GPIOG,GPIO_Pin_4);
GPIO_WriteBit(GPIOG,GPIO_Pin_4,1);
}
if(m)
switch(m)
{
case 1:
GPIO_WriteBit(GPIOD,GPIO_Pin_8,0);
break;
case 2:
GPIO_WriteBit(GPIOB,GPIO_Pin_15,0);
break;
case 3:
GPIO_WriteBit(GPIOB,GPIO_Pin_14,0);
break;
}
}
uint8_t num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//显示的数据
void display_data(unsigned int x,unsigned int y) //x为输入数据号
{
static unsigned int hundred_bit, ten_bit, single_bit;
hundred_bit = x /100;
ten_bit = (x % 100) / 10;
single_bit = x % 10;
if(y == 1)
send_data(num[hundred_bit],1);
else if(y == 2)
send_data(num[ten_bit],2);
else if(y == 3)
send_data(num[single_bit],3);
}
/****************************
下面是主函数的代码
****************************/
display_data(321,1);
printf("OK\r\n");
display_data(321,2);
display_data(321,3);
|
最佳答案
查看完整内容[请看2#楼]
首先,确定你的IO是按你的想法来动作,比如,你就只写一句:GPIO_WriteBit(GPIOG,GPIO_Pin_3,1);
然后用万用表测量这个脚的电压对不对.
用到的所有脚都测一下: PG3\PG4\PD8\PB15\PB14;写1写0都测一下;
对了,我只看到你对PD8\PB15\PB14写0,那它们是否需要在某个时候写1呢?也没看到初始化代码.
当引脚都按想法来动作后,检查74HC164的输出是否正常,给它写入一个数据,万用表测一下它的输出是否正确.
|