单片机时钟制作主程序.docx

上传人:b****6 文档编号:3731641 上传时间:2022-11-25 格式:DOCX 页数:16 大小:16.72KB
下载 相关 举报
单片机时钟制作主程序.docx_第1页
第1页 / 共16页
单片机时钟制作主程序.docx_第2页
第2页 / 共16页
单片机时钟制作主程序.docx_第3页
第3页 / 共16页
单片机时钟制作主程序.docx_第4页
第4页 / 共16页
单片机时钟制作主程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机时钟制作主程序.docx

《单片机时钟制作主程序.docx》由会员分享,可在线阅读,更多相关《单片机时钟制作主程序.docx(16页珍藏版)》请在冰豆网上搜索。

单片机时钟制作主程序.docx

单片机时钟制作主程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitlcd_rs=P3^5;

sbitlcd_e=P3^6;

sbitlcd_bla=P3^7;

sbitfm=P2^5;

sbitds_ds=P3^1;

sbitds_rw=P3^2;

sbitds_as=P3^0;

sbitds_cs=P3^4;

sbitio=P2^4;

sbits1=P2^3;

sbits2=P2^2;

sbits3=P2^1;

sbits4=P2^0;

sbitinti1=P3^3;

ucharsec,alm_sec,min,alm_min,hors,alm_hors,day,date,mon,year,tg,ts,tb,tx,a;

uintt;

ucharflag,s4flag,s2flag,s2flag2;

bitb;

/**************报警30秒******************/

voidfm_bibi()

{

ucharii=25;

while(ii--)

{

fm=0;

delay_ms(60);

fm=1;

delay_ms(50);

fm=0;

delay_ms(150);

fm=1;

delay_ms(700);

if((s4==0)||(s3==0)||(s2==0)||(s1==0))

ii=0;

}

}

/***********第一次上电时初始化时间******************

voidset_sdtime()

{

ds_write_date(0,40);//秒

ds_write_date(1,0);//秒闹铃

ds_write_date(2,11);//分

ds_write_date(3,0);//分闹铃

ds_write_date(4,07);//小时

ds_write_date(5,0);//小时闹铃

ds_write_date(6,5);//星期

ds_write_date(7,27);//日

ds_write_date(8,4);//月

ds_write_date(9,12);//年

}*/

voidxianshi_t()

{

if(flag==0)

{

if((t<1000)&&(t>=100))

{

lcdwrite_com(0x80+0x40+10);

lcdwrite_dat(table4[t/100]);//温度十位

lcdwrite_dat(table4[t%100/10]);//温度个位

lcdwrite_dat(0x2e);//小数点

lcdwrite_dat(table4[t%10]);//温度小数点后一位

lcdwrite_dat(0xdf);//°C符号

lcdwrite_dat(0x43);

}

if((t<100)&&(t>=0))

{

lcdwrite_com(0x80+0x40+11);

lcdwrite_dat(table4[t/10]);//温度个位

lcdwrite_dat(0x2e);//小数点

lcdwrite_dat(table4[t%10]);//温度小数点后一位

lcdwrite_dat(0xdf);//°C符?

lcdwrite_dat(0x43);

}

}

else

{

if((t<1000)&&(t>=100))

{

lcdwrite_com(0x80+0x40+9);

lcdwrite_dat(0x2d);//负号

lcdwrite_dat(table4[t/100]);//温度十位

lcdwrite_dat(table4[t%100/10]);//温度个位

lcdwrite_dat(0x2e);//小数点

lcdwrite_dat(table4[t%10]);//温度小数点后一位

lcdwrite_dat(0xdf);//°C符号

lcdwrite_dat(0x43);

}

if((t<100)&&(t>=0))//负十度到零度

{

lcdwrite_com(0x80+0x40+10);

lcdwrite_dat(0x2d);//负号

lcdwrite_dat(table4[t/10]);//温度个位

lcdwrite_dat(0x2e);//小数点

lcdwrite_dat(table4[t%10]);//温度小数点后一位

lcdwrite_dat(0xdf);//°C符号

lcdwrite_dat(0x43);

}

}

}

/***************键盘扫描*******************/

voidkey()

{

if(s4==0)

{

lcd_bla=1;//开背光

delay_ms(5);

if(s4==0)

{

flag=1;

while(!

s4);

s4flag++;

}

}

if(s4flag==1)

{

if(s2flag==0)

{

lcdwrite_com(0x0f);//显示光标

lcdwrite_com(0x80+5);

if(s3==0)//调年

{

delay_ms(5);

if(s3==0)

while(!

s3);

year++;

if(year==21)

year=10;

write_lcdnyr(4,year);

}

}

if(s2==0)

{

delay_ms(5);

if(s2==0)

{

while(!

s2);

s2flag++;

if(s2flag==7)

s2flag=0;

}

}

if(s2flag==1)//调月

{

lcdwrite_com(0x80+8);

if(s3==0)

{

delay_ms(5);

if(s3==0)

while(!

s3);

mon++;

if(mon==13)

mon=1;

write_lcdnyr(7,mon);

}

}

elseif(s2flag==2)//调日

{

lcdwrite_com(0x80+11);

if(s3==0)

{

delay_ms(5);

if(s3==0)

while(!

s3);

date++;

if(date==32)

date=1;

write_lcdnyr(10,date);

}

elseif(s2flag==3)//调星期

{

lcdwrite_com(0x80+13);

if(s3==0)

{

delay_ms(5);

if(s3==0)

while(!

s3);

day++;

if(day==8)

day=1;

write_lcdday(13,day);

}

}

elseif(s2flag==4)//调时

{

lcdwrite_com(0x80+0x40+1);

if(s3==0)

{

delay_ms(5);

if(s3==0)

while(!

s3);

hors++;

if(hors==24)

hors=0;

write_lcdsfm(0,hors);

}

}

elseif(s2flag==5)//调分

{

lcdwrite_com(0x80+0x40+4);

if(s3==0)

{

delay_ms(5);

if(s3==0)

while(!

s3);

min++;

if(min==60)

min=0;

write_lcdsfm(3,min);

}

}

elseif(s2flag==6)//调秒

{

lcdwrite_com(0x80+0x40+7);

if(s3==0)

{

delay_ms(5);

if(s3==0)

/************读取18b20寄存器中的温度数据****************************/

intred18b02t()

{

floattt;

uchart1,t2,f;

init18b20();//初始化

delay_ms

(2);

write_18byte(0xcc);//跳过读ROM指令

write_18byte(0x44);//启动温度转换

init18b20();//初始化

delay_ms

(2);

write_18byte(0xcc);//跳过读ROM指令

write_18byte(0xbe);//读取温度寄存器,共九个前两个就是

t1=red_18byte();

t2=red_18byte();

//t1=0x90;//测试使用

//t2=0xfc;

f=t2;

f>>=3;

if(f==0x1f)

{

flag=1;

t=t2;

t<<=8;

t=t|t1;

t=~t+1;

tt=t*0.0625;

t=tt*10+0.5;

}

else

{

flag=0;

t=t2;

t<<=8;

t=t|t1;

tt=t*0.0625;

t=tt*10+0.5;

}

returnt;

}

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

while(!

s3);

sec++;

if(sec==60)

sec=0;

write_lcdsfm(6,sec);

}

}

}

elseif(s4flag==2)

{

if(a==0)

{

read_alm();

lcdwrite_com(0x01);

lcdwrite_com(0x0c);

lcdwrite_com(0x80+2);

write_lcdsfm(-0x40+2,alm_hors);

lcdwrite_dat(0x3a);

write_lcdsfm(-0x40+5,alm_min);

lcdwrite_dat(0x3a);

write_lcdsfm(-0x40+8,alm_sec);

if(ds_read_date(0xb)<0x20)

{

lcdwrite_dat(0x20);//以下四行显示OFF.

lcdwrite_dat(0x4f);

lcdwrite_dat(0x46);

lcdwrite_dat(0x46);

}

else

{

lcdwrite_dat(0x20);

lcdwrite_dat(0x4f);//以下三行显示ON.

lcdwrite_dat(0x4e);

lcdwrite_dat(0x20);

}

a=1;

}

if(s2==0)

{

delay_ms(5);

if(s2==0)

{

while(!

s2);

s2flag2++;

if(s2flag2==5)

s2flag2=1;

}

}

if(s2flag2==1)

{

lcdwrite_com(0x0f);//显示光标

lcdwrite_com(0x80+14);

if(s3==0)//调定时开关

{

delay_ms(5);

if(s3==0)

while(!

s3);

b=~b;

if(b==1)//b=1时显示ON.

{

lcdwrite_com(0x80+11);

lcdwrite_dat(0x4f);//以下三行显示ON.

lcdwrite_dat(0x4e);

lcdwrite_dat(0x20);

}

else//b=0时显示OFF.

{

lcdwrite_com(0x80+11);

lcdwrite_dat(0x4f);//以下三行显示OFF.

lcdwrite_dat(0x46);

lcdwrite_dat(0x46);

}

}

}

elseif(s2flag2==2)

{

lcdwrite_com(0x80+9);

if(s3==0)//调定时秒

{

delay_ms(5);

if(s3==0)

while(!

s3);

alm_sec++;

if(alm_sec==60)

alm_sec=0;

write_almlcdsfm(8,alm_sec);

lcdwrite_com(0x80+8);

}

}

elseif(s2flag2==3)

{

lcdwrite_com(0x80+6);

if(s3==0)//调定时分

{

delay_ms(5);

if(s3==0)

while(!

s3);

alm_min++;

if(alm_min==60)

alm_min=0;

write_almlcdsfm(5,alm_min);

lcdwrite_com(0x80+5);

}

}

elseif(s2flag2==4)

{

lcdwrite_com(0x80+3);

if(s3==0)//调定时时

{

delay_ms(5);

if(s3==0)

while(!

s3);

alm_hors++;

if(alm_hors==24)

alm_hors=0;

write_almlcdsfm(2,alm_hors);

lcdwrite_com(0x80+2);

}

}

}

elseif(s4flag==3)

{

a=0;

flag=0;

s4flag=0;

s2flag2=0;

s2flag=0;

lcdwrite_com(0x0c);//关闭光标

lcd_bla=0;//关背光

ds_write_date(0,sec);//秒

ds_write_date(1,alm_sec);//秒闹铃

ds_write_date(2,min);//分

ds_write_date(3,alm_min);//分闹铃

ds_write_date(4,hors);//小时

ds_write_date(5,alm_hors);//小时闹铃

ds_write_date(6,day);//星期

ds_write_date(7,date);//日

ds_write_date(8,mon);//月

ds_write_date(9,year);//年

if(b==1)//b=1时,开定时中断,否则关定时中断。

ds_write_date(0x0b,0x26);

else

ds_write_date(0x0b,0x06);

}

}

/************开外部中断1******************/

voidint_1()

{

EX1=1;

IT1=0;

EA=1;

}

/**************外部中断1函数******************/

voidinit()interrupt2

{

uchara;

a=ds_read_date(0x0c);//读寄存器C,清除告警

fm_bibi();//蜂鸣器响

}

/******************主函数******************/

voidmain()

{

int_1();

dsinit();//第一次上电时初始化ds12cr887

lcdinit();

lcd_bla=0;

while

(1)

{

key();

if(flag==0)

{

read_dstime();//读ds12cr887时间

write_lcdnyr(2,20);//实时写入20

write_lcdnyr(4,year);//实时写入年

lcdwrite_dat(0x2d);//写入—

write_lcdnyr(7,mon);//实时写入月

lcdwrite_dat(0x2d);//写入—

write_lcdnyr(10,date);//实时写入日

lcdwrite_dat(0x20);//写入空格

write_lcdday(13,day);//实时写入星期

lcdwrite_dat(0x20);//写入空格

write_lcdsfm(0,hors);//实时写入时

lcdwrite_dat(0x3a);//写入冒号

write_lcdsfm(3,min);//实时写入分

lcdwrite_dat(0x3a);//写入冒号

write_lcdsfm(6,sec);//实时写入秒

if((sec%10)==0)//隔10秒读一次温度

{

red18b02t();

xianshi_t();//显示温度

}

if((s3==0)||(s2==0)||(s1==0))//按下s3或s2或s1时开背光

lcd_bla=1;

if((sec%10)==0)//10秒钟后关背光

lcd_bla=0;

}

}

}

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1