51单片机 c语言写的电子时钟程序 请帮忙指正!

51单片机 c语言写的电子时钟程序 请帮忙指正!,第1张

单片机程序是基于硬件基础上开发的,你至少添加注释和硬件环境说明,不然大家都不知道怎么帮你。

你直接给出代码,也不清楚需要指正什么,这里也没有设置时间/闹钟的代码,发文前应该清楚表达要问的内容。

1)假设你的晶振是12MHz,那一个机器周期是1MHz,定时器的最长定时周期是(65535/10^6)你想要1/6秒触发一次中断就必须结合软件计时,为了尽量精确:硬件计时40000次,软件计时25次那么定时器的设这应该是TH1=(65535-40000)%256;TL1=(65535-40000)%256,(注意计数器大部分是加法计数)

2)按键监听没有给出思路,也没有处理按键抖动,我只能分析程序:

有一个外部中断触发时间设置,P34设置小时、P35设置分钟,但是调整时间后没有进行显示,你至少要让数码管显示结果才能知道怎么调整。

1、闹钟设置界面。

2、存储响闹时间。

3、时间中断,设置读取时间的flag

4、主程序中判断flag设置,读取时钟

5、比较当前时钟在响闹时间范围内,输出闹铃(如果是蜂鸣器,给他一个输出频率的信号)。

#include <at89x52h>

#include <DS1302h>

//定义共阳极字型码0123456789-

unsigned char code dispcode[]=;

unsigned char time[]=;//用来储存时间

unsigned char date[]=;//用来储存日期

unsigned char year[]=;//用来储存年份

unsigned char week[]=;//用来储存星期

SYSTEMTIME time1; //在ds1302h文件中已经定义了一个名字为SYSTEMTIME的结构体,在这里我们定义一个变量名

//为time的SYSTEMTIME结构体

void delay(unsigned char i) //延时子程序

{

unsigned char j;

while((i--)!=0)

{

for(j=123;j>0;j--);

}

}

unsigned char button_time(n,x,y) //时钟调整子程序

unsigned char n,x,y;

{

if(P1_7==0)

{

delay(50);

if(P1_7==0)

{

n++;

if(n==x)

n=0;

while(P1_7==0); //等待按键释放

}

}

if(P1_5==0)

{

delay(50);

if(P1_5==0)

{

if(n==0)

n=y;

else

n--;

while(P1_5==0);

}

}

return n;

}

unsigned char button_date(n,x,y) //日期调整子程序

unsigned char n,x,y;

{

if(P1_7==0)

{

delay(50);

if(P1_7==0)

{

n++;

if(n==x)

n=1;

while(P1_7==0);

}

}

if(P1_5==0)

{

delay(50);

if(P1_5==0)

{

if(n==1)

n=y;

else

n--;

while(P1_5==0);

}

}

return n;

}

unsigned char button_year(n,x,y) //年份调整子程序

unsigned char n,x,y;

{

if(P1_7==0)

{

delay(50);

if(P1_7==0)

{

n++;

if(n==x)

n=2;

while(P1_7==0);

}

}

if(P1_5==0)

{

delay(50);

if(P1_5==0)

{

if(n==2)

n=y;

else

n--;

while(P1_5==0);

}

}

return n;

}

void display(minute10,minute1,hour10,hour1) //显示子程序

unsigned char minute10,minute1,hour10,hour1;

{

P2=0xfe;

P0=dispcode[minute10];//显示分的十位

delay(1);

P2=0xfd;

P0=dispcode[minute1]; //显示分的个位

delay(1);

P2=0xfb;

P0=dispcode[hour10]; //显示时的十位

delay(1);

P2=0xf7;

P0=dispcode[hour1]; //显示时的个位

delay(1);

}

void display1(week1)

unsigned char week1;

{

P2=0xef;

P0=dispcode[week1];

delay(1);

}

void main()

{

unsigned char flag,aa=2,bb=0;

Initial_DS1302(); //初始化DS1302这个时钟芯片,

while(1)

{

DS1302_GetTime(&time1); //读取时间参数

time[3]=(time1Minute)%10; //把分的个位数据存入time[3]

time[2]=(time1Minute)/10; //把分的十位数据存入time[2]

time[1]=(time1Hour)%10; //把时的个位数据存入time[1]

time[0]=(time1Hour)/10; //把时的十位数据存入time[0]

date[3]=(time1Day)%10;

date[2]=(time1Day)/10;

date[1]=(time1Month)%10;

date[0]=(time1Month)/10;

year[1]=(time1Year)%10;

year[0]=(time1Year)/10;

week[0]=(time1Week);

display1(week[0]); //显示星期

if(P1_4==0) //如果按下Time Start键一下,时钟开始正常显示时间,再按一下,显示日期,再按一下,显示年份

{

delay(50);

if(P1_4==0)

{

flag++;

if(flag>2)

{

flag=0;

}

}

while(P1_4==0);

}

if(P1_6==0) //如果按下Time Set键一下,开始显示日期,再按一下开始显示年份,再按一下,进入年份,日期,星期和时间的调节模式

{

delay(50);

if(P1_6==0)

{

flag++;

if(flag>8)

{

flag=0;

}

}

while(P1_6==0);

}

switch(flag)

{

case 0:display(time[0],time[1],time[2],time[3]); //调用子函数display,把存入数组time的数据给显示出来

break;

case 1:display(date[0],date[1],date[2],date[3]); //调用子函数display,把存入数组date的数据给显示出来

break;

case 2:display(aa,bb,year[0],year[1]); //调用子函数display,把存入数组year的数据给显示出来

break;

case 3:time1Year=button_year(time1Year,2099,2098); //调整年

DS1302_SetTime(0x8c,time1Year);

display(aa,bb,year[0],year[1]);

break;

case 4:time1Month=button_date(time1Month,13,12); //调整月

DS1302_SetTime(0x88,time1Month);

display(date[0],date[1],10,10);

break;

case 5:time1Day=button_date(time1Day,32,31); //调整日

DS1302_SetTime(0x86,time1Day);

display(10,10,date[2],date[3]);

break;

case 6:time1Week=button_date(time1Week,8,7); //调整星期

DS1302_SetTime(0x8a,time1Week);

display1(week[0]);

break;

case 7:time1Hour=button_time(time1Hour,24,23); //调整时

DS1302_SetTime(0x84,time1Hour);

display(time[0],time[1],10,10);

break;

case 8:time1Minute=button_time(time1Minute,60,59); //调整分

DS1302_SetTime(0x82,time1Minute);

display(10,10,time[2],time[3]);

break;

}

}

}

以上就是关于51单片机 c语言写的电子时钟程序 请帮忙指正!全部的内容,包括:51单片机 c语言写的电子时钟程序 请帮忙指正!、基于msp430f149+ds1302+lcd1602的可调数字钟(带闹铃)的C语言程序,我现在程序已经写好了、c语言 提示时间 程序(带声音提示时间、就是闹铃)要在DOS在运行的。做好了加50分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10102309.html

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

发表评论

登录后才能评论

评论列表(0条)

保存