久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于51單片機(jī)的數(shù)字鬧鐘程序
[打印本頁(yè)]
作者:
heicad
時(shí)間:
2016-3-11 20:46
標(biāo)題:
基于51單片機(jī)的數(shù)字鬧鐘程序
#include<reg52.h> //頭文件
#include<intrins.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
//位定義
sbit rs=P2^5; //液晶位定義
sbit lcden=P2^7;
sbit s1=P2^0; //時(shí)間功能切換按鍵
sbit s2=P2^1; //按鍵加
sbit s3=P2^3; //按鍵減
sbit s4=P2^4; //鬧鐘功能切換鍵
sbit rst=P1^5; //ds1302引腳定義
sbit io=P1^6;
sbit sclk=P1^7;
sbit beep=P3^0; //蜂鳴器
uchar num,count,shi,fen,miao,s1num,s2num,
year,month,day,week,flag,flag1,year1,month1,
day1,week1,shi1,fen1,miao1,year2,month2,
day2,week2,shi2,fen2,miao2,year5,month5,
day5,week5,shi5,fen5,miao5,wk,ashi,afen; //參數(shù)定義
uchar code table[]="20 - - "; //液晶固定顯示
uchar code table1[]=" : : 00:00";
/*
uchar time_dat[7]={12,1,6,6,12,59,59}; //年周月日時(shí)分秒
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
*/
void write_com(uchar com); //液晶寫指令函數(shù)
void write_data(uchar date); //液晶寫數(shù)據(jù)函數(shù)
void write_ds1302(uchar add,uchar dat); //ds1302芯片寫指令函數(shù)
void set_rtc(); //ds1302時(shí)間設(shè)置函數(shù)
void time_pros(); //ds1302進(jìn)制轉(zhuǎn)換函數(shù)
void read_rtc(); //ds1302讀時(shí)間函數(shù)
void alarm(); //鬧鐘函數(shù)
void delay(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化
{
lcden=0;
flag=0;
flag1=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80); //液晶固定顯示,第一行
for(num=0;num<14;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40); //液晶顯示第二行
for(num=0;num<20;num++)
{
write_data(table1[num]);
delay(5);
}
}
void write_com(uchar com)//1602液晶寫指令
{
rs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)//1602液晶寫寫數(shù)據(jù)
{
rs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_sfm(uchar add,uchar date)//時(shí)分秒
{
uchar shi3,ge;
shi3=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_data(0x30+shi3);
write_data(0x30+ge);
}
void write_nyr(uchar ad,uchar date)//年月日
{
uchar shi4,ge2;
shi4=date/10;
ge2=date%10;
write_com(0x80+ad);
write_data(0x30+shi4);
write_data(0x30+ge2);
}
void write_week(uchar wk) //星期按西方星期設(shè)置 星期天為第一天
{
write_com(0x80+11);
switch(wk)
{
case 1: write_data('S');
delay(5);
write_data('U');
delay(5);
write_data('N');
break;
case 2: write_data('M');
delay(5);
write_data('O');
delay(5);
write_data('N');
break;
case 3: write_data('T');
delay(5);
write_data('U');
delay(5);
write_data('E');
break;
case 4: write_data('W');
delay(5);
write_data('E');
delay(5);
write_data('D');
break;
case 5: write_data('T');
delay(5);
write_data('H');
delay(5);
write_data('U');
break;
case 6: write_data('F');
delay(5);
write_data('R');
delay(5);
write_data('T');
break;
case 7: write_data('S');
delay(5);
write_data('A');
delay(5);
write_data('T');
break;
}
}
void keyscan() //按鍵函數(shù)
{
if(s1==0)
{
delay(5);
if(s1==0)
{
write_com(0x0f);
s1num++; //記錄按鍵次數(shù)
flag=1;
flag1=1;
while(!s1);
switch(s1num)//光標(biāo)閃爍點(diǎn)定位
{
case 1:write_com(0x80+0x40+6); //秒
break;
case 2:write_com(0x80+0x40+3); //分
break;
case 3:write_com(0x80+0x40+0); //時(shí)
break;
case 4:write_com(0x80+11); //星期
break;
case 5:write_com(0x80+8); //日
break;
case 6:write_com(0x80+5); //月
break;
case 7:write_com(0x80+2); //年
break;
case 8:s1num=0;
write_com(0x0c);//設(shè)置開顯示光標(biāo)不顯示 關(guān)閉時(shí)間設(shè)置
set_rtc();
flag=0;
break;
}
}
}
if(s1num!=0) //按鍵加減
{
if(s2==0) //加按鍵函數(shù)
{
delay(10);
if(s2==0)
{
while(!s2);
switch(s1num) //根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié)
{
case 1: miao++; //秒加
if(miao==60)
miao=0;
write_sfm(6,miao);
write_com(0x80+0x40+6);
break;
case 2: fen++; //分加
if(fen==60)
fen=0;
write_sfm(3,fen);
write_com(0x80+0x40+3);
break;
case 3: shi++; //時(shí)加
if(shi==24)
shi=0;
write_sfm(0,shi);
write_com(0x80+0x40+0);
break;
case 4: week++; //星期加
if(week==8)
week=1;
write_week(week);
write_com(0x80+11);
break;
case 5: day++; //日加
if(day==32)
day=1;
write_nyr(8,day);
write_com(0x80+8);
break;
case 6: month++; //月加
if(month==13)
month=1;
write_nyr(5,month);
write_com(0x80+5);
break;
case 7: year++; //年加
if(year==100)
year=0;
write_nyr(2,year);
write_com(0x80+2);
break;
}
}
}
if(s3==0) //減按鍵函數(shù)同上
{
delay(10);
if(s3==0)
{
while(!s3);
switch(s1num) //根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié)
{
case 1: miao--;
if(miao==-1)
miao=59;
write_sfm(6,miao);
write_com(0x80+0x40+6);
break;
case 2: fen--;
if(fen==-1)
fen=59;
write_sfm(3,fen);
write_com(0x80+0x40+3);
break;
case 3: shi--;
if(shi==-1)
shi=23;
write_sfm(0,shi);
write_com(0x80+0x40+0);
break;
case 4: week--;
if(week==-1)
week=7;
write_week(week);
write_com(0x80+11);
break;
case 5: day--;
if(day==-1)
day=31;
write_nyr(8,day);
write_com(0x80+8);
break;
case 6: month--;
if(month==-1)
month=12;
write_nyr(5,month);
write_com(0x80+5);
break;
case 7: year--;
if(year==-1)
year=99;
write_nyr(2,year);
write_com(0x80+2);
break;
}
}
}
}
if(s4==0) //鬧鐘按鍵
{
delay(5);
if(s4==0)
{
write_com(0x0f); //光標(biāo)閃爍
s2num++; //記錄按鍵次數(shù)
flag=1;
while(!s4);
switch(s2num)//光標(biāo)閃爍點(diǎn)定位
{
case 1:write_com(0x80+0x40+13); //分
break;
case 2:write_com(0x80+0x40+10); //時(shí)
break;
case 3:write_com(0x0c); //關(guān)閉鬧鐘設(shè)置
flag=0;
s2num=0;
break;
}
}
}
if(s2num!=0) //鬧鐘設(shè)置
{
if(s2==0) //鬧鐘加
{
delay(10);
if(s2==0)
{
while(!s2);
switch(s2num) //根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié)
{
case 1: afen++;
if(afen==60)
afen=0;
write_sfm(13,afen);
write_com(0x80+0x40+13);
break;
case 2: ashi++;
if(ashi==24)
ashi=0;
write_sfm(10,ashi);
write_com(0x80+0x40+10);
break;
}
}
}
if(s3==0) //鬧鐘減
{
delay(10);
if(s3==0)
{
while(!s3);
switch(s2num) //根據(jù)功能鍵相應(yīng)次數(shù)做出調(diào)節(jié)
{
case 1: afen--;
if(afen==-1)
afen=59;
write_sfm(13,afen);
write_com(0x80+0x40+13);
break;
case 2: ashi--;
if(ashi==-1)
ashi=23;
write_sfm(10,ashi);
write_com(0x80+0x40+10);
break;
}
}
}
}
}
void wirte_ds1302_byte(uchar dat) //ds1302字節(jié)寫
{
uchar i;
for(i=0;i<8;i++)
{
sclk=0;
io=dat&0x01;
dat=dat>>1;
sclk=1;
}
}
void write_ds1302(uchar add,uchar dat) //ds1302寫函數(shù)
{
rst=0;
_nop_();// 空操作
sclk=0;
_nop_();
rst=1;
_nop_();
wirte_ds1302_byte(add);
wirte_ds1302_byte(dat);
rst=0;
io=1;
sclk=1;
}
uchar read_ds1302(uchar add) //ds1302讀函數(shù)
{
uchar i,value;
rst=0;
_nop_();// 空操作
sclk=0;
_nop_();
rst=1;
_nop_();
wirte_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
sclk=0;
if(io)
{
value=value|0x80;
}
sclk=1;
}
rst=0;
_nop_();// 空操作
sclk=0;
_nop_();
sclk=1;
io=1;
return value;
}
void set_rtc() //ds1302時(shí)間設(shè)置
{
write_ds1302(0x8e,0x00); //關(guān)寫保護(hù)
year1=year/10; //轉(zhuǎn)換為十六進(jìn)制
year=year%10;
year=year+year1*16;
write_ds1302(0x8c,year);
week1=week/10;
week=week%10;
week=week+week1*16;
write_ds1302(0x8a,week);
month1=month/10;
month=month%10;
month=month+month1*16;
write_ds1302(0x88,month);
day1=day/10;
day=day%10;
day=day+day1*16;
write_ds1302(0x86,day);
shi1=shi/10;
shi=shi%10;
shi=shi+shi1*16;
write_ds1302(0x84,shi);
fen1=fen/10;
fen=fen%10;
fen=fen+fen1*16;
write_ds1302(0x82,fen);
miao1=miao/10;
miao=miao%10;
miao=miao+miao1*16;
write_ds1302(0x80,miao);
write_ds1302(0x8e,0x80); //開寫保護(hù)
flag1=0;
}
void read_rtc() //從ds1302中讀時(shí)間
{
year2=read_ds1302(0x8d);
week2=read_ds1302(0x8b);
month2=read_ds1302(0x89);
day2=read_ds1302(0x87);
shi2=read_ds1302(0x85);
fen2=read_ds1302(0x83);
miao2=read_ds1302(0x81);
}
void time_pros() //從ds1302中讀出的時(shí)間轉(zhuǎn)換為十進(jìn)制
{
year5=year2/16;
year2=year2%16;
year2=year2+year5*10;
month5=month2/16;
month2=month2%16;
month2=month2+month5*10;
day5=day2/16;
day2=day2%16;
day2=day2+day5*10;
shi5=shi2/16;
shi2=shi2%16;
shi2=shi2+shi5*10;
fen5=fen2/16;
fen2=fen2%16;
fen2=fen2+fen5*10;
miao5=miao2/16;
miao2=miao2%16;
miao2=miao2+miao5*10;
}
void display() //顯示函數(shù)
{
write_sfm(6,miao2);
write_com(0x80+0x40+6);
write_sfm(3,fen2);
write_com(0x80+0x40+3);
write_sfm(0,shi2);
write_com(0x80+0x40+0);
write_week(week2);
write_com(0x80+11);
write_nyr(8,day2);
write_com(0x80+8);
write_nyr(5,month2);
write_com(0x80+5);
write_nyr(2,year2);
write_com(0x80+2);
if((ashi==shi2)&&(afen==fen2))
{
alarm();
}
}
void alarm() // 鬧鐘
{
beep=0;
delay(1000);
beep=1;
}
void main() //主函數(shù)
{
init(); //初始化
while(1)
{
keyscan(); //按鍵函數(shù)
if(flag==0)
{
keyscan();
read_rtc();
time_pros();
display();
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美男人天堂
|
不卡一区
|
欧美激情久久久
|
国产一区二区在线观看视频
|
毛片黄
|
国产精品国产精品国产专区不卡
|
国产精品亚洲一区
|
精品一区二区三区免费毛片
|
日韩一区二区三区精品
|
欧美一区二区三区在线
|
日韩成人精品
|
中文字幕中文字幕
|
日本欧美在线视频
|
亚洲精品一区二区三区蜜桃久
|
日日爱夜夜操
|
操操日
|
中文字幕亚洲一区二区三区
|
97国产精品
|
日本一区二区三区视频在线
|
桃色五月
|
亚洲啪啪
|
成人国产精品久久
|
国产精品3区
|
色久影院
|
亚洲一区二区av在线
|
亚洲精品在线播放
|
日韩av手机在线观看
|
夜夜骑综合
|
色香蕉在线
|
91.com在线观看
|
日韩一级精品视频在线观看
|
欧美成人免费在线
|
性视频一区
|
自拍偷拍亚洲一区
|
久久男人
|
国产一区
|
中文字幕一区在线观看视频
|
日韩第一区
|
www.色.com
|
伊人网综合
|
四虎影院新地址
|