導航:首頁 > 操作系統 > 74hc595單片機程序

74hc595單片機程序

發布時間:2022-10-03 18:04:50

Ⅰ 我用STC89C52RC單片機寫一段74HC595驅動數碼管靜態顯示,程序該怎麼寫啊,用C語言

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharw;

sbitshu=P2^1;

sbitshift=P2^0;

sbitput=P2^2;

voiddelay1(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidwrite(uchardat)

{

for(w=0;w<8;w++)

{

shu=dat&0x80;

delay1(1);

shift=1;

dat<<=1;

delay1(1);

shift=0;

}

}

voidout()

{

put=0;

delay1(1);

put=1;

delay1(1);

}

voidmain()

{

//put=1;

while(1)

{

write(0x5b);//可修改這個顯示的數,

out();

}

}

Ⅱ 單片機初學者,求老師寫一個74hc595控制兩個數碼管或流水燈的簡單程序,參考參考,真心不懂該怎麼

既然要用到74hc595,那麼就要寫一個595的驅動程序,以便後面的操作簡單化。

sbithc595_si=P2^5;//數據引腳
sbithc595_sck=P2^4;//移位寄存器
sbithc595_rck=P2^7;//輸出寄存器
/*************595驅動*********************/
voidHC595(unsignedcharch)
{
unsignedchari;
for(i=0;i<8;i++)
{
hc595_si=(ch&0x80);//取寫入數據的最高位送入595的數據引腳
ch<<=1;//相當於ch=ch<<1;數據左移1位,低位往高位移
hc595_sck=0;//送到移位寄存器
hc595_sck=1;
}
hc595_rck=0;
hc595_rck=1;//輸出數據
}

做完這些,接下來只需要往595里寫數據就可以了,例如:HC595(0xfe); 則595晶元的Q0(最低位)輸出端為「0」。可用模擬軟體嘗試一遍便知效果。

Ⅲ 74hc595單片機c語言程序

void shift_out(uchar g) //移位輸出

{

uchar i;

uchar dly=5;

uchar tmp=g;

for(i=0;i<8;i++)

{

if((tmp&0x80)==0x80)

{

DS_out=1;

}

else

{

DS_out=0;

}

SHCLK=0; //移位

dly=2;

while(dly--);

SHCLK=1;

dly=2;

while(dly--);

tmp=tmp<<1;

}


STCLK=0; //鎖存

dly=5;

while(dly--);

STCLK=1;


}


Ⅳ 74HC595的程序樣例

DS接MOSI,OE/GND接GND,SH_CP接SCLK,ST_CP接使能信號BIT0@P1,MR/VCC接POWER,如果不需要16位,改US16B,不使用H寄存器即可,還有SPI工作期間可以進入低功耗,也可以執行指令. #include<msp430.h>voidmain(void){WDTCTL=WDTPW+WDTHOLD;P1DIR|=BIT0+BIT1;P1OUT&=~BIT0;USICTL0|=USIPE6+USIPE5+USIMST+USIOE;USICTL1|=USIIE;USICKCTL=USIDIV_7+USISSEL_2;USICTL0&=~USISWRST;while(1){P1OUT|=BIT0;USISRH=0xAA;USISRL=0xAA;USICNT=0x10+USI16B;//16位數,級聯可用.while((USICTL1&USIIFG)!=0x01){//此處可以干別的//這里寫入與SPI無關的代碼,共8*16=128條單周期指令.}USICTL1&=~USIIFG;P1OUT&=~BIT0;}}單片機74HC595模塊驅動程序 //74HC595LED控制#include<reg51.h>#include<intrins.h>#defineNOP()_nop_()sbitMOSIO=P3^4;sbitR_CLK=P3^5;sbitS_CLK=P3^6;voiddelay(unsignedinti);voidHC595SendData(unsignedcharSendVal);main(){unsignedcharLed=0xfe;HC595SendData(0xff);while(1){HC595SendData(Led);Led<<=1;Led=Led|0x01;if(Led==0xff)Led=0xfe;delay(200);}}voiddelay(unsignedinti){unsignedintj;for(i;i>0;i--)for(j=300;j>0;j--);}voidHC595SendData(unsignedcharSendVal){unsignedchari;for(i=0;i<8;i++){if((SendVal<<i)&0x80)MOSIO=1;elseMOSIO=0;S_CLK=0;NOP();NOP();S_CLK=1;}R_CLK=0;NOP();NOP();R_CLK=1;}74HC595驅動靜態數碼管程序 #include<reg51.h>#include<intrins.h>#defineNOP()_nop_()sbitMOSIO=P3^4;sbitR_CLK=P3^5;sbitS_CLK=P3^6;voiddelay(unsignedinti);voidHC595SendData(unsignedcharSendVal);unsignedcharcodeLED7Code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};main(){unsignedcharHC595SendVal;unsignedintLedNumVal;while(1){LedNumVal++;HC595SendVal=LED7Code[LedNumVal%16];HC595SendData(HC595SendVal);delay(200);}}voiddelay(unsignedinti){unsignedintj;for(i;i>0;i--)for(j=300;j>0;j--);}voidHC595SendData(unsignedcharSendVal){unsignedchari;for(i=0;i<8;i++){if((SendVal<<i)&0x80)MOSIO=1;elseMOSIO=0;S_CLK=0;NOP();NOP();S_CLK=1;}R_CLK=0;NOP();NOP();R_CLK=1;}雙595驅動點陣程序 #include<reg51.h>#include<intrins.h>#defineNOP()_nop_()sbitMOSIO=P3^7;sbitR_CLK=P3^5;sbitS_CLK=P3^6;sbiten573=P1^3;sbitends=P1^2;voidHC595SendData(unsignedintSendVal);unsignedintVal;unsignedcharcodetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodedigittab[18][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},//1{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},//2{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00},//3{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00},//4{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00},//5{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},//6{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00},//7{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00},//9{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00},//P{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00},//R{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00},//E{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00},//C{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00},//H{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00},//I{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00},//N{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00}};unsignedinttimecount;unsignedcharcnta;unsignedcharcntb;voidmain(void){TMOD=0x01;TH0=(65536-3000)/256;TL0=(65536-3000)%256;TR0=1;ET0=1;EA=1;cntb=0;ends=0;en573=0;while(1){}}voidt0(void)interrupt1using0{TH0=(65536-3000)/256;TL0=(65536-3000)%256;if(cntb<18)/{//P1=0xFF;//P2=tab[cnta];P0=~digittab[cntb][cnta];Val=tab[cnta]&0x00ff;Val<<=8;Val=Val+0x00ff;HC595SendData(Val);}else{//P2=0xFF;//P1=tab[cnta];P0=~digittab[cntb-18][cnta];Val=tab[cnta];Val=Val+0xFF00;HC595SendData(Val);}if(++cnta>=8)cnta=0;if(++timecount>=333){timecount=0;if(++cntb>=36)cntb=0;}}voidHC595SendData(unsignedintSendVal){unsignedchari;for(i=0;i<16;i++){if((SendVal<<i)&0x8000)MOSIO=1;//=0;//MOSIO=1S_CLK=0;NOP();NOP();S_CLK=1;}R_CLK=0;//setdatalinelowNOP();NOP();R_CLK=1;}

Ⅳ 求用一片74hc595加單片機驅動一個4位數碼管的動態掃描程序!!!

下面是595的程序,給你參考一下,根據這個程序來寫數碼管顯示就很簡單了。
#define u8 unsigned char
#define u16 unsigned int
sbit MR=P1^6; //寄存器清0,避免數據錯位
sbit RCK=P1^5; //並行輸出時鍾
sbit DS=P1^4; //數據線
sbit CLK=P1^3; //移位輸入時鍾
void writ_595(u8 dat)
{
u8 i;
MR=0; //寄存器清0,避免數據錯位
MR=1;
for(i=0;i<8;i++)
{
CLK=0;
if((dat&0x80) == 0x80)
DS = 1; //串列數據輸出
else DS = 0;
CLK=1; //移位輸入時鍾,上升沿輸入
dat<<=1;
}
RCK=0; //並行輸出時鍾
RCK=1;
} 該子函數可以直接調用,比如writ_595(0xfe);Q0-Q7腳則輸出對應的二進制碼

Ⅵ 51單片機74hc595

74hc595是串列輸入並行輸出,所以你需要將八位數據分八次傳入然後一次性傳出 具體程序如下 注意特殊管腳的宏定義命名

unsigned char i,j;
j = 0xfe;

for(i=0;i<8;i++) // 循環8次,依次移入八位
{
if(j&0x80) P_HC595_SER = 1; // 若dat&0x80 == 1說明dat的最高位為1 相當於將j串列發送給SER
else P_HC595_SER = 0; // 否則說明dat的最高位為0
P_HC595_SRCLK = 1; // 此處SRCLK由0變為1產生上升沿,將SER上的一位數據移入寄存器
//_nop_(); _nop_(); _nop_(); _nop_();
P_HC595_SRCLK = 0; // 將SRCLK變為低電平 等待下一次上升沿
j = j<<1; // 數據右移,從最高位移入寄存器
}
P_HC595_RCLK = 1; // RCLK此處由0變為1產生一個上升沿,將八位數據置入鎖存器,鎖存器數據通過Q0~Q7輸出數據在led顯示
//_nop_(); _nop_(); _nop_(); _nop_();
P_HC595_RCLK = 0; //將RCLK的數據變為低電平 等待下一次上升沿
順便幫你實現了一下 運行正常 望採納

Ⅶ 怎麼用C語言編寫74HC595移位程序

看電路圖,行驅動直接接在單片機I/O口上,有問題吧,單片機I/O不管是輸入還是輸出,都承受不了32LED燈。所以在I/O口上要加放大電路。這個不是小程序,只能說思路。先要明白漢字顯示就是點陣顯示。根據電路一次最多隻能2個漢字,再多就只能滾動或刷屏。所以以2個漢字為基礎開始編程。將第一行的點陣(32個位),順序寫入595,輸出595.
控制第一行的I/O驅動,點亮第一行。延時5ms將第二行的點陣(32個位),順序寫入595,關第一行,輸出595.
控制第二行的I/O驅動,點亮第二行。延時5ms同理,順序點亮16行。一屏掃描完畢,重復循環,漢字就顯示出來了。必須重復循環,否則沒顯示。
顯示滾動效果。滾動效果其實就是控制行點陣的內容,將每行的32個位,右移一位,再寫入595,就是滾動效果了。每掃描一屏,移位一個,位掃描多屏,移動一個,可以控制滾動的速度

Ⅷ 51單片機加74hc595驅動多個數碼管靜態顯示的程序設計

1、首先數碼管分為1位,4位,8位,4位和8位的又分為共陰和共陽數碼管。

閱讀全文

與74hc595單片機程序相關的資料

熱點內容
扣丁學堂python列表 瀏覽:157
圖像加密實踐方案設計 瀏覽:520
舔狗程序員的作文 瀏覽:773
西瓜視頻源碼有收益嗎 瀏覽:449
方舟生存進化電腦版怎麼進服主伺服器 瀏覽:412
解壓還用不氣 瀏覽:693
python怎麼運行項目 瀏覽:886
pythondictu 瀏覽:481
前端bcrypt加密報錯 瀏覽:507
檔案學pdf 瀏覽:725
夏家三千金天美丟了競標文件夾 瀏覽:852
網盤傳輸文件單擊右鍵沒有解壓 瀏覽:178
虛假程序員有哪些 瀏覽:767
抖音優選app怎麼下載 瀏覽:81
食物是用來解壓的 瀏覽:935
打年獸h5游戲源碼 瀏覽:274
程序員什麼工作適合女性 瀏覽:364
電話面試演算法題 瀏覽:592
rxjs源碼 瀏覽:141
淘寶app怎麼下載 瀏覽:643