您的位置: proteus仿真社区 >> 论坛 >> 仿真求助专区 >> 查看帖子
字体: 小 中 大 | 打印 发表于: 2008-8-04 09:05 作者: jiankewuying 来源: proteus仿真社区
1602-2.jpg
1602.rar(2008-08-04 09:05:34, Size: 41 KB, Downloads: 2)
1.jpg
1602.rar(2008-08-04 23:58:03, Size: 22.4 KB, Downloads: 4)
QUOTE:
原帖由 jiankewuying 于 2008-8-4 09:58 发表 不是吧,我用的是总线方式.MOVX @DPTR,A. 指令 .我用别人写的程序,在这个电路上就能显示
最新回复
jiankewuying (2008-8-04 09:08:27)
#include "1602.h"
void delay(uchar n) //3n+1 us
{
for (;n>0;n--)
_nop_();
}
/***********************************************************
函数名称:void lcd_send_byte(uchar ch)
函数功能: 向LCD发送一字节显示数据
入口参数: uchar ch 待显示数据
出口参数: 无
全局变量: 无
调用模块: delay()
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
void lcd_send_byte(uchar ch)
{
LCDWR_DAT=ch;
delay(100);
}
/***********************************************************
函数名称: void lcd_send_com(uchar ch)
函数功能: 向LCD 发送一字节命令
入口参数: uchar ch 待发送的命令
出口参数: 无
全局变量:
调用模块: delay()
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
void lcd_send_com(uchar ch)
{
LCDWR_COM=ch;
delay(100);
}
/***********************************************************
函数名称: void lcd_disp_str(uchar *ad,uchar *dispbuf)
函数功能: 显示字符串函数(向LCD显示地址ad,送以dispbuf 为地址的一串字符串)
入口参数: uchar ad 在LCD上显示数据的首地址
uchar *dispbuf 待显示数据的地址
出口参数: 无
全局变量: 无
调用模块: lcd_send_com(uchar ch)
lcd_send_byte(uchar ch)
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
void lcd_disp_str(uchar ad, char *dispbuf)
{
/* 若ad 不在要显示的地置环围内,则终止*/
if((ad< LCD_LINE1 )||(ad>LCD_LINE2)||(ad>(LCD_LINE1+15)&&(ad<(LCD_LINE2-15)))) return ;
if((*dispbuf)=='\0') return;
lcd_send_com(ad);
while(1)
{ //if((*dispbuf)=='\0') break;
lcd_send_byte(*dispbuf);
dispbuf++;
if(ad==(LCD_LINE1+15))
{
ad=LCD_LINE2;
lcd_send_com(ad); //若第一行超出地址,则转行
}
else
{ P1=0;
ad++;
}
if(ad>LCD_LINE2+15) return; //若地址超出则终止
}
}
/***********************************************************
函数名称:void lcd_init()
函数功能:完成LCD的显示初始化
入口参数:无
出口参数:无
全局变量: 无
调用模块: lcd_send_com()
作 者:
日 期: 2008-08-
备 注:
***********************************************************/
void lcd_init()
{
lcd_send_com(LCD_RST); //复位光标回原点
lcd_send_com(LCD_MODE); //接口数据8位,双行显示,5*10点阵
lcd_send_com(LCD_OPEN); //屏目显示开,无光标
//lcd_send_com(LCD_SHIFT_R);
//lcd_send_com( LCD_CURSOR_R);
}
#include "xuxiuliang.h"
#include "1602.h"
/***********************************************************************/
void DelayS(uchar delayno)
{ uchar i,j;
for(; delayno>0; delayno--)
{ for(i=0; i<250; i++)
for(j=0; j<200; j++);
}
}
/***********************************************************************/
void main()
{
uchar code table[]= "I LOVE YOU FOR EVER ! " ;
lcd_init();
while(1)
{
lcd_disp_str(LCD_LINE1,table);
DelayS(1);
}
}
#ifndef __1602_h__
#define __1602_h__
/***********************************************************************/
//#include "xuxiuliang.h"
/************************************************************************/
/* 定义LCD操作地址 */
#define LCDWR_COM (*((uint volatile xdata *) 0X2000 )) //定义写命令地址
#define LCDWR_DAT (*((uint volatile xdata *) 0X2001 )) //定义读写数据地址
/*注意上述定义和硬件电路的联结是有关系的*/
/*************************************************************************/
/*定义常用LCD 命令*/
#define LCD_CLR 0X00 //清显示,光标复位至原点00H
#define LCD_RST 0X02 //复位光标回原点
#define LCD_MODE 0X3C //接口数据8位,双行显示,5*10点阵
#define LCD_SHIFT_R 0X06 //显示画面向右平移一个字符位
#define LCD_SHIFT_L 0X07 //显示画面向左平移一个字符位
#define LCD_CLOSE 0X08 //屏目显示关
#define LCD_OPEN 0X0C //屏目显示开,无光标
#define LCD_FLASH 0X0D //屏目显示开,且光标闪烁
#define LCD_CURSOR 0X0E //屏目显示开,且光标不闪烁
#define LCD_CURSOR_L 0X10 //光标左移
#define LCD_CURSOR_R 0X14 //光标右移
#define LCD_DAT_L 0X18 //显示左移
#define LCD_DAT_R 0X1C //显示右移
/**************************************************************************/
/*定义LCD地址相关控制宏*/
#define LCD_LINE1 0X80 //定义第1行显示数据首地址
#define LCD_LINE2 0XC0 //定义第2行显示数据首地址
#define LCD_CGRAM 0X40 //定义字符发生器首地址
#define CLR_STR " " //清屏
/****************************************************************************/
/***********************************************************
函数名称:void lcd_init()
函数功能:完成LCD的显示初始化
入口参数:无
出口参数:无
全局变量: 无
调用模块: lcd_send_com()
作 者:
日 期: 2008-08-
备 注:
***********************************************************/
extern void lcd_init();
/***********************************************************
函数名称:void lcd_send_byte(uchar ch)
函数功能: 向LCD发送一字节显示数据
入口参数: uchar ch 待显示数据
出口参数: 无
全局变量: 无
调用模块: delay()
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
extern void lcd_send_byte(uchar ch);
/***********************************************************
函数名称: void lcd_send_com(uchar ch)
函数功能: 向LCD 发送一字节命令
入口参数: uchar ch 待发送的命令
出口参数: 无
全局变量:
调用模块: delay()
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
extern void lcd_send_com(uchar ch);
/***********************************************************
函数名称: void lcd_disp_str(uchar *ad,uchar *dispbuf)
函数功能: 显示字符串函数(向LCD显示地址ad,送以dispbuf 为地址的一串字符串)
入口参数: uchar ad 在LCD上显示数据的首地址
uchar *dispbuf 待显示数据的地址
出口参数: 无
全局变量: 无
调用模块: lcd_send_com(uchar ch)
lcd_send_byte(uchar ch)
作 者:
日 期: 2008-08-03
备 注:
***********************************************************/
extern void lcd_disp_str(uchar ad,char *dispbuf);
#endif
guidanghu520 (2008-8-04 09:17:32)
jiankewuying (2008-8-04 09:58:00)
jiankewuying (2008-8-04 11:00:04)
liaoguobao00 (2008-8-04 23:58:03)
1.jpg
(2008-08-04 23:58:03, Size: 22.4 KB, Downloads: 4)
budhy (2008-8-05 02:20:17)
QUOTE:
是吗?从以上程序里还不能断定,因为还没看到 LCDWR_DAT 等变量的定义。