用两个74HC164驱动两个四位的数码管.doc用两个74HC164驱动两个四位的数码管.doc
用两个74HC164驱动两个四位的数码管~~(一个简易电子钟)
几天前我发一了帖寻求用两74HC164做动态扫描数码管~~~ 今天我折腾了一天终于把它难弄出来了~~~~~~
其电路图是在一本书上找到的~~由于还没学会用protel 99画图,,所以就只有将就一下了
我的程序如下:
#include
sbit DAT=P1^1;
sbit CLK=P1^2; unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0...
用两个74HC164驱动两个四位的数码管.doc
用两个74HC164驱动两个四位的数码管~~(一个简易电子钟)
几天前我发一了帖寻求用两74HC164做动态扫描数码管~~~ 今天我折腾了一天终于把它难弄出来了~~~~~~
其电路图是在一本书上找到的~~由于还没学会用protel 99画图,,所以就只有将就一下了
我的程序如下:
#include
sbit DAT=P1^1;
sbit CLK=P1^2; unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//
显示0~9
unsigned char code ff[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x77};//位选; unsigned char a,b,c,d,e,f,ch,hour,minite,second;
//开启计时
void loading()
{
TMOD=0x22;
TR0=1;
ET0=1;
EA=1;
}
以下是显示程序,共八个,因为有八个数码管;
void sendbyte(unsigned char byte) {
unsigned char num,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;
}
}
void sendbyte_1(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_2(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_3(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_4(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_5(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_6(unsigned char byte)
{
unsigned char num,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;
}
}
void sendbyte_7(unsigned char byte)
{
unsigned char num,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;
}
}
//延时~~
void delay()
{
unsigned int j;
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();
}
}
void time(void) interrupt 1
{
unsigned int tt;
tt++;
if(tt==3600)
{
tt=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
hour=0;
}
}
}
}
此程序还有很多不足~
希望单片机高手们来给我看一下~~~提一些好的建议吧~~
本文档为【用两个74HC164驱动两个四位的数码管.doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。