wj78681969 发表于 2011-8-15 10:15:25

求指教!关于四线1602~~~!!!

最近要用1602 由于IO口的数量有限 要用到四线的1602驱动 然后我写了一个 但是 不能显示,在此 我有个问题:数据输入是D0-D3输入 还是D4-D7输入???

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LOVE MCU";
uchar code table1[]="pingjun:";
uchar code table2[]="0123456789";
uchar bb,cc,bai,shi,ge;
uchar m,c;
sbit wr=P2^1;
sbit rd=P2^0;
sbit en=P3^4;
sbit rs=P3^5;
void delayms(uint n)
{
        uint i;
        while(n--)
                for(i=330;i>0;i--);
}
void red(uchar com)               //写指令
{
        rs=0;
        P0=(com & 0xf0)>>4;
        delayms(5);
        en=1;
        delayms(5);
        en=0;

        P0=(com & 0x0f);
        delayms(5);
        en=1;
        delayms(5);
        en=0;          
}
void init()                                //初始化
{
        en=0;
        red(0x28);
        delayms(10);
        red(0x28);
        delayms(10);
        red(0x28);
        delayms(10);
        red(0x0f);
        delayms(10);                  
        red(0x06);
        delayms(10);
        red(0x01);
        delayms(10);
        red(0x80);                     //写入位置
       
}
void write(uchar date)                //写入
{
        rs=1;
        P0=(date & 0xf0)>>4;
        delayms(5);
        en=1;
        delayms(5);
        en=0;

        P0=(date & 0x0f);
        delayms(5);
        en=1;
        delayms(5);
        en=0;          
}
void RED_0804()
{
                wr=1;
                delayms(10);
                wr=0;
                delayms(20);
                rd=0;
          cc=P1;       
                delayms(10);
          rd=1;       
}
void dispaly()
{
               red(0x80+m);
               delayms(10);
               bai=bb/100;
               shi=bb%100/10;
               ge=bb%10;
               write(table2);
               delayms(10);
               write(table2);
               delayms(10);
               write(table2);
               delayms(10);
}
void main()
{
                uint a;
                init();
          red(0x80);
                for(a=0;a<=10;a++)
                {
                        write(table);
                        delayms(10);
                }
                delayms(200);
                red(0x01);
                red(0x80+0x40);      //移至下一行
                for(a=0;a<=9;a++)
                {
                        write(table1);
                        delayms(5);
                }
               
                while(1)
        {
               
         RED_0804();
               if(bb!=cc)
               {
               bb=cc;
               red(0x80+m);
               bai=bb/100;
               shi=bb%100/10;
               ge=bb%10;
               write(table2);
               write(table2);
               write(table2);
               m=m+4 ;
               if(m>12)
               {
                       m=0;
               }
               delayms(250);

                  }
        }       

}
在这里 我数据是从D0-D3输入的 但是D4-D7我也输入过 一样不起作用 ,求大家指教如何修改程序 ?

附上的仿真和程序

wj78681969 发表于 2011-8-15 10:16:23

点击此处下载 ourdev_667739RDHJIV.rar(文件大小:52K) (原文件名:1602.rar)
附件里有程序和仿真

wj78681969 发表于 2011-8-15 10:16:34

点击此处下载 ourdev_667739RDHJIV.rar(文件大小:52K) (原文件名:1602.rar)
附件里有程序和仿真

wj78681969 发表于 2011-8-15 10:30:00

为什么没有人?

xbwpc 发表于 2011-8-15 10:31:43

1620四线不用D0-D3,用D4-D7
楼主可以看下我以前的帖子。

wj78681969 发表于 2011-8-15 11:16:34

回复【4楼】xbwpc 文
1620四线不用d0-d3,用d4-d7
楼主可以看下我以前的帖子。
-----------------------------------------------------------------------

你的程序 我看过啊 采用的是单独定义 一位一位的操作 每根线单独定义是不是有点复杂?

lycreturn 发表于 2012-10-29 20:56:50

wj78681969 发表于 2011-8-15 11:16 static/image/common/back.gif
回复【4楼】xbwpc 文
1620四线不用d0-d3,用d4-d7
楼主可以看下我以前的帖子。


可以参考哈这个
http://www.amobbs.com/forum.php?mod=viewthread&tid=5503804&page=1
页: [1]
查看完整版本: 求指教!关于四线1602~~~!!!