欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)LED點(diǎn)陣顯示程序問題,C語(yǔ)言移位不理解 [打印本頁(yè)]

作者: 22319956777    時(shí)間: 2020-8-4 16:02
標(biāo)題: 單片機(jī)LED點(diǎn)陣顯示程序問題,C語(yǔ)言移位不理解
為什么在LED點(diǎn)陣顯示的時(shí)候里面的 通過 595 發(fā)送 2 個(gè)字節(jié)的數(shù)據(jù) 的函數(shù)中
SER = dat >> 7; //從最高位開始發(fā)送
dat <<= 1;
一位一位的給dat了那單片機(jī)是怎么得到的,
還有就是顯示的時(shí)候怎么一直用不到段選的數(shù)組
求大佬幫忙看看,謝謝!謝謝!

#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4;

u8 ledduan[]={0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00}; // 類 似 于 動(dòng)態(tài)數(shù)碼管的段選
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 類 似 于動(dòng)態(tài)數(shù)碼管的位選
void Hc595SendByte(u8 dat)
{ u8 a;
  SRCLK = 1; RCLK = 1;
for(a=0;a<8;a++) //發(fā)送 8 位數(shù)
{ SER = dat >> 7;
dat <<= 1;
SRCLK = 0; //發(fā)送時(shí)序
_nop_();
_nop_(); SRCLK = 1;
}

RCLK = 0;
_nop_(); _nop_(); RCLK = 1;
}void main() { u8 i=0;
while(1) { for(i=0;i<8;i++) { Hc595SendByte(ledwei); LED1(ledwei); delay(10); } }
}


作者: liweimin    時(shí)間: 2020-8-4 16:43
右移7位就是最高位,然后每次再左移一個(gè)個(gè)取出來(lái)
作者: 青草麥田    時(shí)間: 2020-8-4 16:52
dat >> 7; 把dat的最高位移到最低位。其它位置用0補(bǔ)上,之后把這個(gè)值賦給SER,即如查那一位是1。P34就輸出1,如果為0就輸出0。dat <<= 1;數(shù)據(jù)左移。
作者: 藍(lán)魄    時(shí)間: 2020-8-4 17:10
說(shuō)的問題不是很清楚,不是很明白你想要的知道什么。首先是單片機(jī)發(fā)送數(shù)據(jù)給595,dat<<=1;等同于dat=dat<<1;意思就是dat數(shù)據(jù)整體左移一位后再賦給dat,左移后的值覆蓋之前的值;還有LED1函數(shù)是怎么寫的,那里有沒有行或列的輸出。
作者: 22319956777    時(shí)間: 2020-8-4 17:59
藍(lán)魄 發(fā)表于 2020-8-4 17:10
說(shuō)的問題不是很清楚,不是很明白你想要的知道什么。首先是單片機(jī)發(fā)送數(shù)據(jù)給595,dat

移位的運(yùn)算我知道,就是有點(diǎn)不知道移位后是通過那個(gè)把這個(gè)8位給單片機(jī)的,請(qǐng)教一下
代碼是給的開發(fā)攻略復(fù)制過來(lái)的可能不小心刪了那個(gè)函數(shù)
void LED1(u8 dat1) { P0=dat1; }

作者: 1692483014    時(shí)間: 2020-8-4 18:01
樓主是 想問單片機(jī)是怎么一個(gè)bit一個(gè)bit獲取到數(shù)據(jù)的吧!
實(shí)際上可以理解成DQ觸發(fā)器構(gòu)成的移位寄存器,首先將要發(fā)送的bit電平在DAT輸入口放好,然后給觸發(fā)器的CLK口一個(gè)下降沿,這個(gè)BIT的數(shù)據(jù)就會(huì)送到觸發(fā)器的Q端,就相當(dāng)于放到總線發(fā)送出去了。
然后重復(fù)上面的過程就可以發(fā)送所有的bit了。
如果想詳細(xì)了解,建議百度觸發(fā)器的類型 以及 移位寄存器的原理 等等。
作者: 22319956777    時(shí)間: 2020-8-4 18:22
1692483014 發(fā)表于 2020-8-4 18:01
樓主是 想問單片機(jī)是怎么一個(gè)bit一個(gè)bit獲取到數(shù)據(jù)的吧!
實(shí)際上可以理解成DQ觸發(fā)器構(gòu)成的移位寄存器,首 ...

對(duì)對(duì),有點(diǎn)懂了的樣子,請(qǐng)問這樣理解對(duì)嗎,是不是一個(gè)下降沿的時(shí)候會(huì)把SER掃一次,然后把地位存起來(lái),


作者: wulin    時(shí)間: 2020-8-5 07:56
單片機(jī)發(fā)送的串行數(shù)據(jù)通過595轉(zhuǎn)換成并行數(shù)據(jù)輸出。重新整理一下便于樓主理解:
void Hc595SendByte(u8 dat)//參數(shù)dat是想要發(fā)送的數(shù)據(jù)
{
        u8 a;
        for(a=0;a<8;a++) //由高到低循環(huán)發(fā)送8位數(shù)據(jù) (1個(gè)字節(jié))
        {
                SER = dat >> 7;//將dat最高位賦值SER端口送到595
                SRCLK = 1; //移位脈沖 595內(nèi)部現(xiàn)存數(shù)據(jù)由低到高移1位,SER狀態(tài)補(bǔ)入最低位
                _nop_();   //短暫延時(shí)
                _nop_();
                SRCLK = 0; //為下次移位準(zhǔn)備
                dat <<= 1; //dat左移1位,最高位溢出,最低位補(bǔ)0
        }//
        RCLK = 1;     //鎖存脈沖,把595內(nèi)部現(xiàn)存數(shù)據(jù)鎖存到輸出端口鎖存器輸出并行數(shù)據(jù)
        _nop_();    //短暫延時(shí)
        _nop_();
        RCLK = 0;    //為下次鎖存準(zhǔn)備
}
作者: 22319956777    時(shí)間: 2020-8-5 08:37
wulin 發(fā)表于 2020-8-5 07:56
單片機(jī)發(fā)送的串行數(shù)據(jù)通過595轉(zhuǎn)換成并行數(shù)據(jù)輸出。重新整理一下便于樓主理解:
void Hc595SendByte(u8 dat ...

這樣就都理解了,謝謝,謝謝




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1