1、 . . . . 5.2 74HC595输出简介:SHCP:移位寄存器STCP:存储器DS:串行数据输入 先将需要显示的代码的第8位(最高位)发送到DS,接着,shcp来一次上跳沿操作。从高到低发送完8次以后,有一次stcp上跳沿操作,即完成数据发送。注意:LED数码管显示采用共阴极显示。1.简单显示图5.2:74HC595显示(1)(1)汇编:ORG 0000HMOV A,#6 /“1”LED模型共阴极显示MOV R0,#8 /循环次数MAIN:RLC A /带进位左环移MOV P2.1,C /赋值CLR P2.0NOPNOPSETB P2.0 /方波,上升沿有效DJNZ R0,MAIN /
2、减一不为零跳转CLR P2.2NOPNOPSETB P2.2 /方波,上升沿有效END(2)C语言:#include /51头文件#include/“空指令”头文件sbit shcp=P20;sbit ds=P21;sbit stcp=P22;/管脚定义void led() int i,a=0x06;/a位显示模型,共阴极显示 for(i=0;i8;i+) ds=(ai)&0x80;/位 shcp=0; _nop_(); _nop_(); shcp=1; /上升沿有效 stcp=0; _nop_(); _nop_(); stcp=1; /上升沿有效void main() led(); whil
3、e(1);2.显示数字图5.3:74HC595显示(2)(1)汇编ORG 0000H/-主函数-MAIN:CALL M1CALL M2CALL M3CALL M4SJMP MAIN/-显示1-M1:MOV A,#06H /赋值CALL DISPLAY /调用显示子函数CLR P3.4 /打开共阴极管脚CALL DELAY /延时SETB P3.4 /关闭该管脚RET /返回/-显示2-M2:MOV A,#5BHCALL DISPLAYCLR P3.5CALL DELAYSETB P3.5RET/-显示3-M3:MOV A,#4FHCALL DISPLAYCLR P3.6CALL DELAYSE
4、TB P3.6RET/-显示4-M4:MOV A,#66HCALL DISPLAYCLR P3.7CALL DELAYSETB P3.7RET/-显示子函数-DISPLAY: /(共阴极显示)MOV R1,#8 /循环次数LOOP1:RLC A /带进位左环移MOV P2.1,C /赋值CLR P2.0NOPNOPSETB P2.0 /方波,上升沿有效DJNZ R1,LOOP1 /减一不为零跳转CLR P2.2NOPNOPSETB P2.2 /方波,上升沿有效RET/-延时子函数-DELAY:MOV R2,#2 /(大调)修改R2值,改变延时长短D2:MOV R3,#10 /中等D3:MOV
5、R4,#0 /微调延时大小D4:NOPDJNZ R4,D4DJNZ R3,D3DJNZ R2,D2RETEND(2)C语言#include /51头文件#include/“空指令”头文件sbit shcp=P20;sbit ds=P21;sbit stcp=P22;/管脚定义sbit a=P34;sbit b=P35;sbit c=P36;sbit d=P37;/-延时子程序-void delay(int i) /延时大小与i有关 int j; while(i-) for(j=255;j0;j-) ;/-LED显示子程序-void led(int j)/共阴极显示 int num=0x3f,0
6、x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; int i; for(i=0;i8;i+) ds=(numji)&0x80;/位 shcp=0; _nop_(); _nop_(); shcp=1; /上升沿有效 stcp=0; _nop_(); _nop_(); stcp=1; /上升沿有效/-主程序-void main() int n=1234;/选择需要显示的数值 int n1,n2,n3,n4,i=0; n1=n/1000;/千位 n2=n/100%10;/百位 n3=n/10%10;
7、/十位 n4=n%10; /个位 while(1) switch(i+)/选择 case 0:led(n1);a=0;break;/显示千位,打开控制 case 1:led(n2);b=0;break;/显示百位,打开控制 case 2:led(n3);c=0;break;/显示十位,打开控制 case 3:led(n4);d=0;break;/显示个位,打开控制 if(i=4) i=0; /满四次后,从新扫描数码管 delay(1);/延时 a=b=c=d=1; /关闭全部管脚 3.循环显示图5.4:74HC595显示(3)图5.5:74HC595显示(4)图5.6:74HC595显示(5)
8、循环显示0F。(1)汇编:ORG 0000H/-主函数-MAIN:MOV R0,#16/循环次数(显示16次:0F)MOV DPTR,#TABLOOP: /循环显示0FMOVC A,A+DPTR /查表CALL DISPLAYCALL DELAYINC DPTRCLR A /清空A容DJNZ R0,LOOP /减一不为零跳转SJMP MAIN/-显示子函数-DISPLAY: /(共阴极显示)MOV R1,#8 /循环次数LOOP1:RLC A /带进位左环移MOV P2.1,C /赋值CLR P2.0NOPNOPSETB P2.0 /方波,上升沿有效DJNZ R1,LOOP1 /减一不为零跳转
9、CLR P2.2NOPNOPSETB P2.2 /方波,上升沿有效RET/-延时子函数-DELAY:MOV R2,#2 /(大调)修改R2值,改变延时长短D2:MOV R3,#0 /中等D3:MOV R4,#0 /微调延时大小D4:NOPDJNZ R4,D4DJNZ R3,D3DJNZ R2,D2RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HEND(2)C语言#include /51头文件#include/“空指令”头文件sbit shcp=P20;sbit ds=P21;sbit stcp=P
10、22;/管脚定义/-延时子程序-void delay(int i) /延时大小与i有关 int j; while(i-) for(j=255;j0;j-) ;/-LED显示子程序-void led() int num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; static int j=0; int i; for(i=0;i8;i+) ds=(numji)&0x80;/位 shcp=0; _nop_(); _nop_(); shcp=1; /上升沿有效 stcp=0; _nop_(); _nop_(); stcp=1; /上升沿有效 j+; if(j=16) j=0; /满16后,从新计次/-主程序-void main() while(1) /循环 led(); delay(100); 10 / 10
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100