音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

哪位有用過普通I/O與74HC164來驅(qū)動LED阿?

作者:piter_tan 欄目:單片機(jī)
哪位有用過普通I/O與74HC164來驅(qū)動LED阿?
怎樣才能實(shí)現(xiàn)數(shù)據(jù)傳送的,是不是先把十六進(jìn)制數(shù)轉(zhuǎn)換二進(jìn)制數(shù)再傳送的!具
體是怎樣,各位大俠可以擔(dān)供個例子讓小的參考參考嗎?
 

2樓: >>參與討論
mmax
就是你說的那樣。
Data要一位一位的配合CLK發(fā)出去。
就是CPU的IO驅(qū)動能力夠不夠,可以給CLK和DATA加一個驅(qū)動,或上拉電阻。

3樓: >>參與討論
yadog
有個比較笨的
/*數(shù)碼管顯示*/
static LONG xdata led_data;
#include <Reg52.h>
#include <absacc.h>
#include <intrins.h>

#define uint  unsigned int
uchar Out377=0;
//#define P377 0xaf00


#define addr_led_clock 0xfe
#define addr_led_data 0xf7
#define addr_led_enable 0xef
void show_led(uint);
uchar code led_show_code[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
//數(shù)碼管字型碼定義
void caculate_led_data(uint show_data)   //計算出顯示數(shù)據(jù)的代碼
   {  //參數(shù)意義:  which 是哪個位上  :0 : 個位      1: 十位    2 :把百位
     LONG idata  led_show_data = 0x00000000;
                      //將數(shù)據(jù)清零
    uchar idata i=0 ;
    uchar a[3];

    led_data = 0x00000000;
    a[2]=(uchar)(show_data/100);           //計算出led數(shù)據(jù)的百位
    a[1]=(uchar)(show_data%100/10);        //計算出十位
    a[0]=(uchar)(show_data%10);            //計算出個位

    for(i= 0 ; i <3 ; i++)
     {
        SWITCH (a[i])
        {
        case 0 :   led_show_data |= 0x000000FC ;          break;
        case 1 :   led_show_data |= 0x00000060 ;          break;
        case 2 :   led_show_data |= 0x000000DA ;          break;
        case 3 :   led_show_data |= 0x000000F2 ;          break;
        case 4 :   led_show_data |= 0x00000066 ;          break;
        case 5 :   led_show_data |= 0x000000B6 ;          break;
        case 6 :   led_show_data |= 0x000000BE ;          break;
        case 7 :   led_show_data |= 0x000000E0 ;          break;
        case 8 :   led_show_data |= 0x000000FE ;          break;
        case 9 :   led_show_data |= 0x000000F6 ;          break;
        }

       led_show_data <<=(8*i) ;
       led_data |= led_show_data ;
       led_show_data = 0x00000000;
      }
    if(a[2]== 0)
      led_data &= 0x0000ffff ;                   //如果百位為零則應(yīng)該不顯示0
      led_data |= 0x00000100 ;                    //在對應(yīng)的位置顯示小數(shù)點(diǎn)


}

void set_data_to_led(void)
   {uchar i,j;
    static bit flag=0;
    Out377=Out377&addr_led_enable;
    XBYTE[P377] = Out377;
    for(i=0;i<32;i++)
    {Out377=Out377&addr_led_clock;//先讓時鐘輸出低電平
     XBYTE[P377] = Out377;
     for(j=0;j<10;j++);            //延時

     if(led_data>>i&0x00000001==0x01)   //如果應(yīng)該輸出高電平,輸出高
     {Out377=Out377|(~addr_led_data);
      XBYTE[P377] = Out377;
      flag=1;
     }
     else
     {Out377=Out377&addr_led_data;//如果應(yīng)該是低,輸出低
      XBYTE[P377] = Out377;
      flag=0;
     }

     for(j=0;j<10;j++);           //延時
     Out377=Out377|(~addr_led_clock);//時鐘位變高,將數(shù)據(jù)輸出到LED
     XBYTE[P377] = Out377;
     for(j=0;j<5;j++);           //延時
    }
    Out377=Out377|(~addr_led_enable);
    XBYTE[P377] = Out377;
    for(j=0;j<5;j++);           //延時
   }
   void show_led(uint show_data)
   {
     caculate_led_data(show_data);
        set_data_to_led();

   }

歡迎大家指正

4樓: >>參與討論
yadog
補(bǔ)充
p377接的是驅(qū)動芯片的使能

5樓: >>參與討論
bucker
參與一下
51單片機(jī)驅(qū)動HC164可使用移位寄存器的方式,但用51的IO驅(qū)動LED的公共極就有問題,起碼亮度就不會很大。我曾經(jīng)用74HC直接驅(qū)動過共陽極的LED,不加限流電阻,當(dāng)時是模仿了市面上的搖擺運(yùn)動器的電路。

6樓: >>參與討論
wj8389

164串行顯示我以前做過,現(xiàn)在我有它的匯編程序 具體如下:



org 0000h                 ;串行顯示程序,正確
ajmp MAIN
ORG 0030H
MAIN:MOV  SP,#60H
     MOV 30H,#01H       ;8個LED 30到37H是數(shù)據(jù)存儲區(qū)
     MOV  31H,#01H
     MOV  32H,#01H
     MOV  33H,#01H
     MOV   34H,#02H
     MOV  35H,#02H
     MOV  36H,#02H
     MOV  37H,#02H
     MOV  R2,#00H
     MOV  R0,#30H
LOOP: MOV   A,@R0        
      MOV  DPTR,#TAB
      MOVC  A,@A+DPTR
      MOV  SBUF,A
     JNB TI,$
     CLR TI
     INC  R0
     INC R2
     CJNE R2,#08H,LOOP
     AJMP   $
TAB:  DB  0C0H,0CFH,64H,46H,4BH,52H,50H  
      DB  040H,0C7H,042H
      END


7樓: >>參與討論
piter_tan
謝謝各位!
謝謝各位了!哪位還有HT或義隆普通I/O口與164串行顯示的程序呀,再上傳上來給我參考參考阿!

8樓: >>參與討論
hexiaoxiao
HA
我自己做了一個,不過是8051的普通I/O通訊.你可以把它改成C.你可要謝謝我哦!

DISP_SDA bit P2.0   ;;顯示74HC164的AB端串行輸入
DISP_SCL bit P2.1  ;;顯示74HC164的CLK端上升沿有效

===============================================
DISP_D: MOV R7, #08       ;顯示串輸出數(shù)據(jù)8位
        MOV A,R6       ;R6里存的是8位數(shù)據(jù)
LOOP:   CLR C
        CLR DISP_SCL
        RLC A
        MOV DISP_SDA,C
        SETB DISP_SCL
        DJNZ R7,LOOP
        RET
===============================================

9樓: >>參與討論
piter_tan
TO:hexiaoxiao
非常感謝hexiaoxiao !可以加你為Q友嗎?我的Q號:50203123

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
82c53奇怪現(xiàn)象
請教各種單片機(jī)ISP功能的比較
兩單片機(jī)直接口對口通信
keil編譯器發(fā)生了奇怪的問題!
Keil 在編譯時為什么要訪問并口??
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號