打印

求助

[复制链接]
1611|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nike.com|  楼主 | 2007-4-23 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
turmary| | 2007-4-23 11:15 | 只看该作者

难什么呀,只要是跑马灯的没难的,又是要毕业设计的.

使用特权

评论回复
板凳
nike.com|  楼主 | 2007-4-24 17:08 | 只看该作者

我试了很久,跑马灯我会写,就是没有效果出来,

我严格按照书上的方法来驱动74HC595,怎么都驱动不了呀,各位高手,MAY ???

使用特权

评论回复
地板
jasonell| | 2007-4-24 17:18 | 只看该作者

严格按书上来,可能有错,还是自己弄明白吧。

使用特权

评论回复
5
kinggate| | 2007-4-24 18:32 | 只看该作者

我正使用595,给你个程序参考

//MM74HC595 +数码管显示的程序模块,标号按MM74HC595.PDF文件标注
//提供show(showdata)显示接口



#include<reg51.h>  
#define uchar unsigned char

uchar code seg[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit SER=P0^4;      //595串行数据输入
sbit SCK=P0^5;      //595移位时钟
sbit RCK=P0^7;      //595数据输出脉冲
sbit SQH=P0^6;      //595串行数据输出
sbit gewei=P2^7;  //595数码管个位选通
sbit shiwei=P2^6; //595数码管十位选通 




void IN595(uchar segdata)    //输入一字节数码管数据进595
{
  uchar i,temp;
  temp=seg[segdata];
  RCK=0;  
  for(i=0;i<8;i++)    //循环移入8位数据,
  {
     SCK=0;
       SER=temp&0x80;    // 取数码的最高位
     temp=temp<<1;
     SCK=1;    //上升沿把一位数据移入595
  }
  
  //SCK=0; //这3个是因为我电路上设计的不合理后再加的 ,你可以不要
  //SER=1;
  //SCK=1; 


  RCK=1;  //上升沿把8位数据并行输出 
}


void show(uchar showdata)     
{
   uchar i,j;
   i=showdata/10;
   j=showdata%10;
   IN595(i);    //移入十位数据
   gewei=1;     //关个位
   shiwei=0;    //选通十位数码管
  
   IN595(j);    //移入个位数据
   shiwei=1;    //关十位    
   gewei=0;     //选通个位数码管  

}


void main()  //测试。。。。。。。。。。。。。。。。

  
  while(1)
  {  
  show(80);
  }
}








使用特权

评论回复
6
kinggate| | 2007-4-24 18:34 | 只看该作者

我的是一个595驱动两个数码管的

我的是一个595驱动两个数码管的

使用特权

评论回复
7
nike.com|  楼主 | 2007-4-24 21:15 | 只看该作者

五楼师兄

我的不是数码管,是发光二极管呀.两个595串联,同时控制R G B 共12组计36个发光二极管呀.

使用特权

评论回复
8
kinggate| | 2007-4-25 09:05 | 只看该作者

那你用一下我程序中有关595部分就行了啊

595有个级联端的,你把两个595用级联端联起来,在用我程序中的部分,
void IN595(uchar segdata)    //输入一字节数码管数据进595
{
  uchar i,temp;
  temp=seg[segdata];
  RCK=0;  
  for(i=0;i<8;i++)    //循环移入8位数据,
  {
     SCK=0;
       SER=temp&0x80;    // 取数码的最高位
     temp=temp<<1;
     SCK=1;    //上升沿把一位数据移入595
  }
  
  //SCK=0; //这3个是因为我电路上设计的不合理后再加的 ,你可以不要
  //SER=1;
  //SCK=1; 


  RCK=1;  //上升沿把8位数据并行输出 
}

其他的程序你再编就行啊,应该没问题的

使用特权

评论回复
9
nike.com|  楼主 | 2007-4-25 10:27 | 只看该作者

主程序呢?

这个我的程序,请你看看,哪里有错?编译成功,就是看不到效果 :
#define uchar unsigned char 
sbit  SER=P1^2;
sbit  SRCLK=P1^1;
sbit  RCLK=P1^0;
void ser(uchar dat)
{ uchar i;
  RCLK=0;
  for(i=0;i<8;i++)//循环输入8位数据
 {   SRCLK=0;
   if(dat&0x80==0)
      SER=0;
   else 
      SER=1;
      dat<<=1;
      SRCLK=1;//上长沿把一位数据移入595
   }   
   RCLK=1;//上升沿数据并行输出
}
void main()
{ P1M0=0;
  P1M1=1;//P1口推挽输出
  ser(15);
  {;}
  {;};
}

使用特权

评论回复
10
kinggate| | 2007-4-25 10:36 | 只看该作者

如果你要有跑马等效果就不用595并行输出数据了

使用特权

评论回复
11
nike.com|  楼主 | 2007-4-25 11:00 | 只看该作者

怎么讲?

这是规定了的,我只要编程出来就完成毕业设计.但楼上所说的我不懂,我搞的是川田照明科技公司的那种幕墙灯,现在只要求搞出跑马灯效果了.这个硬件从来没搞过,一点都不知.大哥,你看怎么样才能驱动灯,让它亮起来.

使用特权

评论回复
12
kinggate| | 2007-4-25 11:16 | 只看该作者

如果要跑马灯,我觉得

你可以让数据串行输入一位就马上输出,再输入一位,再马上输出,
比如这样改
void ser(uchar dat)
{ uchar i;
 
  for(i=0;i<8;i++)//循环输入8位数据
{   
  RCLK=0; 
  SRCLK=0;
   if(dat&0x80==0)
      SER=0;
   else 
      SER=1;
      dat<<=1;
      SRCLK=1;//上长沿把一位数据移入595
  RCLK=1;//上升沿数据并行输出
   }   
 
}

我不知道你的硬件是怎样的,所以我只能说一下我的思想了

使用特权

评论回复
13
nike.com|  楼主 | 2007-4-25 14:42 | 只看该作者

谢谢!

这样也行,谢谢.

使用特权

评论回复
14
nike.com|  楼主 | 2007-4-26 15:21 | 只看该作者

不行的呀?

请看附图.各位高手,请路见不平出招相救吧!谢谢!
  毕业设计课题!难到人了!STC12C2052,74HC595(2个)控制LED

使用特权

评论回复
15
nike.com|  楼主 | 2007-4-26 15:22 | 只看该作者

这个是硬件

使用特权

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

本版积分规则

7

主题

18

帖子

0

粉丝