Ⅰ 我用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位的又分為共陰和共陽數碼管。