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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

unsigned char DispBuf[6]; //时间显示缓冲区

unsigned char Disdate[6]; //日期显示缓冲区

unsigned char DisSec[6]; //秒表缓冲区

struct //设定时间结构体

{

unsigned char Hour;

unsigned char Min;

unsigned char Sec;

}Time;

struct //设定日期结构体

{

unsigned char Year;

unsigned char Month;

unsigned char Days;

}Date;

struct //设定毫秒结构体

{

unsigned char Minite;

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;

unsigned char T0_Int_Times=0; //中断次数计数变量

unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁

unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁

unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致

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}; //数码管显示代码

code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码

void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); void changedate(); // 调日期

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;

//***************************************************

// Init 初始化代码

// 设定50ms中断一次,注:在Fosc=6M情况下

//****************************************************

void Init(void)

{

Date.Year=10;

Date.Month=12;

Date.Days=25;

Time.Hour=12;

Time.Min=0;

Time.Sec=0;

TMOD=0x01;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

ET0=1;

EA=1;

}

/******************************延时子程序*********************************************/

void delay(unsigned int i)

{

char j;

for(i; i > 0; i--)

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

}

//*******************************************

// 主程序

//*******************************************

main()

{

Init(); //初始化

for(;;)

{

if(DisPlay_Back!=Flash_flag) //是否显示?

{

DisPlay_Back=Flash_flag; //显示过后要半秒后再显示

ChangeToDispCode(); //转化时间为可显示代码

if(Flash_flag) //更新双点闪烁

{

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) //更新小时

{

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) //更新分钟

{

DispBuf[2]=DispBuf[2]|0xff; //分钟熄灭

DispBuf[3]=DispBuf[3]|0xff;

}

else

{

DispBuf[2]=DispBuf[2]&0xff; //分钟点亮

DispBuf[3]=DispBuf[3]&0xff;

};

if(Flash_flag & point==3) //更新秒钟

{

DispBuf[4]=DispBuf[4]|0xff; //秒钟熄灭

DispBuf[5]=DispBuf[5]|0xff;

}

else

{

DispBuf[4]=DispBuf[4]&0xff; //秒钟点亮

DispBuf[5]=DispBuf[5]&0xff;

};

DisPlayBuf();//显示

}

if((P1&0x07)!=0x7) //按键处理模块模块{

delay(250);

相关文档
最新文档