1602LCD屏点不亮.请求大家支援一下.谢谢!
// 主程序 #include "main.h"
#include"Port.h" #include"LcdModule.h"
main() {
LceInit(); while (1) {
} }
// LCD点阵源码(C文件和头文件)
/*--------------------------------------------------------------------*-
LcdModule.C (V1.00)
-*---------------------------------------------------------------------*/ /* * Copyright (c) 2006,wsl * All rights reserved * * 文件名称: LcdModule.C * 功能描述: Lcd点阵16x2(st7066u)驱动 * 其它说明: * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2007-9-4 * 修改信息: : */ //*********************************************************************** #include"main.h" #include"Port.h" #include"LcdModule.h"
// 函数列表 static void LedDelay37us(void); static void LedDelay2ms(void); // 写数据/命令 static void LCD_Write(eM_LcdSendCommand style, eM_LcdBusyFlag busy, const unsigned char input); // 待写入自定义字型RAM字符数组的首地址和字模数组长度 static void Write_CG_RAM(unsigned char *pData, unsigned char Length);
/*-----------------------------------------------------------------------*- * 函数名称: LedDelay37us() * 参 数: xx * 返 回: xx * 函数功能: 软件延时37us * * 说 明: Fosc = 22.1184M * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2007-9-4 * 修改信息: -*-----------------------------------------------------------------------*/ void LedDelay37us(void) { unsigned char i; for (i=0; i<21; i++); }
/*-----------------------------------------------------------------------*- * 函数名称: LedDelay2ms() * 参 数: xx * 返 回: xx * 函数功能: 软件延时2ms * * 说 明: Fosc = 22.1184M * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2007-9-4 * 修改信息: -*-----------------------------------------------------------------------*/ void LedDelay2ms(void) { unsigned char x, y; for (x=0; x<12; x++) { for (y=0; y<100; y++); } }
#ifdef Is_8bit_Interface_Mode
// 是8位MCU模式 /*-----------------------------------------------------------------------*- * 函数名称: LcdReadBusy() * 参 数: * 返 回: * 函数功能: 读忙BF值,忙标志 * * 说 明: 读BF及AC值 * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2007-09-4 * 修改信息: -*-----------------------------------------------------------------------*/ void LcdReadBusy(void) { // 用于超时,防止LCD模块损坏系统死在此处 unsigned int i = 0; unsigned char ReadBusy; // 选择指令寄存器 LcdRs = 0; // 选择读模式 LcdRw = 1; // 允许读/写LCD LcdEn = 1; _nop_(); // 检测忙信号,忙则等待 while( ((ReadBusy = DBPort) & 0x80) && (i != 0) ) { i++; } // 禁止读/写 LcdEn = 0; }
/*-----------------------------------------------------------------------*- * 函数名称: LCD_Write() * 参 数: style 数据/指令选择控制(0:写命令 1:写数据) * busy 是否判忙(0:不判; 1:判忙) * input style=0时用命令,style=0时用数据, * 返 回: * 函数功能: 向LCD写入命令或数据 * * 说 明: * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2006-09-14 * 修改信息: -*-----------------------------------------------------------------------*/ void LCD_Write(eM_LcdSendCommand style, eM_LcdBusyFlag busy, const unsigned char input) { if (busy) // 是否判忙 { LcdReadBusy(); }
LcdRs = style; // 选择寄存器 LcdRw = 0; // 写模式 // 写入Lcd LcdEn = 1; // 启动数据读写 DBPort = input; _nop_(); _nop_(); //注意顺序 LcdEn = 0; } #else
#endif
/*-----------------------------------------------------------------------*- * 函数名称: LcdInit() * 参 数: * 返 回: * 函数功能: Lcd初始化,设置显示模式及光标. * * 说 明: * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2007-9-4 * 修改信息: -*-----------------------------------------------------------------------*/ void LceInit(void) { unsigned char i; // 上电延时 for (i=0; i<30; i++) { LedDelay2ms(); }
for (i=0; i<30; i++) { // 3次设置显示模式,不检测忙信号 LCD_Write(LCD_COMMAND, LCD_NO_BUSY, 0x38); LedDelay37us(); }
LedDelay37us(); LCD_Write(LCD_COMMAND, LCD_BUSY, 0x0f); LedDelay37us(); LCD_Write(LCD_COMMAND, LCD_BUSY, 0x01); LedDelay2ms(); LCD_Write(LCD_COMMAND, LCD_BUSY, 0x06); LedDelay37us(); }
/*-------------------------------------------------------*-
LcdModule.H (V1.0)
-*-------------------------------------------------------*/
/* * Copyright (c) 2006, * All rights reserved * * 文件名称: LcdModule.H * 文件标识: * 摘 要: */
//********************************************************
#ifndef _LcdModule_H_ #define _LcdModule_H_
//------------------条件编译------------------------------ #define Is_8bit_Interface_Mode //#define DisplayListChar
//-------------------------------------------------------- // 向LCD写入命令/数据 typedef enum{ LCD_COMMAND = 0, // Command LCD_DATA = 1 // Data }eM_LcdSendCommand;
//-------------------------------------------------------- // LCD判忙 typedef enum{ LCD_NO_BUSY = 0, LCD_BUSY = 1 }eM_LcdBusyFlag;
//--------------------------------------------------------- // LCD点阵规格类型(6种) typedef enum{ LcdSpec1601 = 0, // 16x1 Alphanumeric Lcd LcdSpec1602 = 1, // 16x2 Alphanumeric Lcd LcdSpec1604 = 2, // 16x4 Alphanumeric Lcd LcdSpec2002 = 3, // 20x2 Alphanumeric Lcd LcdSpec2004 = 4, // 20x4 Alphanumeric Lcd LcdSpec4002 = 5 // 40x2 Alphanumeric Lcd }eM_LcdSpec;
//--------------------------------------- // 自定义字型RAM(CG RAM)地址初始 // #define CG_RAM_ADDRESS 0x40 // 数据显示RAM(DD RAM)地址初始 // #define DD_RAM_ADDRESS 0x80 // RAM类型 #define CG_RAM 0x40 // 自定义字型RAM #define DD_RAM 0x80 // 数据显示RAM
//------------------------------------------------------- // 公用函数 void LceInit(void);
void DisplayOneChar( unsigned char XStart, unsigned char YStart, unsigned char DData );
void DisplayListChar( unsigned char XStart, // 开始显示的X坐标像素值 unsigned char YStart, // 开始显示的Y坐标像素值 unsigned char *pData // 待写入字符数组的首地址 );
//-------------------------------------------------------
#endif
//******************end of file***************************
// 以下是端口头文件
/*-------------------------------------------------------*-
Port.H (V1.1)
端口头文件 (Port Header)
-*-------------------------------------------------------*/
/* * Copyright (c) 2006, * All rights reserved * * 文件名称: Port.h * 文件标识: 端口头文件(Port Header) * 摘 要: 使用端口头文件,你可以将整个项目中所有不 * 不同的端口访问特性都放入同一个(头)文件中 * 这样每个其它的项目文件需要#include文件Port.H * * 当前版本: V1.0 * 取代版本: * 作 者: wsl * 修 改: * 版本信息: 2006-09-14 * 修改信息: */
//********************************************************
#ifndef _PORT_H_ #define _PORT_H_
//------------------LcdModule.C--------------------------
#define DBPort P2 sbit LcdRs = P3^5; sbit LcdRw = P3^6; sbit LcdEn = P3^7;
//-------------------------------------------------------
/*------------------------------------------------------*/ #endif
/*------------------------------------------------------*- END OF FILE
-*------------------------------------------------------*/ |