OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3876|回复: 4

关于液晶1602的问题,液晶只是亮,没有显示,代码已经直接让液晶显示了,但是还是没显示,不知道是软件的问题还是硬件问题

[复制链接]

7

主题

20

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-9-12
在线时间
11 小时
发表于 2018-9-21 17:29:26 | 显示全部楼层 |阅读模式
15金钱

这是主程序

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "LCD1602.h"  
//³¬Éù²¨Ó²¼þ½Ó¿Ú¶¨Òå
#define HCSR04_PORT     GPIOB
#define HCSR04_CLK      RCC_APB2Periph_GPIOB
#define HCSR04_TRIG     GPIO_Pin_11
#define HCSR04_ECHO     GPIO_Pin_10

#define TRIG_Send  PBout(11)
#define ECHO_Reci  PBin(10)
//³¬Éù²¨¼ÆÊý
u16 msHcCount = 0;

//¶¨Ê±Æ÷2ÉèÖÃ
void hcsr04_NVIC()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;            
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      
NVIC_Init(&NVIC_InitStructure);
}
void NVIC_Configuration(void)         //²»Ð´³öwarning
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
}
//IO¿Ú³õʼ»¯ ¼°ÆäËû³õʼ»¯
void Hcsr04Init()
{  
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);
   
    GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG;      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
    GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);
     
    GPIO_InitStructure.GPIO_Pin =   HCSR04_ECHO;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  
    GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);   
     
         
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   
      
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructure.TIM_Period = (1000-1);
    TIM_TimeBaseStructure.TIM_Prescaler =(72-1);
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);         
        
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);  
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);   
    hcsr04_NVIC();
    TIM_Cmd(TIM2,DISABLE);     
}
//´ò¿ª¶¨Ê±Æ÷2
static void OpenTimerForHc()  
{
   TIM_SetCounter(TIM2,0);
   msHcCount = 0;
   TIM_Cmd(TIM2, ENABLE);
}
//¹Ø±Õ¶¨Ê±Æ÷2
static void CloseTimerForHc()   
{
   TIM_Cmd(TIM2, DISABLE);
}
//¶¨Ê±Æ÷2ÖÕÖжÏ
void TIM2_IRQHandler(void)  
{
   if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  
   {
       TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );
       msHcCount++;
   }
}
//»ñÈ¡¶¨Ê±Æ÷2¼ÆÊýÆ÷Öµ
u32 GetEchoTimer(void)
{
   u32 t = 0;
   t = msHcCount*1000;
   t += TIM_GetCounter(TIM2);
   TIM4->CNT = 0;  
   delay_ms(50);
   return t;
}
//ͨ¹ý¶¨Ê±Æ÷2¼ÆÊýÆ÷ÖµÍÆËã¾àÀë
float Hcsr04GetLength(void )
{
   u32 t = 0;
   int i = 0;
   float lengthTemp = 0;
   float sum = 0;
   while(i!=5)
   {
      TRIG_Send = 1;      
      delay_us(20);
      TRIG_Send = 0;
      while(ECHO_Reci == 0);      
      OpenTimerForHc();        
      i = i + 1;
      while(ECHO_Reci == 1);
      CloseTimerForHc();        
      t = GetEchoTimer();        
      lengthTemp = ((float)t/58.0);//cm
           sum = lengthTemp + sum ;
        
    }
    lengthTemp = sum/5.0;
    return lengthTemp;
}

  
//²âÊÔÖ÷º¯Êý
int main(void)
{
u8 a,b,c,d;
u8 str[6]={0};

u8 length;
delay_init();       //ÑÓʱº¯Êý³õʼ»¯   
NVIC_Configuration();
SystemInit();
uart_init(9600);  //´®¿Ú³õʼ»¯9600
Hcsr04Init();
LCD1602_Init();
LCD1602_ClearScreen();
   LCD1602_Show_Str(4, 1, "598");   
while(1)
{     
   length = Hcsr04GetLength();
   a=(length/1000);
   b=((length%1000)/100);
   c=((length%100)/10);
   d=(length%10);   
   str[0]=a+0x30;
   str[1]=b+0x30;
   str[2]=c+0x30;
   str[3]=d+0x30;
  str[4]='c';
  str[5]='m';
  
   LCD1602_Show_Str(4, 1, "598");
   
delay_ms(1000);   
}
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-9-12
在线时间
11 小时
 楼主| 发表于 2018-9-21 17:30:05 | 显示全部楼层

这是1602的程序

#include"LCD1602.h"
#include"sys.h"
#include "delay.h"
#include "stdio.h"


void GPIO_Configuration(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);  

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_Init(GPIOB, &GPIO_InitStructure);  
   
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void LCD1602_Wait_Ready(void)
{
u8 sta;

DATAOUT(0xff);
LCD_RS_Clr();
        delay_ms(10);
LCD_RW_Set();
        delay_ms(10);
do
{
LCD_EN_Set();
delay_ms(5);
  sta = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);
LCD_EN_Clr();
}while(sta & 0x80);
}



void LCD1602_Write_Cmd(u8 cmd)
{
LCD1602_Wait_Ready();
        delay_ms(10);
LCD_RS_Clr();
        delay_ms(10);
LCD_RW_Clr();
        delay_ms(10);
DATAOUT(cmd);
        delay_ms(10);
LCD_EN_Set();
        delay_ms(10);
LCD_EN_Clr();
    //printf("%d",cmd);
}



void LCD1602_Write_Dat(u8 dat)
{
LCD1602_Wait_Ready();
LCD_RS_Set();
        delay_ms(10);
LCD_RW_Clr();
        delay_ms(10);
DATAOUT(dat);
        delay_ms(10);
LCD_EN_Set();
        delay_ms(10);
LCD_EN_Clr();
        delay_ms(10);
}



void LCD1602_ClearScreen(void)
{
LCD1602_Write_Cmd(0x01);
}



void LCD1602_Set_Cursor(u8 x, u8 y)
{
u8 addr;

if (y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;
LCD1602_Write_Cmd(addr | 0x80);
}


void LCD1602_Show_Str(u8 x,u8 y,u8 *str)//?????
{
        LCD1602_Set_Cursor(x,y);
        while(*str!='\0')
        {
                LCD1602_Write_Dat(*str++);
        }
}
/*void LCD1602_Show_Str(u8 x, u8 y, u8 str[])
{
unsigned char i=0;
u8 addr;
LCD1602_Set_Cursor(x, y);
       
if (y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;

while(str[i]== '\0')
{
LCD1602_Write_Cmd(addr+i);
LCD1602_Write_Dat(str[i]);
i++;                                                                                                                          
}
}*/



void LCD1602_Init(void)
{
GPIO_Configuration();
LCD1602_Write_Cmd(0x38);
LCD1602_Write_Cmd(0x0c);
LCD1602_Write_Cmd(0x06);
LCD1602_Write_Cmd(0x01);
  
}
回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-9-12
在线时间
11 小时
 楼主| 发表于 2018-9-21 17:33:04 | 显示全部楼层
也有用电位器来调对比度
631141050216627245.jpg


回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-9-12
在线时间
11 小时
 楼主| 发表于 2018-9-21 20:14:04 | 显示全部楼层
好像是程序的问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-9-22 00:05:03 | 显示全部楼层
程序可以参考论坛其他网友发的代码,参考着看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 04:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表