微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 想实现1602显示Hello,world.但是程序下进去没有反应,芯片是s...

想实现1602显示Hello,world.但是程序下进去没有反应,芯片是s...

时间:10-02 整理:3721RD 点击:
求大神帮忙看看这个程序为什么实现不了功能呢
  头文件:1602.h
#ifndef __1602_H
#define __1602_H
#include "sys.h"
#include "stdlib.h"
#define LCD1602_RS PCout(8)
#define LCD1602_RW PCout(7)
#define LCD1602_E PCout(6)
#define DATAOUT(x) GPIOA->ODR=(GPIOA->ODR&0xff00)|(x&0x00ff);
void lcd1602_Init(void);
void lcd1602_Reset(void);
void Write_com(u8 COM);
void Write_DATA(u8 date);
void lcd162a_Display(u8 dd);
void lcd162a_LocateXY(u8 posx,u8 posy);
void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata);
void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr);
void lcd162a_cls(void);
#endif

.c文件:
#include "1602.h"
#include "sys.h"
#include "delay.h"
#include "stdio.h"
#include "stdlib.h"
void lcd162a_cls(void)
{
Write_com(0x01);           
}
void lcd1602_Init(void)
{
        RCC->APB2ENR|=1<<3;
        RCC->APB2ENR|=1<<4;
        
        GPIOA->CRL&=0X00000000;
        GPIOA->CRL|=0X33333333;
        GPIOA->ODR=0XFF;
        
        GPIOC->CRH&=0XFFFFFF00;
  GPIOC->CRL&=0X00FFFFFF;
  GPIOC->CRH|=0X00000033;
  GPIOC->CRL|=0X33000000;
  GPIOC->ODR|=0X03C0;
        lcd1602_Reset();
        lcd162a_cls();
}
void lcd1602_Reset(void)
{
        Write_com(0x38);
        delay_ms(20);
        
        Write_com(0x38);
        delay_ms(20);
        
        Write_com(0x38);
        delay_ms(20);
        
        Write_com(0x38);
        Write_com(0x08);
        lcd162a_cls();
        Write_com(0x06);
        Write_com(0x0c);        
               
        
}
void Write_com(u8 COM)
{
        delay_ms(2);
        LCD1602_RS=0;
        LCD1602_RW=0;
        LCD1602_E=1;
        DATAOUT(COM);
        delay_us(2);
        LCD1602_E=0;
}
void Write_DATA(u8 date)
{
        delay_ms(2);
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_E=1;
        DATAOUT(date);
        delay_us(2);
        LCD1602_E=0;
}
void lcd162a_Display(u8 dd)           //??ê?
{            
u8 i=0;
for(i=0;i<16;i++)
{
  lcd162a_DispOneChar(i,1,dd++);
  dd &=0x7f;
  if (dd<32) dd=32;
}         
}
void lcd162a_LocateXY(u8 posx,u8 posy)    //??ê?1a±ê????
{            
u8 temp;
temp=posx & 0xf;
posy &= 0x01;
if(posy) temp |=0x40;
temp |=0x80;
Write_com(temp);         
}
void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata)     //?ú???¨??????ê?
{            
lcd162a_LocateXY(x,y);
Write_DATA(Wdata);         
}
void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr)     //??ê?×?·?
{            
u8 i,l=0;
while (ptr[l] >31)
{
  l++;
};
for (i=0;i<l;i++)
{
  lcd162a_DispOneChar(x++,y,ptr);
  if ( x == 16 )
  {
   x = 0;
   y ^= 1;
  }
}         
}

文件名:main.c
#include "sys.h"
#include "usart.h"  
#include "delay.h"
#include "1602.h"   
#include "stdio.h"
u8 *p1="Hello,world.";
int main(void)
{
        u8 temp=0;
        Stm32_Clock_Init(9);
        delay_init(72);
        uart_init(72,9600);
        lcd1602_Init();
        
        lcd162a_cls();
        lcd162a_ePutstr(0,0,p1);
        delay_ms(1000);
        
        lcd162a_cls();
        while(1)
        {
                temp &= 0x7f;
                if (temp<32)temp=32;
                lcd162a_Display( temp++ );
                delay_ms(400);
        }
}


想实现1602显示Hello,world.但是程序下进去没有反应,芯片是stm32f103rbt6的。
希望大家帮帮忙

顶一下!

主要看下LCD1602的读写时序,延时很重要呢。

延时和读写时序都没有问题啊

实现什么功能呢?可以说清楚点,而且代码那么多 大牛也会没时间看的
提问参考http://bbs.elecfans.com/jishu_426327_1_1.html

谢了   看过后学到了怎么更好的向别人提问   受教了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top