用51单片机编写时钟程序

1、用51 单片机为控制芯片,制作简易时钟:
基本要求:
1)显示日期、闹钟、时间
2)可用按键设置1)中的任何一项
扩展要求:
1)可通过串口对基本要求1)中三项进行设置
2)具有掉电保护功能(用24C08 保存掉电前的数据)

第1个回答  2010-08-04
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P3^4;
sbit rs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
uchar num,count,s1num;
uchar code table[]=" 2007-7-30 MON";
uchar code table1[]=" 00:00:00 ";
char shi,fen,miao;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcden=0;
rs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;

}
void write_date(uchar date)
{
lcden=0;
rs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;

}
void init()
{
wela=0;
dula=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<13;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0X80+0X40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1);
s1num++;
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10) ;
write_com(0x0f);
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+7);
}
if(s1num==4)
{
s1num=0;
TR0=1;
write_com(0x0c);

}
}
}
if(!s1num)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}

}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}

}
}
}

}
void main()
{
init();
while(1)
{
keyscan();
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);

}
write_sfm(7,fen);
}
write_sfm(10,miao);
}
}本回答被提问者采纳
第2个回答  2010-08-04
网上到处都是耶!

学生看过来,教你51单片机和RTC模块构建实时时钟
51单片机与RTC模块构建实时时钟详解学生,让我们一起学习如何在8051微控制器上利用RTC模块(如DS1307)创建一个精准的实时时钟系统。首先,DS1307是一个常见的RTC模块,通过I2C协议与8051(比如Atmel的AT89S52)连接,只需两根引脚进行简单连接。实时时钟模块负责跟踪时间和日期,DS1307具有设置警报功能。特别的...

51单片机设计数码管显示时钟的程序怎么写
include<reg51.h>#define uchar unsigned charuchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};\/\/0-9unsigned char sec=0,min=0,hour=12,scanled;unsigned char key,flashbit,mode,time; unsigned char disdat[8];sbit led=P1^0;void delay(unsigne...

基于51单片机的数字电子钟万年历闰年判断闹钟整点报时设计
系统主要由51单片机、DS1302时钟芯片、按键模块、LCD1602显示以及电源构成。AT89C51单片机拥有4k字节的Flash闪存、128字节的RAM、32个I\/O口线、两个16位定时\/计数器等功能。仿真图中AT89C51可替换为AT89C52或STC89C51\/STC89C52,实际应用中需添加电源模块。程序使用Keil4\/Keil5打开,生成hex文件后加载到单片机中...

急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言...
void delayms(unsigned char ms);\/\/延时程序bit lcd_busy();\/\/测试LCD忙碌状态程序void lcd_wcmd(char cmd);\/\/写入指令到LCD程序void lcd_wdat(char dat);\/\/写入数据到LCD程序void lcd_pos(char pos);\/\/LCD数据指针位置程序void lcd_init();\/\/LCD初始化设定程序void pro_timedate();\/\/时间日期处理程序v...

数字时钟C语言设计.用的是51单片机。 00 秒 00 分 00 小时 还有小数点...
我这写了一个!使用数码管显示的!可以用键盘校对时间!你参考下。还写了一个液晶显示的!你要的话也可以发给你!include<reg52.h> define uchar unsigned char define uint unsigned int sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^2;uchar table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x...

51单片机时钟程序,C语言,汇编都行
Set_RTC(); \/\/写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽 while(1){ if(ReadRTC_Flag){ ReadRTC_Flag=0;Read_RTC();l_tmpdisplay[0]=l_tmpdate[2]\/16; \/\/数据的转换,因我们采用数码管0~9的显示,将数据分开 l_tmpdisplay[1]=l_tmpdate[2]&0x...

51单片机做数字电子钟
 画出程序流程图,编写程序,硬件连接调试,直至正确。 编写课程设计报告。 3、给定条件 在Dais-52PH+单片机实验箱中,有一片8155芯片用于扩展3×3键盘,还具有6位LED数码显示器,可分别用于按键和显示控制。 在PC机上调试可使用MCS51仿真开发系统。 数字电子钟的工作过程为:从00:00:00(时:分:秒)开始计时,...

求一个51单片机定时闹钟程序。要C语言。能够调时间
我来发一个C语言51单片机时钟程序,希望能帮到你 \/* 程序功能:带定时闹铃时钟 *\/ \/*---*\/ include <AT89X51.H> \/*包含器件配置文件*\/ define uchar unsigned char define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};\/*...

51单片机时钟程序设计
朋友以下是本人历时一个月殚精竭虑自主开发的一个8位51单片机时钟程序,望吾之兄弟姐妹习之,此程序乃采用一键控制,通过感知按下键持续时间的长短来进行调整时间,闹铃,6只共阳数码管输出显示,此外还包括整点铃声功能,在看程序之前我先交代一下运行该程序的硬件要求:12M晶振,P0端口驱动显示,P2.0...

用51单片机实现时钟功能程序???
;DISPLAY子程序 DISPLAY:PUSHACC;不能写A,此处ACC代表地址,push后跟地址,代表把地址内的内容压入栈中 PUSH00H;R0 PUSH06H;R6 PUSH07H;R7 PUSH83H;DPH PUSH82H;DPL MOVR6,#01H;位选数据,01指的是缓冲区最低位数据 MOVR7,#08H;循环次数 FLAG:MOVduan,#0x00;消影 MOVA,R6 CPLA;取反 MOV...

相似回答