用两个74HC164驱动两个四位的数码管.docx

上传人:b****4 文档编号:3318099 上传时间:2022-11-21 格式:DOCX 页数:8 大小:106.87KB
下载 相关 举报
用两个74HC164驱动两个四位的数码管.docx_第1页
第1页 / 共8页
用两个74HC164驱动两个四位的数码管.docx_第2页
第2页 / 共8页
用两个74HC164驱动两个四位的数码管.docx_第3页
第3页 / 共8页
用两个74HC164驱动两个四位的数码管.docx_第4页
第4页 / 共8页
用两个74HC164驱动两个四位的数码管.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

用两个74HC164驱动两个四位的数码管.docx

《用两个74HC164驱动两个四位的数码管.docx》由会员分享,可在线阅读,更多相关《用两个74HC164驱动两个四位的数码管.docx(8页珍藏版)》请在冰豆网上搜索。

用两个74HC164驱动两个四位的数码管.docx

用两个74HC164驱动两个四位的数码管

用两个74HC164驱动两个四位的数码管~~(一个简易电子钟)

几天前我发一了帖寻求用两74HC164做动态扫描数码管~~~今天我折腾了一天终于把它难弄出来了~~~~~~

其电路图是在一本书上找到的~~由于还没学会用protel99画图,,所以就只有将就一下了

我的程序如下:

#include

sbitDAT=P1^1;

sbitCLK=P1^2;

unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//显示0~9

unsignedcharcodeff[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x77};//位选;

unsignedchara,b,c,d,e,f,ch,hour,minite,second;

//开启计时

voidloading()

{

TMOD=0x22;

TR0=1;

ET0=1;

EA=1;

}

以下是显示程序,共八个,因为有八个数码管;

voidsendbyte(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xfe;

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

{

CLK=0;

DAT=num;

CLK=1;

num<<=1;

}

}

voidsendbyte_1(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xfd;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_2(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xfb;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_3(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xf7;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_4(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xef;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_5(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xdf;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_6(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0xbf;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

voidsendbyte_7(unsignedcharbyte)

{

unsignedcharnum,c;

num=tab[byte];

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

num=0x7f;

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

{

CLK=0;

DAT=num&0x80;

CLK=1;

num<<=1;

}

}

//延时~~

voiddelay()

{

unsignedintj;

for(j=0;j<250;j++)

;

}

main()

{

loading();

while

(1)

{

a=hour/10;b=hour%10;

c=minite/10;d=minite%10;

e=second/10;f=second%10;

ch=10;

sendbyte(f);

delay();

sendbyte_1(e);

delay();

sendbyte_2(ch);

delay();

sendbyte_3(d);

delay();

sendbyte_4(c);

delay();

sendbyte_5(ch);

delay();

sendbyte_6(b);

delay();

sendbyte_7(a);

delay();

}

}

voidtime(void)interrupt1

{

unsignedinttt;

tt++;

if(tt==3600)

{

tt=0;

second++;

if(second==60)

{

second=0;

minite++;

if(minite==60)

{

minite=0;

hour++;

if(hour==24)

hour=0;

}

}

}

}

此程序还有很多不足~

希望单片机高手们来给我看一下~~~提一些好的建议吧~~

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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