当前位置:文档之家› 基于51单片机的电子时钟设计源程序

基于51单片机的电子时钟设计源程序

unsigned char DisPlay_Back1=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致
unsigned char i,j; unsigned char SetMillisecond; //启动秒表
code unsigned char LEDCode[]={0x01,0xd7,0x22,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80}; //数码管显示代码
#include<reg51.h>
unsigned char DispBuf[6]; //时间显示缓冲区
unsigned char Disdate[6]; //日期显示缓冲区
unsigned char DisSec[6]; //秒表缓冲区
struct //设定时间结构体
{
unsigned char Hour;
{
DispBuf[2]=DispBuf[2]|0xff; //分钟熄灭
DispBuf[3]=ห้องสมุดไป่ตู้ispBuf[3]|0xff;
}
else
{
DispBuf[2]=DispBuf[2]&0xff; //分钟点亮
DispBuf[3]=DispBuf[3]&0xff;
};
if(Flash_flag & point==3) //更新秒钟
Time.Min=0;
Time.Sec=0;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
}
/******************************延时子程序*********************************************/
// Init初始化代码
//设定50ms中断一次,注:在Fosc=6M情况下
//****************************************************
void Init(void)
{
Date.Year=10;
Date.Month=12;
Date.Days=25;
Time.Hour=12;
void delay(unsigned int i)
{
char j;
for(i; i >0; i--)
for(j = 200; j > 0; j--);
}
//*******************************************
//主程序
//*******************************************
{
DispBuf[2]=DispBuf[2]|0x10;//双点熄灭
DispBuf[4]=DispBuf[4]|0x20;
}
else
{
DispBuf[2]=DispBuf[2]&0xef; //点亮双点
DispBuf[4]=DispBuf[4]&0xdf;
};
if(Flash_flag & point==1) //更新小时
main()
{
Init(); //初始化
for(;;)
{
if(DisPlay_Back!=Flash_flag) //是否显示?
{
DisPlay_Back=Flash_flag; //显示过后要半秒后再显示
ChangeToDispCode(); //转化时间为可显示代码
if(Flash_flag) //更新双点闪烁
{
DispBuf[4]=DispBuf[4]|0xff; //秒钟熄灭
DispBuf[5]=DispBuf[5]|0xff;
}
else
{
DispBuf[4]=DispBuf[4]&0xff; //秒钟点亮
{
DispBuf[0]=DispBuf[0]|0xff; //小时熄灭
DispBuf[1]=DispBuf[1]|0xff;
}
else
{
DispBuf[0]=DispBuf[0]&0xff; //小时点亮
DispBuf[1]=DispBuf[1]&0xff;
};
if(Flash_flag & point==2) //更新分钟
unsigned char Min;
unsigned char Sec;
}Time;
struct //设定日期结构体
{
unsigned char Year;
unsigned char Month;
unsigned char Days;
}Date;
struct //设定毫秒结构体
{
unsigned char Minite;
unsigned char T0_Int_Times=0; //中断次数计数变量
unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁
unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁
unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致
code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码
void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); voidchangedate(); //调日期
void displaydate(); //显示日期
void makedays(); //确定每个月的日期
void runSec();
void delay(unsigned int i); //函数声名
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
//***************************************************
unsigned char Second;
unsigned char MilliSec;
}Millisecond;
unsigned char point=0;
unsigned char point1=0;
unsigned char point2=0;
unsigned char Daymount;
unsigned char Daymount1;
相关主题