单片机c51数字时钟带年月日显示Word文档下载推荐.docx

上传人:b****4 文档编号:7174206 上传时间:2023-05-08 格式:DOCX 页数:14 大小:237.97KB
下载 相关 举报
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第1页
第1页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第2页
第2页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第3页
第3页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第4页
第4页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第5页
第5页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第6页
第6页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第7页
第7页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第8页
第8页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第9页
第9页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第10页
第10页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第11页
第11页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第12页
第12页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第13页
第13页 / 共14页
单片机c51数字时钟带年月日显示Word文档下载推荐.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机c51数字时钟带年月日显示Word文档下载推荐.docx

《单片机c51数字时钟带年月日显示Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机c51数字时钟带年月日显示Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。

单片机c51数字时钟带年月日显示Word文档下载推荐.docx

灭灯 

n

sbitled_duan=P2^6;

//段选通

sbitled_wei=P2^7;

//位选通

sbitspeaker=P2^3;

//蜂鸣器

sbitminitek=P3^0;

//分校正按键

sbithourk=P3^1;

//小时校正按键

sbitp3_4=P3^4;

//

sbityeark=P3^5;

//年

sbitmonthk=P3^6;

//月

sbitdayk=P3^7;

//日

uchardatawei,i;

bitleap_year;

//闰年标志位

bitdis_nyr;

bitcal_year=1;

bitcalculate=1;

//显示 

年月日与当前时间切换标志

uchardatac_min;

//闹钟‘分寄存单元

uchardatac_hou;

//闹钟、小时寄存单元

uchardatasecond;

//秒

uchardataminite;

//分变量

uchardatahour;

//小时变量

uchardatayear,month,day;

//定义年月日变量

uchardataCNTA;

uchardataspeaker_num;

//蜂鸣次数

bitbeep;

//整点报时标志

bitrun;

//运行标志

bitflash;

//灭灯标志

bitclarm_switch;

//闹钟开关标志

bitbaoshi;

//报时开关标志

sbitled1=P1^6;

// 

按键标识指示灯

sbitled2=P1^7;

//运行标志指示灯

sbitP3_2=P3^2;

sbitP3_3=P3^3;

uintn,k;

/*10微秒级延时*/

voiddelay_10us(ucharn) 

{do

{_nop_();

_nop_();

}while(--n);

}

/***毫秒级延时***/

voiddelay_ms(uintn) 

{dodelay_10us(131);

while(--n);

/******当前时间转换******/

clk_to_dis()

{

dis[0]=second%10;

dis[1]=second/10;

if(flash)dis[2]=10;

elsedis[2]=11;

dis[3]=minite%10;

dis[4]=minite/10;

dis[5]=hour%10;

dis[6]=hour/10;

/*****定时闹钟显示译码(用于七段码显示)*****/

clarm_to_dis()

dis[0]=c_min%10;

dis[1]=c_min/10;

//亮灯

//灭灯

dis[3]=c_hou%10;

dis[4]=c_hou/10;

dis[5]=10;

dis[6]=13;

/***********年月日显示译码************/

nyr_to_dis()

dis[0]=day%10;

dis[1]=day/10;

dis[2]=10;

'

-'

dis[3]=month%10;

dis[4]=month/10;

//'

dis[6]=year%10;

dis[7]=year/10;

/*主函数*/

voidmain()

P2=0xff;

P1=0XFF;

p3_4=0;

run=1;

led2=0;

//运行指示灯亮

led1=1;

flash=0x00;

//第三位显示“-”

wei=0x7f;

//选通低位

i=0;

second=21;

minite=58;

hour=9;

CNTA=0x00;

year=10;

month=4;

day=5;

clk_to_dis();

TMOD=0x11;

TH0=15560/256;

TL0=15560%256;

TH1=0xfc;

TL1=0x18;

EA=1;

PT0=1;

EX0=1;

//开中断;

EX1=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

while

(1)

{while(run==1)

if(calculate)

if(month==1|month==3|month==5|month==7|month==8|month==10|month==12)

{day++;

if(day>

31){day=0x01;

month++;

if(month==13){month=1;

year++;

cal_year=1;

}}

led1=0;

//指示灯亮

}

if(month==4|month==6|month==9|month==11)

{

day++;

if(day>

30){day=0x01;

led1=0;

//指示灯亮

if(month==2){ 

if(leap_year==1)

if(day==30)day=1;

else{day++;

if(day==29)day=1;

while(cal_year)

{

if((year+2000)%400==0)leap_year=1;

被400整除为闰年

elseif((year+2000)%100==0)leap_year=0;

不能被400整除能被100整除不是闰年

elseif((year+2000)%4==0) 

leap_year=1;

不能被400、100整除能被4整除是闰年

elseleap_year=0;

cal_year=0;

calculate=0;

while(!

minitek)

for(n=0;

n<

1000;

n++);

if(!

minitek==0)break;

//延时防抖

minite++;

second=0x00;

20;

n++)

speaker=!

speaker;

delay_10us(50);

//蜂鸣器响

if(minite==60)minite=0x00;

minitek);

//等待键松开

//显示灯 

while(!

hourk)

hourk==0)break;

hour++;

30;

speaker=!

delay_10us(30);

if(hour==24)hour=0x00;

hourk);

yeark) 

//yeark键复用进入年月日调整

yeark==0)break;

dis_nyr=1;

yeark);

while(dis_nyr)

nyr_to_dis();

yeark)

monthk)

monthk==0)break;

if(month==13)month=1;

monthk);

dayk)

dayk==0)break;

31)day=0x01;

//指示灯亮

30)day=0x01;

//指示灯亮

dayk);

{for(n=0;

if(hourk)break;

dis_nyr=0;

if(clarm_switch)dis[7]=12;

//开启显示 

C

elsedis[7]=11;

//关闭不显示 

dis[6]=11;

clk_to_dis();

if(clarm_switch) 

//闹铃时间到,指示灯闪烁蜂鸣器长响

if(c_min==minite&

&

c_hou==hour)

{speaker_num=60;

beep=1;

while(beep&

clarm_switch)

led1=!

led1;

delay_ms(100);

beep=0;

while(run==0) 

//闹钟时间设定

clarm_to_dis();

/////////////////////////////////////////////////////////// 

//延时防抖

c_min++;

//蜂鸣器响

if(c_min==60)c_min=0x00;

c_hou++;

if(c_hou==24)c_hou=0x00;

/***************定时器T0中断*****************/

timer0()interrupt1using2 

//定时器0中断号为1号使用第2组寄存器

{TR1=0;

TH0=15548/256;

TL0=15548%256;

CNTA++;

if(beep)

{

if(speaker_num%2)speaker=!

speaker_num)beep=0;

if(CNTA==20)

if(speaker_num)speaker_num--;

//每秒整点报时次数减一

flash=!

flash;

CNTA=0;

second++;

//秒加

if(second==60)

{second=0;

minite++;

if(minite==60)

minite=0;

if(hour>

7){speaker_num=2*hour;

//整点到设定报时次数 

蜂鸣标志 

置1

beep=1;

if(hour==24)

hour=0;

calculate=1;

//0点到,日期标志加一

/*********定时器中断T1**********/

timer1()interrupt3using3

TH1=0xfc;

P0=0xff;

led_wei=1;

led_wei=0;

P0=seg[dis[i]];

led_duan=1;

led_duan=0;

P0=wei;

if(++i==8)i=0;

wei=_cror_(wei,1);

/**********************外中断0*******************/

int_0()interrupt0 

clarm_switch=!

clarm_switch;

//闹钟开关

//开启显示 

开启第一位显示C 

//关闭不显示 

for(k=0;

k<

40;

k++)

{speaker=!

delay_ms(5);

/********************外中断1********************/

int_1()interrupt2 

//闹钟时间设置/运行转换开关 

run=!

run;

if(run)led2=0;

elseled2=1;

for(k=0;

90;

k++) 

//蜂鸣器响

//指示灯闪烁

delay_10us(100);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2