52单片机加两个74HC573,数码管动态显示,一个573连接段,一个连接位,求C程序。

52单片机加两个74HC573,数码管动态显示,一个573连接段,一个连接位,求C程序。,第1张

图画的不对,既然用了锁存器,就要节约IO端口,两个锁存器的输入应该共用一个端口P0或P2

假设为P0

每个锁存器有1个锁存信号L,需占用两条IO线,假设分别接 P1.6和P1.7

由于是动态扫描显示,所以显示函数调用时要放在弊洞铅WHILE或FOR循环中反复运行,才能看见结果

程序如下:

#include<reg52.h>

sbit dula=P1^6//段锁存信号

sbit wela=P1^7//位锁存信号

#define uchar unsigned char

void delay(i)

{

for(j=ij>0j--)

for(k=125k>0k--)

}

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

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

void display(uchar qian_c,uchar bai_c,uchar shi_c,uchar ge_c)//4位显示程序

{

P0=table[qian_c] //显示千位

dula=1

dula=0

P0=0xfe

wela=1

wela=0

delay(2)

P0=table[bai_c] //显示百位

dula=1

dula=0

P0=0xfd

wela=1

wela=0

delay(2)

P0=table[shi_c] //显示十位

dula=1

dula=0

P0=0xfb

wela=1

wela=0

delay(2)

P0=table[ge_c] //显示个位

dula=1

dula=0

P0=0xf7

wela=1

wela=0

delay(2)

P0=xff //显示完毕后关闭所有位显示,也可租好不要,但退出显示程序时会留尾巴,即最后一个数码管还在显示

wela=1

wela=0

}

void main( )

{

 ...../颤嫌/其它代码

 while(1)

  {

display(b1,b2,b3,b4)//调用显示函数

.....//其它代码,不能占用CPU太多时间,否则显示闪烁

  }

}

#include <reg52.H> //STC头文件

#define uchar unsigned char

#define uint unsigned int

#define timewe 3

sbit we = P2^7

sbit du = P2^6

unsigned long temp

uint 埋困jsms=0

uchar code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}

uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}

void delay (uint a) // 1ms延时程序(12MHz 10倍于51单片机速度时)

{

uint i

while( --a != 0)

{

for(i = 0 如樱i < 600 i++) 

}

uchar disbuf[6]

void display()

{ uchar 渣液丛code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}

static uchar a

if(a>=6)a=0

we=1

P0=0xff

we=0

du=1

P0=duan[disbuf[a]]

du=0

we=1

P0=wei[a]

we=0

a++

}

/**********************************************/

/* 主函数 */

/**********************************************/

void main(void)

{

temp=0

while(1)

{

if(++jsms>=1000){

if(++temp == 999999)

temp = 0 

}

disbuf[0] = temp/100000

disbuf[1] = temp%100000/10000

disbuf[2] = temp%10000/1000

disbuf[3] = temp%1000/100

disbuf[4] = temp%100/10

disbuf[5] = temp%10

display()

delay(1)

}

}

位选和段选的程序,是根据锁存器的工作原理来编的

一般的锁存器如74LS373或森宴573是在锁存引脚高电平时,8个输入端和8个输出端直此蔽银通,在下降沿时数据被锁存,所以程序中每送一次数据就有

 wela=1

wela=0

或 dula=1

 dula=0

由于是动态扫描,并亮实际上是一位一位轮换显示,所以每次数码管只亮一个

如 P0=0xbf 化成二进制1011 1111


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12339126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存