利用51单片机画时钟电路图。要求6位数码管,两位秒闪信号,必须能够进行调时间(键盘接口)具有闹钟功能。

6位数码管(时、分、秒各两位)

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//P0口共阳数码管0-9显示编码
uchar code port[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar count;
uchar sec;
uchar min;
uchar hou;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
void delay(uchar x)
{
uchar y,z;
for(y=x;y>0;y--)
for(z=248;z>0;z--);
}
void secdisplay()
{
P2=port[0];
P0=table[sec%10];
delay(2);
P2=port[1];
P0=table[sec/10];
delay(2);
P0=0xff;
}
void mindisplay()
{
P2=port[2];
P0=table[10];
delay(2);
P2=port[3];
P0=table[min%10];
delay(2);
P2=port[4];
P0=table[min/10];
delay(2);
P0=0xff;
}
void houdisplay()
{
P2=port[5];
P0=table[10];
delay(2);
P2=port[6];
P0=table[hou%10];
delay(2);
P2=port[7];
P0=table[hou/10];
delay(2);
P0=0xff;
}
void display()
{
secdisplay();
delay(1);
mindisplay();
delay(1);
houdisplay();
}
void main( )
{
TMOD=0x01;//定时器中断1
TH0=(65535-46083)/256;//初始化
TL0=(65535-46083)%256;
TR0=1;
ET0=1;
EA=1;//开总中断
sec=0;
min=0;
hou=0;
while(1)
{
display();
if(k5==0) //检测是否按下K5
{
display();
if(k5==0)
{

sec++;
if(sec==60)
{
sec=0;
}
display();
while(k5==0)
display();
}
}
if(k6==0) //检测是否按下K6
{

display();
if(k6==0)
{
min++;
if(min==60)
{
min=0;
}
display();
while(k6==0)
display();
}
}
if(k7==0) //检测是否按下K7
{
display();
if(k7==0)
{
hou++;
if(hou==24)
{
hou=0;
}
display();
while(k7==0)
display();
}
}
}
}
void time() interrupt 1
{
TH0=(65535-46083)/256;//初始化
TL0=(65535-46083)%256;
count++;
if(count==20)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hou++;
if(hou==24)
{
hou=0;
}
}
}

}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-22
单片机驱动数码管电路【使用三极管驱动数码管,数码管的每一位用一个三极管去驱动】,用一个单片机的比如p2.0~p2.5做时钟的六位选通,然后用p3.0~p3.6做数码管的七段。

dzkfw 电子开发网本回答被网友采纳
第2个回答  2012-05-21
推荐一个电子技术导航网站给你吧!或许会对你学习电子技术有帮助------ 电子世家网址导航 。他分类收录了很多优秀的电子技术网站,你可以去逛逛的;特别是它里面的那些网站的论坛,有很多大虾分享的资料,你所提到的资料在里面因该可以找到的,不过遇到好的资料也可以下载回来以备不时只需啊!呵呵.......
第3个回答  2012-05-21
软件or硬件?追问

硬件