打印

自己写的就是没反映。实在不知道哪里出错拉,请教。

[复制链接]
1233|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-26 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1602初始化,对照汇编写的,汇编的可以运行,我的没反映,实在不知道哪里错了,
请帮忙指点一下。谢谢。

#define uchar unsigned char

#define datyj P1

sbit rs = P3^5;
sbit rw = P3^6;
sbit e  = P3^7;

uchar dzl()  //读指令查忙状态
{
uchar value;
datyj=0xff;  //
rs=0;        //指令模式
rw=1;        //读模式
e=1;         //
_nop_();
_nop_();
value=datyj;    //读
e=0;            //关闭
return(value);  //返回指令值
}

void xzl(uchar zhilin)  //写指令
{
uchar busy;
busy=dzl();     //查忙
while(busy>=80) //如果为1等待
{busy=dzl();}
rs=0;           //指令模式
rw=0;           //写模式
e=0;
_nop_();
_nop_();
datyj=zhilin;  //发送
e=1;           //
_nop_();
_nop_();
e=0;           //
}


main()
{
-----------
xzl(0x01);
ysh();     //延时
xzl(0x38);
ysh();
xzl(0xf0);
ysh();
xzl(0x06);
-------------
}
没有任何反映,请指点一下。谢谢。

相关帖子

沙发
lsfsxfljj| | 2007-3-26 21:03 | 只看该作者

怎么没有循环啊

使用特权

评论回复
板凳
turmary| | 2007-3-26 21:33 | 只看该作者

看看我的吧,这个是可以用的.


/* Disp1602.h ,其它程序包含这个头文件就可以调用putchar了*/


#ifndef __DISP1602_H__
#define __DISP1602_H__

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL;

extern void clr(void);
extern void lcd_init();
extern BOOL putchar(BYTE ch);


#endif // __DISP1602_H__




/* Disp1602.C */
#include <AtmelAT89X52.h>
#include <intrins.h>
#include "Gpr.h"     //这个头文件定义Delay函数
#include "Disp1602.h"

sbit rs = P2^0;                //引脚定义
sbit rw = P2^1;
sbit ep = P2^2;
sbit light = P3^3;

static idata BYTE pos = 0, chcnt = 0;


BOOL lcd_bz()
{                    // 测试LCD忙碌状态
    static BOOL result;
    rs = 0;
    rw = 1;
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    result = (BOOL)(P0 & 0x80);
    ep = 0;
    return result;
}

lcd_wcmd(BYTE cmd)
{                    // 写入指令数据到LCD
    while(lcd_bz());
    rs = 0;
    rw = 0;
    ep = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 0;    
}

lcd_pos(BYTE pos)
{                    //设定显示位置
    lcd_wcmd(pos | 0x80);        //80 + DDRAM地址
}

lcd_wdat(BYTE dat)
{                    //写入字符显示数据到LCD
    while(lcd_bz());
    rs = 1;
    rw = 0;
    ep = 0;
    P0 = dat;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 0;    
}

void lcd_init()
{                    //LCD初始化设定
    lcd_wcmd(0x38);            //显示模式设置
    delay(1);
    lcd_wcmd(0x0c);            //开显示,不显示光标
    delay(1);
    lcd_wcmd(0x06);            //读写后光标及指针加1
    delay(1);
    lcd_wcmd(0x01);            //清除LCD的显示内容
    delay(1);

    light = 0;
}


void clr(void)
{
    P1 = 0xFF;
    lcd_wcmd(0x01);            //清除LCD的显示内容
    pos = 0;
    chcnt = 0;
}

 
BOOL putchar(BYTE ch)
{
    if (lcd_bz())
    {
        delay(5);
    }

    if (lcd_bz())
    {
        return 0;
    }

    lcd_wdat(ch);

    if (++chcnt >= 16) {
        chcnt = 0;
        if (pos == 0)
            pos = 0x40;
        else
            pos = 0x00;
        lcd_pos(pos);
    }
    return 1;
}

使用特权

评论回复
地板
huangqi412|  楼主 | 2007-3-26 21:46 | 只看该作者

谢谢,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝