单片机制作数字钟(含万年历、秒表功能)

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

数字钟、万年历制作(基于单片机)

电路原理图:

程序://********************20131206****数字钟程序

#pragma SMALL

#include

#include

#include

//********************************************************* *********编译预处理

void display(unsigned char *p); //显示函数,P为显示数据首地址unsigned char keytest(); //按键检测函数

unsigned char search(); //按键识别函数

void alarm(); //闹钟判断启动函数

void ftion0(); //始终修改函数

void ftion1(); //闹钟修改函数

void ftion3(); //日期修改函数

void cum(); //加1修改函数

void minus(); //减1修改函数

void jinzhi(); //进制修改函数

void riqi(); //日期

void stopwatch(); //秒表函数

//********************************************************* *******函数声明

sbit P2_7=P2^7;

//********************************************************* *******端口定义

unsigned char clockbuf[3]={0,0,0};

unsigned char bellbuf[3]={0,0,0};

unsigned char date[3]={1,1,1}; //日期存放数组

unsigned char stop[3]={0,0,0};

unsigned char msec1,msec2;

unsigned char timdata,rtimdata,dtimdata;

unsigned char count;

unsigned char *dis_p;

unsigned char or; //12进制控制标志

unsigned char ri; //日期显示控制标志位

unsigned char mb; //秒表控制标志位

bit arm,rtim,rhour,rmin,hour,min,sec,day,mon,year; //定义位变量

//********************************************************* *****全局变量定义

void main()

{

unsigned char a;

or=0; //12进制修改标志清零

ri=0;

mb=0;

P2_7=0;

arm=0;

msec1=0;

msec2=0;

timdata=0;

rtimdata=0;

count=0;

TMOD=0x12;

TL0=0x06;

TH0=0x06;

TH1=(65536-10000)/256;

TL1=(65536-10000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=0;

dis_p=clockbuf;

while(1)

{

a=keytest();

if(a==0x78) //判断是否有键按下{

display(dis_p);

if(arm==1) alarm();

}

else

{

display(dis_p);

a=keytest();

if(a!=0x78)

{

a=search();

switch(a)

{

case 0x00:ftion0();break;

case 0x01:ftion1();break;

case 0x02:cum();break;

case 0x06:jinzhi();break;

case 0x03:riqi();break;

case 0x04:ftion3();break;

case 0x05:minus();break;

case 0x07:stopwatch();break;

case 0x09:TR1=1;break;

case 0x0a:TR1=0;break;

case 0x0b:stop[0]=0;stop[1]=0;stop[2]=0;break;

default:break;

}

}

}

}

}

//********************************************主函数【完】void display(unsigned char *p)

{

unsigned char buffer[]={0,0,0,0,0,0};

unsigned char k,i,j,m,temp;

unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

buffer[0]=p[0]/10;

buffer[1]=p[0]%10;

buffer[2]=p[1]/10;

buffer[3]=p[1]%10;

buffer[4]=p[2]/10;

buffer[5]=p[2]%10;

if((sec==0)&&(min==0)&&(hour==0)&&(rmin==0)&&(rhour==0)&&( day==0)&&(mon==0)&&(year==0)) //没有修改标志,正常显示{

for(k=0;k<3;k++)

{

temp=0x01;

for(i=0;i<6;i++)

{

P0=0x00; //段选端口

j=buffer[i];

P0=led[j];

相关文档
最新文档