野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23274|回复: 5

为什么我的1602液晶不显示呢?大神们进来看看

[复制链接]
发表于 2013-7-28 21:17:19 | 显示全部楼层 |阅读模式
/******************** (C) COPYRIGHT 2012 WildFire Team ***************************
* 文件名  :led.c
* 描述    :led 应用函数库         
* 实验平台:野火STM32开发板
**********************************************************************************/
#include "led.h"
/*
* 函数名:_1602_GPIO_Config
* 描述  :配置LED用到的I/O口
* 输入  :无
* 输出  :无
*/
void _1602_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//PA1,3,7
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //PA7-15
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}
//延时nus
void delay_nus(unsigned long n)
{
  unsigned long j;
  while(n--)
{ j=9;
  while(j--);
}  
}
//延时nms
void DelayMs(unsigned char t)
{
while(t--)
delay_nus(1111);
}
//命令初始化
void LCD_write_com(unsigned char com)
{
E(0);
delay_nus(1);
RS(0);
delay_nus(1);
RW(0);
delay_nus(1);
GPIO_Write(GPIOB,(com<<8) & 0xff00);
delay_nus(500);
E(1);
DelayMs(1);
E(0);
delay_nus(100);
}
//写入数据
void LCD_write_data(unsigned char Data)
{
E(0);
delay_nus(10);
RS(1);
delay_nus(10);
RW(0);
delay_nus(10);
GPIO_Write(GPIOB,(Data<<8) & 0xff00);
delay_nus(500);
E(1);
DelayMs(1);
E(0);
delay_nus(100);
}
//清屏
void LCD_Clear(void)  
{ LCD_write_com(0x01);
  DelayMs(5);
}
//写入字符串函数
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
{ if (y == 0)
{
LCD_write_com(0x80+x);
}
else
{
LCD_write_com(0xc0+x);
}
while (*s!='\0')
{
LCD_write_data(*s);
s++;
delay_nus(500);
}
}
//写入字符函数
void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
{
if (y == 0)
{
LCD_write_com(0x80+x);
}
else
{
LCD_write_com(0xc0+x);
}
LCD_write_data(data);
delay_nus(500);
}
void LCD_INIT(void)
{
DelayMs(15);
LCD_write_com(0x38); //显示模式
DelayMs(5);
LCD_write_com(0x38);
DelayMs(5);
LCD_write_com(0x38);
DelayMs(5);
LCD_write_com(0x38);
DelayMs(5);
LCD_write_com(0x08); //显示关闭
DelayMs(5);
LCD_write_com(0x01); //显示清屏
DelayMs(5);
LCD_write_com(0x06); //显示光标移动设置
DelayMs(5);
LCD_write_com(0x0c); //显示打开及光标设置
DelayMs(5);
}

/******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/

回复

使用道具 举报

发表于 2013-7-28 21:26:19 | 显示全部楼层
这个代码是从51移植过来的吗?先确定原来的程序在51能不能运行。 要你注意这里delay函数的延时,在同样的输入参数情况下,在STM32中会比51的延时短很多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-28 21:32:08 | 显示全部楼层
flyleaf 发表于 2013-7-28 21:26
这个代码是从51移植过来的吗?先确定原来的程序在51能不能运行。 要你注意这里delay函数的延时,在同样的输 ...

http://wenku.baidu.com/view/d58cefbffd0a79563c1e7256.html我看的网上的。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-28 21:32:34 | 显示全部楼层
arm新人 发表于 2013-7-28 21:32
http://wenku.baidu.com/view/d58cefbffd0a79563c1e7256.html我看的网上的。。。

网上延时函数都差不多。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-29 09:15:35 | 显示全部楼层
flyleaf 发表于 2013-7-28 21:26
这个代码是从51移植过来的吗?先确定原来的程序在51能不能运行。 要你注意这里delay函数的延时,在同样的输 ...

解决了,好像是硬件问题
回复 支持 反对

使用道具 举报

发表于 2014-4-27 18:12:34 | 显示全部楼层
arm新人 发表于 2013-7-29 09:15
解决了,好像是硬件问题

你好,你的1602还有吗
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 02:20 , Processed in 0.054239 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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