找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4617|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

最近在弄HEF4094的單片機驅(qū)動,可是總有點問題,求大神指點。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:410399 發(fā)表于 2018-10-22 11:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
下面代碼是4094的輸入,不知道哪里出了問題,輸入和輸出的不太一樣,求指點啊。!

void datain3(unsigned char dat16_09)
{
        unsigned char j;
        unsigned char i,tt;
        CLK4094 = 1;
        ST_4094_3  = 1;
        
        tt = dat16_09;        
        for(i = 0;i<9;i++)
        {
                j =  tt &(0x01);
                if(j == 1)
                {         DIN_4094_3 = 0;        }
                else
                {         DIN_4094_3 = 1;        }

                CLK4094 = 1;                    
                delay_us(20);
                CLK4094 = 0;        
                delay_us(20);         

                tt = tt>>1;
        }

        ST_4094_3   =  1;        
        delay_us(20);
        ST_4094_3   =  0;
        delay_us(20);

        CLK4094  =  1;  
//        ST_4094_3   =  1;
//        DIN_4094_3  =  1;
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:94031 發(fā)表于 2018-10-22 15:46 | 只看該作者
由于4094移位是先送高位再送低位所以你要把這兩句修改一下:
j =  tt &(0x01);   改為   j =  tt & 0x80;
tt = tt>>1;        改為   tt = tt<<1;
回復(fù)

使用道具 舉報

板凳
ID:410399 發(fā)表于 2018-10-23 08:31 | 只看該作者
xuyaqi 發(fā)表于 2018-10-22 15:46
由于4094移位是先送高位再送低位所以你要把這兩句修改一下:
j =  tt &(0x01);   改為   j =  tt & 0x80; ...

改了之后變成全部燈都亮了
回復(fù)

使用道具 舉報

地板
ID:94031 發(fā)表于 2018-10-23 13:27 | 只看該作者
mosqu 發(fā)表于 2018-10-23 08:31
改了之后變成全部燈都亮了

你的tt是什么值呢?
回復(fù)

使用道具 舉報

5#
ID:410399 發(fā)表于 2018-10-23 14:54 | 只看該作者
xuyaqi 發(fā)表于 2018-10-23 13:27
你的tt是什么值呢?

16進(jìn)制的值,
回復(fù)

使用道具 舉報

6#
ID:94031 發(fā)表于 2018-10-23 15:12 | 只看該作者
你把程序打包出來
回復(fù)

使用道具 舉報

7#
ID:410399 發(fā)表于 2018-10-23 16:06 | 只看該作者

#include <STC15W.h>
#include <intrins.h>

sbit DIN_4094_1 = P6^5;                //data
sbit ST_4094_1 = P6^7;                //str

sbit CLK_4094 = P4^3;                //SLK

unsigned char code zheng[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆時鐘旋轉(zhuǎn)相序表
unsigned char code fan[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正時鐘旋轉(zhuǎn)相序表

void TransByteTo4094_ElecExpValve1(unsigned char dat16_09);

void delay_us(unsigned char i)
{
        unsigned char j;
        for(i; i>0;i--)
                for(j = 200;j>0;j--);
}
void delay(unsigned int o)
{
        while(--o);

}


void main()
{
        unsigned char n,k;
        unsigned char m;
        unsigned int time = 0;
        while(1)
        {
                for(time = 0; time < 50;time++)
                {
                        for(k = 0;k < 8; k++)
                        {
                                m = zheng[k];
                                TransByteTo4094_ElecExpValve1(m);
                                delay(500);
                               
                        }
                }
                for(time = 0; time < 50;time++)
                {
                        for(n = 0;n < 8; n++)
                        {
                                m = fan[n];
                                TransByteTo4094_ElecExpValve1(m);
                                delay(500);
                        }
                }

        }

}

void TransByteTo4094_ElecExpValve1(unsigned char dat16_09)
{
        unsigned char j;
        unsigned char i,tt;
        CLK_4094 = 1;
        ST_4094_1  = 1;
       
        tt = dat16_09;         
        for(i = 0;i<8;i++)
        {
                j =  tt &(0x01);
                if(j == 1)
                {         DIN_4094_1 = 0;        }
                else
                {         DIN_4094_1 = 1;        }

                CLK_4094 = 1;                        
                delay_us(10);
                CLK_4094 = 0;        
                delay_us(10);         

                tt = tt>>1;
        }

        ST_4094_1   =  1;        
        delay_us(10);
        ST_4094_1   =  0;
        delay_us(10);

        CLK_4094  =  1;   
        ST_4094_1   =  1;
        DIN_4094_1  =  1;
}

回復(fù)

使用道具 舉報

8#
ID:410399 發(fā)表于 2018-10-23 16:57 | 只看該作者
  1. #include <STC15W.h>
  2. #include <intrins.h>

  3. sbit DIN_4094_1 = P6^5;                //data
  4. sbit ST_4094_1 = P6^7;                //str

  5. sbit CLK_4094 = P4^3;                //SLK

  6. unsigned char code zheng[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆時鐘旋轉(zhuǎn)相序表
  7. unsigned char code fan[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正時鐘旋轉(zhuǎn)相序表

  8. void TransByteTo4094_ElecExpValve1(unsigned char dat16_09);

  9. void delay_us(unsigned char i)
  10. {
  11.         unsigned char j;
  12.         for(i; i>0;i--)
  13.                 for(j = 200;j>0;j--);
  14. }
  15. void delay(unsigned int o)
  16. {
  17.         while(--o);

  18. }


  19. void main()
  20. {
  21.         unsigned char n,k;
  22.         unsigned char m;
  23.         unsigned int time = 0;
  24.         while(1)
  25.         {
  26.                 for(time = 0; time < 50;time++)
  27.                 {
  28.                         for(k = 0;k < 8; k++)
  29.                         {
  30.                                 m = zheng[k];
  31.                                 TransByteTo4094_ElecExpValve1(m);
  32.                                 delay(500);
  33.                                
  34.                         }
  35.                 }
  36.                 for(time = 0; time < 50;time++)
  37.                 {
  38.                         for(n = 0;n < 8; n++)
  39.                         {
  40.                                 m = fan[n];
  41.                                 TransByteTo4094_ElecExpValve1(m);
  42.                                 delay(500);
  43.                         }
  44.                 }

  45.         }

  46. }

  47. void TransByteTo4094_ElecExpValve1(unsigned char dat16_09)
  48. {
  49.         unsigned char j;
  50.         unsigned char i,tt;
  51.         CLK_4094 = 1;
  52.         ST_4094_1  = 1;
  53.        
  54.         tt = dat16_09;         
  55.         for(i = 0;i<8;i++)
  56.         {
  57.                 j =  tt &(0x01);
  58.                 if(j == 1)
  59.                 {         DIN_4094_1 = 0;        }
  60.                 else
  61.                 {         DIN_4094_1 = 1;        }

  62.                 CLK_4094 = 1;                        
  63.                 delay_us(10);
  64.                 CLK_4094 = 0;        
  65.                 delay_us(10);         

  66.                 tt = tt>>1;
  67.         }

  68.         ST_4094_1   =  1;        
  69.         delay_us(10);
  70.         ST_4094_1   =  0;
  71.         delay_us(10);

  72.         CLK_4094  =  1;   
  73.         ST_4094_1   =  1;
  74.         DIN_4094_1  =  1;
  75. }

復(fù)制代碼
回復(fù)

使用道具 舉報

9#
ID:111634 發(fā)表于 2018-10-23 21:55 | 只看該作者
本帖最后由 zl2168 于 2018-10-24 09:01 編輯

實例43  CC4094串入并出控制8/16循環(huán)燈
Proteus仿真一下,確認(rèn)有效。
實例43 CC4094串行輸出控制8-16循環(huán)燈.rar (67.45 KB, 下載次數(shù): 30)

以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1.。書中電路和程序設(shè)計有詳細(xì)說明,程序語句條條有注解。
回復(fù)

使用道具 舉報

10#
ID:94031 發(fā)表于 2018-10-24 09:15 | 只看該作者

要有硬件連接圖以及說明具體碰到什么問題?
回復(fù)

使用道具 舉報

11#
ID:410399 發(fā)表于 2018-10-24 10:12 | 只看該作者
xuyaqi 發(fā)表于 2018-10-24 09:15
要有硬件連接圖以及說明具體碰到什么問題?

已經(jīng)解決了,謝謝大神指點
回復(fù)

使用道具 舉報

12#
ID:286963 發(fā)表于 2018-10-24 10:12 | 只看該作者
j =  tt &(0x01);   tt = tt>>1;    這里修改一下
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表