74HC595编程与PROTEUS仿真.docx

上传人:b****5 文档编号:5539937 上传时间:2022-12-19 格式:DOCX 页数:13 大小:263.15KB
下载 相关 举报
74HC595编程与PROTEUS仿真.docx_第1页
第1页 / 共13页
74HC595编程与PROTEUS仿真.docx_第2页
第2页 / 共13页
74HC595编程与PROTEUS仿真.docx_第3页
第3页 / 共13页
74HC595编程与PROTEUS仿真.docx_第4页
第4页 / 共13页
74HC595编程与PROTEUS仿真.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

74HC595编程与PROTEUS仿真.docx

《74HC595编程与PROTEUS仿真.docx》由会员分享,可在线阅读,更多相关《74HC595编程与PROTEUS仿真.docx(13页珍藏版)》请在冰豆网上搜索。

74HC595编程与PROTEUS仿真.docx

74HC595编程与PROTEUS仿真

5.274HC595输出

简介:

SHCP:

移位寄存器

STCP:

存储器

DS:

串行数据输入

先将需要显示的代码的第8位(最高位)发送到DS,接着,shcp来一次上跳沿操作。

从高到低发送完8次以后,有一次stcp上跳沿操作,即完成数据发送。

注意:

LED数码管显示采用共阴极显示。

1.简单显示

图5.2:

74HC595显示

(1)

(1)汇编:

ORG0000H

MOVA,#6//“1”LED模型共阴极显示

MOVR0,#8//循环次数

MAIN:

RLCA//带进位左环移

MOVP2.1,C//赋值

CLRP2.0

NOP

NOP

SETBP2.0//方波,上升沿有效

DJNZR0,MAIN//减一不为零跳转

CLRP2.2

NOP

NOP

SETBP2.2//方波,上升沿有效

END

 

(2)C语言:

#include//51头文件

#include//“空指令”头文件

sbitshcp=P2^0;

sbitds=P2^1;

sbitstcp=P2^2;//管脚定义

voidled()

{

inti,a=0x06;//a位显示模型,共阴极显示

for(i=0;i<8;i++)

{

ds=(a<

shcp=0;

_nop_();

_nop_();

shcp=1;//上升沿有效

}

stcp=0;

_nop_();

_nop_();

stcp=1;//上升沿有效

}

voidmain()

{

led();

while

(1);

}

 

2.显示数字

图5.3:

74HC595显示

(2)

(1)汇编

ORG0000H

//----主函数-------

MAIN:

CALLM1

CALLM2

CALLM3

CALLM4

SJMPMAIN

//--------显示1------

M1:

MOVA,#06H//赋值

CALLDISPLAY//调用显示子函数

CLRP3.4//打开共阴极管脚

CALLDELAY//延时

SETBP3.4//关闭该管脚

RET//返回

//-------显示2-------

M2:

MOVA,#5BH

CALLDISPLAY

CLRP3.5

CALLDELAY

SETBP3.5

RET

//---------显示3-----

M3:

MOVA,#4FH

CALLDISPLAY

CLRP3.6

CALLDELAY

SETBP3.6

RET

//------显示4--------

M4:

MOVA,#66H

CALLDISPLAY

CLRP3.7

CALLDELAY

SETBP3.7

RET

//------显示子函数--------

DISPLAY:

//(共阴极显示)

MOVR1,#8//循环次数

LOOP1:

RLCA//带进位左环移

MOVP2.1,C//赋值

CLRP2.0

NOP

NOP

SETBP2.0//方波,上升沿有效

DJNZR1,LOOP1//减一不为零跳转

CLRP2.2

NOP

NOP

SETBP2.2//方波,上升沿有效

RET

//-------延时子函数--------

DELAY:

MOVR2,#2//(大调)修改R2值,改变延时长短

D2:

MOVR3,#10//中等

D3:

MOVR4,#0//微调延时大小

D4:

NOP

DJNZR4,D4

DJNZR3,D3

DJNZR2,D2

RET

END

 

(2)C语言

#include//51头文件

#include//“空指令”头文件

sbitshcp=P2^0;

sbitds=P2^1;

sbitstcp=P2^2;//管脚定义

sbita=P3^4;

sbitb=P3^5;

sbitc=P3^6;

sbitd=P3^7;

//-----延时子程序------

voiddelay(inti)//延时大小与i有关

{

intj;

while(i--)

for(j=255;j>0;j--)

;

}

//-----LED显示子程序------

voidled(intj)//共阴极显示

{

intnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

inti;

for(i=0;i<8;i++)

{

ds=(num[j]<

shcp=0;

_nop_();

_nop_();

shcp=1;//上升沿有效

}

stcp=0;

_nop_();

_nop_();

stcp=1;//上升沿有效

}

//---主程序-------

voidmain()

{

intn=1234;//选择需要显示的数值

intn1,n2,n3,n4,i=0;

n1=n/1000;//千位

n2=n/100%10;//百位

n3=n/10%10;//十位

n4=n%10;//个位

while

(1)

{

switch(i++)//选择

{

case0:

led(n1);a=0;break;//显示千位,打开控制

case1:

led(n2);b=0;break;//显示百位,打开控制

case2:

led(n3);c=0;break;//显示十位,打开控制

case3:

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)

循环显示0~F。

(1)汇编:

ORG0000H

//----主函数-------

MAIN:

MOVR0,#16//循环次数(显示16次:

0~F)

MOVDPTR,#TAB

LOOP:

//循环显示0~F

MOVCA,@A+DPTR//查表

CALLDISPLAY

CALLDELAY

INCDPTR

CLRA//清空A内容

DJNZR0,LOOP//减一不为零跳转

SJMPMAIN

//------显示子函数--------

DISPLAY:

//(共阴极显示)

MOVR1,#8//循环次数

LOOP1:

RLCA//带进位左环移

MOVP2.1,C//赋值

CLRP2.0

NOP

NOP

SETBP2.0//方波,上升沿有效

DJNZR1,LOOP1//减一不为零跳转

CLRP2.2

NOP

NOP

SETBP2.2//方波,上升沿有效

RET

//-------延时子函数--------

DELAY:

MOVR2,#2//(大调)修改R2值,改变延时长短

D2:

MOVR3,#0//中等

D3:

MOVR4,#0//微调延时大小

D4:

NOP

DJNZR4,D4

DJNZR3,D3

DJNZR2,D2

RET

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

END

(2)C语言

#include//51头文件

#include//“空指令”头文件

sbitshcp=P2^0;

sbitds=P2^1;

sbitstcp=P2^2;//管脚定义

//-----延时子程序------

voiddelay(inti)//延时大小与i有关

{

intj;

while(i--)

for(j=255;j>0;j--)

;

}

//-----LED显示子程序------

voidled()

{

intnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

staticintj=0;

inti;

for(i=0;i<8;i++)

{

ds=(num[j]<

shcp=0;

_nop_();

_nop_();

shcp=1;//上升沿有效

}

stcp=0;

_nop_();

_nop_();

stcp=1;//上升沿有效

j++;

if(j==16)

j=0;//满16后,从新计次

}

//---主程序-------

voidmain()

{

while

(1)//循环

{

led();

delay(100);

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1