求单片机大神给帮忙编一个带闹钟的电子时钟程序~

作业留的紧,自己也没有时间去好好研究,请大神帮个忙,用的是51单片机,感激不尽!我邮箱251249877@qq.com下面是要求:1.在4位数码管上显示当前时间。显示格式... 作业留的紧,自己也没有时间去好好研究,请大神帮个忙,用的是51单片机,感激不尽!我邮箱251249877@qq.com
下面是要求:
1. 在4 位数码管上显示当前时间。显示格式“时时分分”
2. 由LED 闪动做秒显示。
3. 利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发
出声响,按停止键使可使闹玲声停止。
展开
 我来答
黄石佳诚家电维修
2012-12-15 · TA获得超过1427个赞
知道小有建树答主
回答量:1559
采纳率:93%
帮助的人:599万
展开全部
#include <reg51.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit DS1302_SDA=P1^0;
sbit DS1302_SCK=P1^1;
sbit DS1302_RST=P1^2;
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit BEEP=P3^7;
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar Display_Buffer[]={0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00};
uchar Display_Buffer1[]={0x00,0x00,0xbf,0x00,0x00,0xbf,0x00,0x00};
uchar Bit_CODE[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar Current_Time[7];
uchar alarm_clock[7];
char Flag=0;
char T_OR_A=0;
uchar w=0,u=0,v;
void delay_ms(uint x)
{
uchar i;
while(x--)for(i=0;i<120;i++);
}
void WriteAByteToDS1302(uchar x)
{
uchar i;
for(i=0;i<8;i++)
{
DS1302_SDA=x&0x01;
DS1302_SCK=1;
DS1302_SCK=0;
x>>=1;
}
}
uchar GetAByteFromDS1302(void)
{
uchar i,b=0X00,t;
for(i=0;i<8;i++)
{
b>>=1;
t=DS1302_SDA;
b|=t<<7;
DS1302_SCK=1;
DS1302_SCK=0;
}
return (b/16*10+b%16);
}
void ResetDS1302(void)
{
DS1302_RST=0;
DS1302_SCK=0;
DS1302_RST=1;
}
uchar ReadData(uchar addr)
{
uchar dat;
ResetDS1302();
WriteAByteToDS1302(addr);
dat=GetAByteFromDS1302();
DS1302_SCK=0;
DS1302_RST=0;
return dat;
}
void WriteDS1302(uchar addr,uchar dat)
{
ResetDS1302();
WriteAByteToDS1302(addr);
WriteAByteToDS1302(dat);
DS1302_SCK=0;
DS1302_RST=0;
}
void SetDS1302(void)
{
uchar i;
WriteDS1302(0x8e,0x00);
for(i=0;i<7;i++)
{
WriteDS1302(0x80+i*2,(Current_Time[i]/10<<4)|(Current_Time[i]%10));
}
WriteDS1302(0x8e,0x80);
}
void GetTime(void)
{
uchar i,addr=0x81;
for(i=0;i<7;i++)
{
Current_Time[i]=ReadData(addr);
addr+=2;
}
}
void time0Init(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void ScanKey(void)
{
if(KEY1==0)
{
delay_ms(10);
if(KEY1==0);
{
while(!KEY1);
w=w++;
if(w==5)w=1;
switch(w)
{
case 1:Flag=1;break;
case 2:Flag=1; break;
case 3:Flag=1; break;
case 4:SetDS1302();
Flag=0;
break;
}
}
}
if(w!=0)
{
if(KEY2==0)
{
delay_ms(10);
if(KEY2==0)
{
while(!KEY2);
switch(w)
{
case 1:Current_Time[0]++;break;
case 2:Current_Time[1]++;break;
case 3:Current_Time[2]++;break;
}
}
}
if(KEY3==0)
{
delay_ms(10);
if(KEY3==0)
{
while(!KEY3);
switch(w)
{
case 1:Current_Time[0]--;break;
case 2:Current_Time[1]--;break;
case 3:Current_Time[2]--;break;
}
}
}
}
if(KEY4==0)
{
delay_ms(10);
if(KEY4==0)
{
while(!KEY4);
u++;
if(u==5)u=1;
switch(u)
{
case 1:T_OR_A=1;
break;
case 2:break;
case 3:break;
case 4:T_OR_A=0;break;
}
}
}
if(u!=0)
{
if(KEY2==0)
{
delay_ms(10);
if(KEY2==0)
{
while(!KEY2);
switch(u)
{
case 1:alarm_clock[0]++;break;
case 2:alarm_clock[1]++;break;
case 3:alarm_clock[2]++;break;
}
}
}
if(KEY3==0)
{
delay_ms(10);
if(KEY3==0)
{
while(!KEY3);
switch(u)
{
case 1:alarm_clock[0]--;break;
case 2:alarm_clock[1]--;break;
case 3:alarm_clock[2]--;break;
}
}
}
}
}
void Play(uchar t)
{
uchar i;
for(i=0;i<100;i++)
{
BEEP = ~BEEP;
delay_ms(t);
}
BEEP = 0;
}
void main(void)
{
//uchar i;
SetDS1302();
time0Init();
//GetTime();
while(1)
{
if(Flag==0)
GetTime();
Display_Buffer[0]=DSY_CODE[Current_Time[2]/10];
Display_Buffer[1]=DSY_CODE[Current_Time[2]%10];
Display_Buffer[3]=DSY_CODE[Current_Time[1]/10];
Display_Buffer[4]=DSY_CODE[Current_Time[1]%10];
Display_Buffer[6]=DSY_CODE[Current_Time[0]/10];
Display_Buffer[7]=DSY_CODE[Current_Time[0]%10];
//Display_Buffer[0]=DSY_CODE[Current_Time[2]/10];
ScanKey();
/*for(i=0;i<8;i++)
{
P2=Bit_CODE[i];
P0=Display_Buffer[i];
delay_ms(2);
}*/
Display_Buffer1[0]=DSY_CODE[alarm_clock[2]/10];
Display_Buffer1[1]=DSY_CODE[alarm_clock[2]%10];
Display_Buffer1[3]=DSY_CODE[alarm_clock[1]/10];
Display_Buffer1[4]=DSY_CODE[alarm_clock[1]%10];
Display_Buffer1[6]=DSY_CODE[alarm_clock[0]/10];
Display_Buffer1[7]=DSY_CODE[alarm_clock[0]%10];
if((Current_Time[2]==alarm_clock[2])&&(Current_Time[1]==alarm_clock[1])&&(Current_Time[0]==alarm_clock[0]))
Play(1);
}
}
void tiemr0() interrupt 1
{
//if(flag1) j++;
uchar i,j;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(T_OR_A==0)
{
for(i=0;i<8;i++)
{
P2=Bit_CODE[i];
P0=Display_Buffer[i];
delay_ms(2);
}
}
else
{
for(j=0;j<8;j++)
{
P2=Bit_CODE[j];
P0=Display_Buffer1[j];
delay_ms(2);
}
}
}
可调,并带闹钟,你参考一下,
夏木之叶
2012-12-15 · TA获得超过120个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:30.7万
展开全部
我有一份,C语言的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1fb3073
2012-12-16
知道答主
回答量:9
采纳率:0%
帮助的人:3.6万
展开全部
交大的么。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式