导航:首页 > 操作系统 > 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单片机程序相关的资料

热点内容
php基础编程教程pdf 浏览:215
穿越之命令与征服将军 浏览:351
android广播重复 浏览:832
像阿里云一样的服务器 浏览:318
水冷空调有压缩机吗 浏览:478
访问日本服务器可以做什么 浏览:432
bytejava详解 浏览:448
androidjava7 浏览:384
服务器在山洞里为什么还有油 浏览:885
天天基金app在哪里下载 浏览:974
服务器软路由怎么做 浏览:291
冰箱压缩机出口 浏览:227
OPT最佳页面置换算法 浏览:644
网盘忘记解压码怎么办 浏览:852
文件加密看不到里面的内容 浏览:653
程序员脑子里都想什么 浏览:434
oppp手机信任app在哪里设置 浏览:189
java地址重定向 浏览:272
一年级下册摘苹果的算法是怎样的 浏览:448
程序员出轨电视剧 浏览:90