预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

51单片机驱动两片74HC595级联动态驱动8位数码管51单片机驱动两片74HC595级联动态驱动8位数码管功能:用2片74HC595驱动8位数码管,级联的最低1片595控制位选,那么第一片控制段选平台:STC89C5211.0592MHz现象:8位数码管从第一位开始从0计数,满10进位版本说明:第0版本没有使用定时器中断,同时定义了一个unsignedlongint变量计数,再把这个数的每位分离出来显示,所以导致有点闪屏,此版本使用定时器中断,而且没有用unsignedlongint之类的变量,而是用数组Val[8]来计数,主函数只负责显示,其它的在中断函数里面处理,这样显示一点都不闪屏,备注:可以用ULN2003A接在数码管的com口来提高驱动能力,ULN2003A里面有7个NPN三极管,可以大大提高驱动能力#include<reg52.h>sbitSCK=P1^1;//数据输入时钟线,脉冲sbitSI=P1^0;//数据线sbitRCK=P1^2;//锁存unsignedcharcodeSMG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//段码unsignedcharcodeWei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选unsignedcharVal[8]={0};//要显示的数据************************函数声明************************voidinterrupt_init(void);voidtimer_init(void);控制74HC595输出数据voidOutput(void){RCK=0;RCK=1;}向74HC595中写入一字节数据voidWrite_Byte(unsignedchardat){unsignedchari=0;for(i=0;i<8;i++){SCK=0;SI=dat&0x80;SCK=1;dat<<=1;}}显示函数voidDisplay(unsignedchar*p){unsignedchar*pt=Wei;Write_Byte(*(pt+0));Write_Byte(SMG[*(p+7)]);Output();Write_Byte(*(pt+1));Write_Byte(SMG[*(p+6)]);Output();Write_Byte(*(pt+2));Write_Byte(SMG[*(p+5)]);Output();Write_Byte(*(pt+3));Write_Byte(SMG[*(p+4)]);Output();Write_Byte(*(pt+4));Write_Byte(SMG[*(p+3)]);Output();Write_Byte(*(pt+5));Write_Byte(SMG[*(p+2)]);Output();Write_Byte(*(pt+6));Write_Byte(SMG[*(p+1)]);Output();Write_Byte(*(pt+7));Write_Byte(SMG[*(p+0)]);Output();}intmain(void){timer_init();interrupt_init();while(1){Display(Val);}return0;}voidinterrupt_init(void){EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;//开定时器1中断}voidtimer_init(void){TMOD=TMOD|0x01;//定时器0工作方式1TMOD=TMOD&0xFD;TH0=0x4B;//装初值,50ms计数TL0=0xFF;TR0=1;//开启定时器0}voidtimer0()interrupt1{staticunsignedcharcounter0=0;counter0++;TH0=0x4B;//重新装入初值,定时器0从头开始计数,计数50msTL0=0xFF;if(2==counter0)//2*50ms=100ms=0.1s{counter0=0;//counter0置零,定时器0从头开始计数Val[0]++;if(10==Val[0]){Val[0]=0;Val[1]++;if(10==Val[1]){Val[1]=0;Val[2]++;if(10==Val[2]){Val[2]=0;Val[3]++;if(10==Val[3]){Val[3]=0;Val[4]++;if(10==Val[4]){Val[4]=0;Val[5]++;if(10==Val[5]){Val[5]=0;Val[6]++;if(10==Val[6]){Va