51单片机+74HC595驱动数码管程序

合集下载

74hc595编程要点

74hc595编程要点
(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的
同时移入数据。
而具体编程方法为
如:R0中存放3FH,LED数码管显示“0”
;*****接口定义:
DS_595 EQU P1.0 ;串行数据输入(595-14)
;*****串行输入16位数据
MOV R0,30H
CALL WR_595 ;串行输入3FH
nop
NOP
MOV R0,31H
CALL WR_595 ;串行输入06H
LOOP:
;第一步:准备移入74HC595数据
RLC A ;数据移位
MOV DS_595,C ;送数据到串行数据输入端上(P1.0)
;第二步:产生一上升沿将数据移入74HC595
NOP
NOP
SETB CT_595 ;上升沿将数据送到输出锁存器,显示
NOP
NOP
CLR CT_595
RET
&nbs
CLR CT_595 ;拉低锁存器控制脉冲
NOP
NOP
SETB CT_595 ;上升沿将数据送到输出锁存器,LED数码管显示“0”
NOP
NOP
CLR CT_595
RET
;*****移位寄存器接收一个字节(如3FH)数据子程序
WR_595:
MOV R4,#08H ;一个字节数据(8位)
MOV A,R0 ;R0中存放要送入的数据3FH
其实,看了这么多595的资料,觉得没什么难的,关键是看懂其时序图,说到底,就是下面三步(引用)/P>
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。

74HC595驱动两个7段数码管

74HC595驱动两个7段数码管

一个程序输出正好要用两个BCD数码管显示P0的读出数据,不巧手头只有单个的这种共阳极7段数码管。

于是用两片74HC595驱动了这两个数码管,达到显示数据的目的。

网上的很多程序都是74HC595驱动多位数码管的,如果要驱动这样比较“原始”的单个数码管,只好自己参考了一些程序,改写了程序,仿真以及实践成功。

本程序简单修改也可以用在其他74HC595电路以及7段数码管驱动等应用上。

Proteus仿真画面如下:源程序如下:#include<reg51.h> //51头文件#include<intrins.h>//“空指令”头文件sbit H_SH=P3^0;sbit H_DS=P3^1;sbit H_ST=P3^2; //H 管脚定义sbit L_SH=P3^3;sbit L_DS=P3^4;sbit L_ST=P3^5; //L 管脚定义int num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管,先显示A~H各段,确认各段电路是否正常,然后显示0~F。

// int num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管的编码//-----延时子程序------void delay(int i) //延时大小与i有关{int j;while(i--)for(j=255;j>0;j--);}//-----LED显示子程序------void led(){static int j=0;int i;for(i=0;i<8;i++){H_DS=(num[j]<<i)&0x80;//位//shcp=0;H_SH=0;_nop_();_nop_();H_SH=1; //上升沿有效}//stcp=0;H_ST=0;_nop_();_nop_();H_ST=1; //上升沿有效j++;if(j==24)j=0; //满24后,从新计次}void led1(){static int j=0;int i;for(i=0;i<8;i++){L_DS=(num[j]<<i)&0x80;//位L_SH=0;_nop_();_nop_();L_SH=1; //上升沿有效}L_ST=0;_nop_();_nop_();L_ST=1; //上升沿有效j++;if(j==24)j=0; //满24后,从新计次}//---主程序-------void main(){while(1) //循环{led();delay(100);led1();delay(100);}}。

74HC595驱动程序 测试可用

74HC595驱动程序 测试可用

74HC驱动程序#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit SDA = P1^0;sbit SHIFT_CP = P1^1;sbit ST_CP = P1^2;#define NOP _nop_()uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void disp(uint var,uchar rol,uchar pot); void InitSerialPort(void){SDA = 0;SHIFT_CP = 0;ST_CP = 0;}void SerialSendData(uint dat){uchar ii;uint sdata=dat;for(ii=0;ii<16;ii++){if(sdata&0x8000)SDA=1;else SDA = 0;sdata<<=1;SHIFT_CP =0;NOP;NOP;SHIFT_CP = 1;NOP;NOP;}ST_CP = 1;NOP;NOP;ST_CP = 0;}void disp(uint var,uchar rol,uchar pot) {unsigned int dx;uchar a=var/1000;uchar b=(var%1000)/100;uchar c=(var%100)/10;uchar d=var%10;if(rol==0){InitSerialPort();dx=wei[0];if(pot==0){dx=((dx<<8)|duan[a]&0x7f);}else{dx=((dx<<8)|duan[a]);}SerialSendData(dx);dx=wei[1];if(pot==1){dx=((dx<<8)|duan[b]&0x7f);}else{dx=((dx<<8)|duan[b]);}SerialSendData(dx);dx=wei[2];if(pot==2){dx=((dx<<8)|duan[c]&0x7f);}else{}SerialSendData(dx);dx=wei[3];if(pot==3){dx=((dx<<8)|duan[d]&0x7f);}else{dx=((dx<<8)|duan[d]);}SerialSendData(dx);}else if(rol==1){InitSerialPort();dx=wei[4];if(pot==0){dx=((dx<<8)|duan[a]&0x7f);}else{dx=((dx<<8)|duan[a]);}SerialSendData(dx);dx=wei[5];if(pot==1){dx=((dx<<8)|duan[b]&0x7f);}else{dx=((dx<<8)|duan[b]);}SerialSendData(dx);dx=wei[6];if(pot==2){dx=((dx<<8)|duan[c]&0x7f);}else{}SerialSendData(dx);dx=wei[7];if(pot==3){dx=((dx<<8)|duan[d]&0x7f);}else{dx=((dx<<8)|duan[d]);}SerialSendData(dx);}}void main(){while(1){disp(1234,0,0);disp(5678,1,0);}}。

74HC595驱动两位数码管程序Word版

74HC595驱动两位数码管程序Word版

/*==================================================================== ====================================================================== ==*//*============================================================================= ==============================================================*/#include<reg52.h>#include <math.h>#include <intrins.h>#include<string.h>#include<stdio.h>#define unchar unsigned char#define unint unsigned int#define unlong unsigned long/*============================================================================= ==============================================================*//*============================================================================= ==============================================================*/#define dmx_total_data 3#define DMAX 101#define DMIN 0#define CONTIME_T1 20000#define CONTIME_T3 200#define CONTIME_T2 100#define TIME0 256-17#define BUTTON1 1#define BUTTON2 2sfr WDT_CONTR =0XE1;sfr ISP_DATA =0XE2;sfr ISP_ADDRH =0XE3;sfr ISP_ADDRL =0XE4;sfr ISP_LMD =0XE5;sfr ISP_TRIG =0XE6;sfr ISP_CONTR =0XE7;sfr P1M0 =0X91;sfr P1M1 =0X92;sfr AUXR =0X8E;unint data I_address;unint data dis_Addr_Rg;unint data dis_Addr_Rg;unchar data Counter = 10;sbit an_DOWN =P3^7;sbit an_UP =P1^4;sbit sdo =P1^7;sbit clk =P1^6;sbit stb =P1^5;sbit Bd_flg_RT =P3^4;unchar data dis[ ];unsigned code disp[10]={0xA0,0xF9,0xC4,0xD0,0x99,0x92,0x82,0xF8,0x80,0x90};/*-------------------------------------------------------------------------------------------------------------------*/void delay10ms(void){unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}//-------------按键延时---------------//void ButtonDelay(void){unchar i,j;for(i = 0; i++; i < 50)for(j = 0; j++; j < 200);}/*--------------------------------------------------------------------------------------------------*/unchar ButtonScan (void){unchar ButtonNum = 0;if(P3^4 == 0){/*延时防止按键抖动,如果晶振是12M的话。

51单片机hc595控制一位数码管

51单片机hc595控制一位数码管

/*用hc595控制数码管,显示键盘的值*/#include<reg52.h>#define unchar unsigned char#define unint unsigned intunchar temp,num;sbit scl=P3^6;sbit sda=P3^4;sbit rclk=P3^5; //寄存器时钟unchar code table[]={0x40,0xf9,0x24,0x30,0x99,0x12,0x02,0xf8,0x00,0x10,0xbf,0xb9,0xb6,0}; //数码管编码void delay1()//短延时{;;}void delay(int z) //长延时{int a,b;for(a=0;a<110;a++)for(b=0;b<z;b++);}void init()//初始化{scl=1;sda=1;rclk=0;}void start()//开始条件{scl=1;delay1();sda=1;delay1();sda=0;delay1();}void stop()//停止{scl=1;delay1();sda=0;delay1();sda=1;delay1();}void write(unsigned char temp)//写{int i;start();for(i=0;i<8;i++){scl=0;rclk=0;delay1();sda=(bit)(temp&0x80);delay1();scl=1;delay1();delay1();temp<<=1;} rclk=1;stop();}//键盘扫描unchar scan(){// unchar num,temp;// num=17;P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xfd;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;temp=temp&0xf0;switch(temp){case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}// display(num-1);}}P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xfb;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;switch(temp){case 0xeb:num=5;break;case 0xdb:num=6;break;case 0xbb:num=7;break;case 0x7b:num=8;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}//display(num-1);}}P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0){P2=0xf7;temp=P2;temp=temp&0xf0;delay(10);while(temp!=0xf0){temp=P2;switch(temp){case 0xe7:num=9;break;case 0xd7:num=10;break;case 0xb7:num=11;break;case 0x77:num=12;break;}while(temp!=0xf0){temp=P2;temp=temp&0xf0;}// display(num-1);//delay(100);}}return num;}/*void display(unchar num) {P0=table[num-1];delay(10);} */void main()//主函数{init();delay1();while(1)//大循环{write(table[scan()]);}}。

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计
1. 数码管显示设计
本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。

74HC595部分电路图如下:
与单片机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。

两片595采用级联方式,即U2的第9脚接到U3的第14引脚。

2. 74HC595简介
74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。

其管脚介绍如下:
15:数据输出A-接数码管数据A段;
1:数据输出B-接数码管数据B段;
2:数据输出C-接数码管数据C段;
3:数据输出D-接数码管数据D段;
4:数据输出E-接数码管数据E段;
5:数据输出F-接数码管数据F段;
6:数据输出G-接数码管数据G段;
7:数据输出H-接数码管数据H段;
16:电源正脚-接电源正;
8:电源负脚-接电源负;
14:数据输入脚-接单片机管脚;
12:数据锁存时钟-接单片机管脚;
11:数据输入时钟-接单片机管脚;
13:使能输出脚-低电平有效,接低电平;
10:数据清零-不清零,接高电平;。

51单片机控制74HC595驱动的编程要点

51单片机控制74HC595驱动的编程要点

51单片机控制74HC595驱动的编程要点51单片机编程要点51单片机控制74HC595驱动的编程要点:74595外形图______QB--|1 16|--VccQC--|2 15|--QAQD--|3 14|--SIQE--|4 13|--/GQF--|5 12|--RCKQG--|6 11|--SCKQH--|7 10|--/SCLRGND-|8 9|--QH'|_____|74595的数据端:QA--QH: 八位并行输出端,可以直接控制数码管的8个段。

QH': 级联输出端。

我将它接下一个595的SI端。

SI: 串行数据输入端。

74595的控制端说明:/SCLR(10脚): 低点平时将移位寄存器的数据清零。

通常我将它接Vcc。

SCK(11脚):上升沿时数据寄存器的数据移位。

QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

我通常都选微秒级)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

/G(13脚): 高电平时禁止输出(高阻态)。

如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。

比通过数据端移位控制要省时省力。

注1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。

74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。

2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。

这在串行速度慢的场合很有用处,数码管没有闪烁感。

3)595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平,G为低电平。

74HC595芯片详细注解及驱动程序批注

74HC595芯片详细注解及驱动程序批注

74HC595:74HC595是一个8位串行输入、并行输出的移位寄存器和8位输出锁存器。

并行输出为三态输出。

寄存器和锁存器有各自的时钟输入SCLK(SH_CP)和SLCK(ST_CP);都是上升沿有效,当SCLK由低到高变化时,串行输入数据(SDA)移入寄存器。

当SLCK由低到高变化时,寄存器数据置入锁存器。

74HC595 作为一款常用的高速CMOS 数字芯片,经常被用作以下用途:1、作为CMOS 结构的芯片,驱动能力还是可以的,因此常用来驱动LED 点阵屏;2、串转并,在单片机 IO 口不足时可以扩展IO 口使用;& [1 b! T. c, ^& Q1 B: ]主要特点:1、三态门输出,即高低电平、高阻态;5 V6 S& g0 J2 A( d4 K, m2、CMOS 结构,驱动能力比较强,一般可以用来直接驱动点阵屏;: P/ @3 w2 f& z3、串转并输出,可用来扩展单片机IO 口;4、SPI 协议;. u5 @ \" R* y) N! r/ k' j5、可级联多片;Q0--Q7: 八位并行输出端,可以直接控制数码管的8个段。

//QA-QHQ7': 串行数据输出端,级联输出端。

将它接下一个595的DS端。

//Q’HDS(14脚): 串行数据输入端,级联的话接上一级的Q7'。

//SERMR(10脚): 低电平时将移位寄存器的数据清零。

通常接到VCC防止数据清零。

SH_CP(11脚):上升沿时数据寄存器的数据移位。

下降沿移位寄存器数据不变。

(脉冲宽度:5V时,大于几十纳秒就行了。

我通常都选微秒级)///移位脉冲引脚//SCKST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。

通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。

我通常都选微秒级),更新显示数据。

74HC595驱动24位数码管

74HC595驱动24位数码管

74HC595驱动24位数码管74HC595 是一个8 位移位寄存器的数字芯片,并具有输出锁存和三态输出。

既然可以驱动了那么多的数码管,驱动大屏点阵还是梦?绝对不是梦?引脚功能:第8 脚GND,电源地。

第16 脚VCC,电源正极第14 脚DATA,串行数据输入口,显示数据由此进入,必须有时钟信号的配合才能移入。

第13 脚EN,使能口,当该引脚上为“1”时QA~QH 口全部为“1”,为“0”时QA~QH 的输出由输入的数据控制。

第12 脚STB,锁存口,当输入的数据在传入寄存器后,只有供给一个锁存信号才能将移入的数据送QA~QH 口输出。

第11 脚CLK,时钟口,每一个时钟信号将移入一位数据到寄存器。

第10 脚SCLR,复位口,只要有复位信号,寄存器内移入的数据将清空,显示屏不用该脚,一般接VCC。

第9 脚DOUT,串行数据输出端,将数据传到下一个。

第15、1~7 脚,并行输出口也就是驱动输出口,驱动LED。

附上仿真图:驱动程序也很简单:#includereg51.h#includeintrins.h#define uchar unsigned charuchar code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar buf[5];sbit SH=P2;sbit SDA=P2;sb it ST=P2 ;uchar count,sec,min;void delay(unsigned char i){unsigned char j=220;while(i--)while(j--);}void write_595(uchar p){uchar i,temp;temp=p;for(i=0;i8;i++){if(temp0x80) SDA=1;else SDA=0;SH=0;_nop_();_nop_();SH=1;temp=1; } }void init_T() //中断和定时器初始化{IE=0x82; //打开总中断,定时器T1 和T0 中断TMOD=0x01; //设定T1,T0 位工作方式1TH0=0x9e;TL0=0x58; //T0 装初值TR0=1; //开始时钟开始工作}void main(){uchar scan,i;init_T();while(1){buf[0]=sec%10;buf[1]=sec/10;// buf[2]=;buf[3]=min%10;buf[4]=min/10;scan=0x01;for(i=0;i5;i++){。

51单片机+74hc595锁存器驱动一个静态数码管

51单片机+74hc595锁存器驱动一个静态数码管

51单片机+74hc595锁存器驱动一个静态数码管实验开发板HC6800 v2.8 (电子商务可以查到)将JP2 与JP3 相连即可,注意排线要反接代码如下:/** 标题: 试验数码管上如何显示数字(共阳极) ** **连接方法:P2 与P3 用8PIN 排线连接**** */#include #include void delay(unsigned int i); //函数声名// 此表为LED 的字模,0~F unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7 C,~0x39,~0x5E,~0x79,~0x71};sbit lock=P3 ;//12,storage register clock inputsbit clk=P3;//11,sh ift register clock inputsbit dat=P3;//14,se rial data input/*将显示数据串行发送到74hc595*/void sendTo(unsigned char k){unsigned char i;for(i=0;i>=1;//发送数据右移一位}}void main(){unsigned int LedNumVal=0 ,C ; //定义变量while(1) { if (++C>= 300) { LedNumVal++ ; //每隔300 个扫描周期加一次C =0; //每隔300 个扫描清零} lock=0; // 将字模送到14,serial data input sendTo(LED7Code[LedNumVal%10]&0x7f); //LED7 0x7f 为小数点共阴和共阳此处也是不一样; _nop_(); _nop_(); lock=1;//所存数据delay(300); //调用延时程序} }/** ** 延时程序** **/void delay(unsigned int i){ char j;for(i; i > 0; i--) for(j = 200; j > 0; j--);}tips:感谢大家的阅读,本文由我司收集整编。

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计1. 数码管显示设计本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。

74HC595部分电路图如下:与单片机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。

两片595采用级联方式,即U2的第9脚接到U3的第14引脚。

2. 74HC595简介74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。

其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输入脚-接单片机管脚;12:数据锁存时钟-接单片机管脚;11:数据输入时钟-接单片机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接高电平;9:数据级联输出-接下一片595的数据输入脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下面重点来了,通过时序图来编程。

看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:SCK是上升沿的时候要把数据写入;RCK是上升沿的时候数据才能锁存显示;有数据操作的过程中RESET必须是高电平;EN必须是低电平,595才能工作;知道了以上4点就可以写程序了。

其中3、4条是硬件连接上的事情(也可以用单片机的IO口来连接,这样的话可以随时控制74HC595的工作与否情况)。

写程序主要靠1、2条。

下面具体操作。

4. 程序实例看下面一段程序:第39行:HC595_CLK(0)的原型如下:HC595_CLK(0)是让CLK处于低电平,即上升沿还没有来到;HC595_DAT(1)就是要把写入的数据准备好;temp《《1是将数据移位,即一个字节分八次写入;HC595_CLK(1)是让CLK处于高电平,即上升沿来了;以上几句解释一下就是:在CLK时钟上升沿来临之前把要写入的数据准备好,等上升沿来了就把准备好的数据写入。

74HC595驱动数码管C程序

74HC595驱动数码管C程序

/*************************************
用途:
注意:内部8M晶振
************************************************/
#include "config.h"
volatile unsigned int countnum=0;
extern void HC_595_OUT(unsigned char data);
extern void Seg7_Led_Update(void);
extern void Seg7_Led_display(unsigned int data);
extern void Seg7_Led_float(float data);
文件:spi.h
用途:
注意:内部8M晶振
************************************************/
#ifndef __spi_H__
#define __spi_H__
#define SS 0
#define SCK 1
#define MOSI 2
#define Seg7_Bitselect_DDR DDRB
#define Seg7_Bit0 4
#define Seg7_Bit1 5
#define Seg7_Bit2 6
#define Seg7_Bit3 7
#define dp 7
#define Seg7_Bit0_En() {Seg7_Bitselect_DDR|=(1<<Seg7_Bit0);Seg7_Bitselect_PORT|=(1<<Seg7_Bit0);}

单片机驱动74HC595的c51程序

单片机驱动74HC595的c51程序

单片机驱动74HC595的c51程序//该子程序为74HC595 发送字符的程序,该程序是先发送的是最低位!//芯片74HC595 的时钟引脚为第11 脚//芯片74HC595 的数据引脚为第14 脚//芯片74HC595 的锁存引脚为第12 脚//当有多片74HC595 串联时,只有当所有数据都发送完成后,再锁存信号!//同样74hc164 与51 单片机连接也可以由这个程序来驱动#include#define uchar unsigned char#define uint unsigned int sbit clk=P3 ;sbit dat=P3;sb it shuo_cun=P3;uchar volatile e,f;uchar code tab[]={0x03,/*0*/0x9F,/*1*/0x25,/*2*/0x0D,/*3*/0x99,/*4*/0x49,/*5*/0x41,/*6*/0x1F,/*7*/0x01,/*8*/0x09,/*9*/};void fa_shon(uchar k) //{uchar i; //定义循环变量for(i=0;i8;i++) //因为是1 字节是8 位,所以循环8 次{dat=k0x01; //将要发送的数据与上0X01 送到数据引脚clk=0; //时钟引脚加低电平clk=1; //时钟引脚加高电平k=1; //将发送的数据右移1 位} }void main() {TMOD=0x01;TH0=15535/256;TL0=15535%256;EA=1;ET0=1;TR0=1;while(1){ uchara;for(a=0;a3;a++){fa_shon(tab[e%10]);fa_shon(tab[e%100/10]);fa_shon(tab[e/100]);}s huo_cun=0; //锁存为低电平shuo_cun=1; //锁存为高电平}}void tt()interrupt1{TH0=15535/256;TL0=15535%256;f++;if(f10){f=0;e++;if(e250)e=0;}}tips:感谢大家的阅读,本文由我司收集整编。

74HC595程序应用(附原理图)

74HC595程序应用(附原理图)

74HC595芯片资料8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。

三态。

特点8位串行输入8位串行或并行输出存储状态寄存器,三种状态输出寄存器可以直接清除100MHz的移位频率输出能力并行输出,总线驱动串行输出;标准中等规模集成电路应用串行到并行的数据转换Remote control holding register.#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit stcp1=P2^2;sbit ds1=P2^1;sbit shcp1=P2^0;sbit stcp2=P2^5;sbit ds2=P2^4;sbit shcp2=P2^3;uchar code DA T[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴数码管显示码uchar code tab[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};uchar code wei[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}; void delay(uint ms){uint x,y;for(x=ms;x>0;x--)for(y=255;y>0;y--);}void QR0_5951(uchar num1){uchar j;for (j=0;j<8;j++){num1=num1<<1 ;ds1=CY;shcp1=1;//上升沿发生移位// shcp1=0;}}void OUT_5951()//将移位寄存器内的数据锁存到输出寄存器并显示{stcp1=0;stcp1=1;//上升沿将数据送到输出锁存器stcp1=0;}void QR1_5952(uchar num2){uchar j;for (j=0;j<8;j++){num2=num2<<1 ;ds2=CY;shcp2=1;//上升沿发生移位// shcp2=0;}}void OUT_5952()//将移位寄存器内的数据锁存到输出寄存器并显示{stcp2=0;stcp2=1;//上升沿将数据送到输出锁存器stcp2=0;}void main(){uchar i;while(1){for(i=0;i<2;i++){QR0_5951(DA T[0]);OUT_5951();QR1_5952(wei[i]);OUT_5952();delay(1);}}}描述595是高速的硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机+74HC595驱动数码管程序
这里是电路图:完整的源码和图纸下载地址:51hei/bbs/dpj-20392-1.html
下面是51 单片机驱动74hc595 芯片的程序:#include //包含51 单片机的头文
件#include #define uint unsigned int#define uchar unsigned char//sbit sin_595 =P1;//sbit rclk_595 =P1;//sb it sclk_595 =P1 ;//sbit s_clr =P1;sb it a_cp_595 =P2; //串行移位时钟脉冲sh_cp_595sbit b_cp_595 =P2;//输出锁存器控制脉冲
st_cp_595//sbit _oe_595 =P1 ; //8 位并行输出使能/禁止(高阻态)sbit ds_595
=P2 ; //串行数据输入extern uchar datas[6]; //存放6 个数码管的显示数字uchar ledcode[]={0xC0,// 00xF9,// 10xA4,// 20xB0,// 30x99,// 40x92,// 50x82,// 60xF8,// 70x80,// 80x90,// 90x88,// A0x83,// B0xC6,// C0xA1,// D0x86,// E0x8E// F};void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void
led_display(void){ uchar i,j; bit testb; uchar bdata movebit[6]; uchar bdata test; //_oe_595=0; //选中数码管for(i=0;i<6;i++) movebit[i]=ledcode[datas[i]]; // P1=0; delay(1); for(i=0;i<6;i++) //数据移位{ test=movebit[i]; for(j=0;j<8;j++) { testb=test&0x80; test=test<<1; if(testb) { ds_595=1; } else {ds_595=0; }a_cp_595=1; a_cp_595=0; } //数据移位} b_cp_595=0; b_cp_595=1; b_cp_595=0;} tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

相关文档
最新文档