打印

请指点:用595做扩展

[复制链接]
1278|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiaxin1|  楼主 | 2011-2-11 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS=P1.0 ;   //串行数据输入(595-14)
      CH=P1.2 ;    //移位时钟脉冲(595-11)
      CT=P1.1;    //输出锁存器控制脉冲(595-12)
DS=3;
CH=0;
NOP;
NOP;
CH=1;
NOP;
NOP;
WR();//调用移位寄存器接收一个字节数据子程序
CT=0;
NOP;
NOP;
CT=1;
NOP;
NOP;
这样是不是就传完一个字节了。
请指教
谢谢。

相关帖子

沙发
NE5532| | 2011-2-11 20:21 | 只看该作者
请用自然语言,而不是程序语言来描述你想做的事,描述完了你的问题也就解开了。

使用特权

评论回复
板凳
yuanquan12345| | 2011-2-11 22:16 | 只看该作者
#include<reg52.h>                 
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

                               
sbit DIN =P1^0;//74HC595数据线
sbit Rclk=P1^1;//74HC595锁存口,上升沿有效
sbit SCLK=P1^2;        //74HC595时钟线,上升沿有效
uchar tcount,move;//定时器计数值和汉字移动的次数

void delay(uint del)
{
        while(--del);
}
void init_tx()//定时移动字
{
        TMOD=0x01;
        TH0=0x3c;
        TL0=0xb0;
        ET0=1;
        TR0=1;
        EA=1;
}
void wri_dat(uchar dat)         //写1byte数据
{
        uchar i;
        DIN=1;
        for(i=0;i<8;i++)
                {                       
                if(dat&0x01)DIN=1;//低位在前
                else DIN=0;       
                SCLK=0;
                SCLK=1;
                dat>>=1;                                                       
                }                       
}
void wri()
{        uchar *point;
        uchar i,j;
        uchar num2,aa;//ss,       
        num2=0x80;//首先显示第一行
        aa=move*4;//没一行需写4byte
        point=&tab1[aa]; //指针指向开始地址
        for(j=0;j<8;j++)
                {
                wri_dat(num2);
        //        ss=aa+j*4;
        //        if(ss>=32)ss-=32;
        //        point=tab1+ss;
                for(i=0;i<4;i++)
                        {
                        if(point>=(tab1+40))point=tab1;//如果已经指向最后一个地址,则让其指向首地址,达到移动显示的效果                       
                        wri_dat(*point++);                                                 
                        }
                Rclk=0;         delay(1);
                Rclk=1;        //写完一行显示一次
                num2>>=1;
                }
}
void main()
{          
        init_tx();
        while(1)
                {
                 wri();
                }
}
void timer0()interrupt 1
{
        TH0=0x3c;
        TL0=0xb0;
        tcount++;
        if(tcount>12){tcount=0;move++;if(move>9)move=0;}
                                                                //数组有多少个行数,move的值相应改变
}

使用特权

评论回复
地板
yuanquan12345| | 2011-2-11 22:18 | 只看该作者
自己改一下应该可以的。
有问题再发帖。

使用特权

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

本版积分规则

0

主题

33

帖子

1

粉丝