搜索
bottom↓
回复: 8

48路流水灯374扩展流水灯电路仿真,求C怎么控制

[复制链接]

出0入0汤圆

发表于 2012-10-31 15:32:08 | 显示全部楼层 |阅读模式
有谁写过这个电路的硬件程序,原来的程序是汇编,我看不懂汇编哪位大哥帮帮忙指导一下这个C程序的流水灯程序怎么写,只需要正传15圈后然后反转15圈,可以按扭调流水灯快慢!带仿真和汇编在里面,大家可以仿真一下,这个我是在其它东风找的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-10-31 16:15:32 | 显示全部楼层
感觉和点阵一样,74154做位选,P0数据

出0入0汤圆

发表于 2012-10-31 17:40:11 | 显示全部楼层
#include<reg51.h>

#define uchar unsigned char
#define uint  unsigned int
sbit EN=P3^6;

void delay5ms();
void delay400ms();

void hy4(){//;花样4全亮
        uchar a;
        for(a=0; a<6; a++){
                P2=a;
                P0=0xff;
                P2=0;
        }
}

void hy3(){        //;花样3全灭
        uchar a;
        for(a=0; a<6; a++){
                P2=a;
                P0=0x00;
                P2=0;
        }
}

void hy2(){ //;花样2从左到右亮,然后从右到左灭
                // mov a,#01h
        // mov r6,#6

// hy21:   mov dptr,#0000h
// hy22:   mov r7,#8

// hy2lp:  movx @dptr,a
        // setb c
        // rlc a
        // lcall delay5ms
        // djnz r7,hy2lp
        // inc dph
        // djnz r6, hy22
        // lcall delay400ms

        // mov a,#01h
        // mov r6,#6

// hy21a:  dec dph
       // ; mov dptr,#0000h
// hy22a:   mov r7,#8

// hy2lpa:  movx @dptr,a
        // clr c
        // rrc a
        // lcall delay5ms
        // djnz r7,hy2lpa
        // dec dph
        // djnz r6, hy22a
        // lcall delay400ms
}


void hy1(){//;花样1间隔亮 变换
        uchar a, p;
        for(p=0; p<0x10; p++){
                for(a=0; a<=6; a++){
                        P2=a;
                        if( (p % 2)==0){
                                P0=0xAA;
                        }else{
                                P0=0x55;
                        }
                        P2=0;
                }
                delay400ms();
        }
}

void delay5ms(){ //;延时子程序(5MS)
        uchar i,j;
        for(i=25;i>0;i--){
                for(j=100; j>0; j--){
                        ;
                }
        }
}

//;==============延时400毫秒
void delay400ms(){  //;延时子程序(400MS)
        uchar i,j,k;

        for(i=20;i>0;i--){
                for(j=100; j>0; j--){
                        for(k=100; k>0; k--){
                                ;
                        }
                }
        }
}


void main(){
        delay400ms();
        EN=0;
        while(1){
         hy1();         //;间隔亮10次
                 delay400ms();
         hy3();         //;全灭
         delay400ms();  //;延时
         hy4();         //;全亮
         delay400ms();  //;延时
         hy3();         //;全灭
         delay400ms();  //;延时
         hy4();         //;全亮
         delay400ms();  //
         hy3();         //;全灭
         delay400ms();  //
         hy2();         //;从左到右亮,然后从右到左灭
         hy2();         //
        }
}



断断续续修改一下,还有一个函数,没改。

出0入0汤圆

 楼主| 发表于 2012-10-31 18:32:28 | 显示全部楼层
devcang 发表于 2012-10-31 17:40
#include

#define uchar unsigned char

非常感谢你@@LZ

出0入0汤圆

 楼主| 发表于 2012-10-31 18:41:51 | 显示全部楼层
devcang 发表于 2012-10-31 17:40
#include

#define uchar unsigned char

不需要按汇编的改为C,可以指导一下就从第1灯开始开始流水死循环15圈完后再反着15圈来回不断的循环怎么写,麻烦你了大哥!

出0入0汤圆

发表于 2012-10-31 21:43:05 | 显示全部楼层
SengChuary 发表于 2012-10-31 18:41
不需要按汇编的改为C,可以指导一下就从第1灯开始开始流水死循环15圈完后再反着15圈来回不断的循环怎么写 ...

你按 hy1() 修改一下,差不多了。

出0入0汤圆

 楼主| 发表于 2012-11-1 10:50:21 | 显示全部楼层
devcang 发表于 2012-10-31 21:43
你按 hy1() 修改一下,差不多了。

想问一下位移应该怎样改,P0口八位移还是按这个片选移,如果选择片选移,是不是每个片选都要按着顺序同步移是吗,不知道我说的对吗?
  1. void hy1()
  2.    
  3.         {                     
  4.         uchar a, p;
  5.         for(p=0; p<0x10; p++)
  6.                
  7.                 {
  8.                 for(a=0; a<=6; a++)
  9.                                 {
  10.                         P2=a;
  11.                         if( (p % 2)==0)
  12.                                                
  13.                                   {
  14.                         P0=0x00;                                               
  15.                           }
  16.                                                 else
  17.                                                 {
  18.                          P0=0xff;
  19.                         }
  20.                         P2=0;
  21.                 }
  22.                 delay400ms();
  23.         }
  24. }
复制代码

出0入0汤圆

 楼主| 发表于 2012-11-1 16:40:02 | 显示全部楼层
devcang 发表于 2012-10-31 21:43
你按 hy1() 修改一下,差不多了。


程序改了一下,下面不知道该怎么改了,改的有点不对,也不知道哪里不对:
  1. #include<reg51.h>

  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit EN=P3^6;

  5. void delay5ms();
  6. void delay400ms();

  7. void main()
  8.   {       
  9.    delay400ms();
  10.         EN=0;
  11.                  while(1)
  12.                  {
  13.         uint i;
  14.   uchar temp,a,p;
  15.   P0=temp;
  16.         for(p=0; p<0x10; p++)
  17.                 {
  18.            for(a=0; a<=6; a++)
  19.                         {
  20.                            P2=a;
  21.               if( (p % 2)==0)
  22.                                  {
  23.                                     temp=0x01;
  24.                 for(i=0;i<8;i++)
  25.                    {
  26.                         P0=~temp;
  27.                        delay400ms();
  28.                       //  temp<<=1;
  29.                                  }
  30.                 }  
  31.                                 }
  32.         }
  33.          }
  34. }

  35. void delay5ms(){ //;延时子程序(5MS)
  36.         uchar i,j;
  37.         for(i=25;i>0;i--){
  38.                 for(j=100; j>0; j--){
  39.                         ;
  40.                 }
  41.         }
  42. }

  43. //;==============延时400毫秒
  44. void delay400ms(){  //;延时子程序(400MS)
  45.         uchar i,j,k;

  46.         for(i=20;i>0;i--){
  47.                 for(j=100; j>0; j--){
  48.                         for(k=100; k>0; k--){
  49.                                 ;
  50.                         }
  51.                 }
  52.         }
  53. }
复制代码

出0入0汤圆

发表于 2012-11-2 09:25:07 | 显示全部楼层
你还是按 hy1() 修改一下好了,其实,就是使每一个374的灯,从0x1到0xff、延时,再从0xff-(1<<n)  (0<n<8)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 15:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表