Ⅰ 我用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位的又分为共阴和共阳数码管。