久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
帶鬧鐘的單片機(jī)萬(wàn)年歷程序 測(cè)試無(wú)誤
[打印本頁(yè)]
作者:
123@w
時(shí)間:
2018-11-28 23:11
標(biāo)題:
帶鬧鐘的單片機(jī)萬(wàn)年歷程序 測(cè)試無(wú)誤
帶鬧鐘的萬(wàn)年歷程序測(cè)試無(wú)誤,希望能幫到大家
單片機(jī)源程序如下:
#include "12864.h"
#include "DS1302.h"
#include "KEY.h"
#include "DS18B20.h"
#include<intrins.h>
sfr CLK_DIV=0x97;
uchar clock_page=0; //鬧鐘
//uchar flag=0;
uchar keynum;
char yearH=20,year,month,date,day,hour=0,min=0,sec=0; //時(shí)間變量
//char cursor_xy=0; //光標(biāo)位置
uchar page=0; //page菜單頁(yè)面
code char* Weekday[8]={" ","一","二","三","四","五","六","日"};
code uchar cursor[6][2]={{0,16},{4,16},{0,32},{4,32},{0,48},{4,48}}; //光標(biāo)位置
extern code uchar DS1302_Addr[7];
uchar M_num=59,S_num=59;
uchar counter=1; //定時(shí)器計(jì)數(shù)
struct TIME
{
char x;
char y;
char num;
char max;
char min;
};
struct TIME Time[10]=
{
{1,2,0,99,0}, //年
{3,2,0,12,1}, //月
{5,2,0,31,1}, //日
{1,3,0,23,0}, //時(shí)
{2,3,0,59,0}, //分
{4,3,0,59,0}, //秒
{4,4,0,7,1}, //星期
{1,2,0,23,0}, //鬧鐘小時(shí)
{3,2,0,59,0}, //鬧鐘分鐘
{3,3,0,1,0} //鬧鐘標(biāo)志
};
uchar Clock_num_hour[3]={0,0,0}; //三個(gè)鬧鐘小時(shí)
uchar Clock_num_min[3]={0,0,0}; //三個(gè)鬧鐘分鐘
uchar Clock_flag[3]={0,0,0}; //三個(gè)鬧鐘使能標(biāo)志
void Timer(void)
{
uint temp; //溫度
while(DS18B20_Init()) //DS18B20初始化
{
LCD12864_datas(3,2,"未插入");
LCD12864_datas(2,3,"溫度模塊");
LCD12864_WriteCom(0x01); //12864清屏(DDRAM)
}
LCD12864_datas(2,1,"年");
LCD12864_datas(4,1,"月");
LCD12864_datas(6,1,"日");
LCD12864_datas(2,4,"星期");
while(1)
{
if(Clock_flag[0]==1||Clock_flag[1]==1||Clock_flag[2]==1) LCD12864_DrawPic1616(0,48,0);
else LCD12864_DrawPic1616(0,48,1); //鬧鐘標(biāo)志
hour=DS1302_ReadData(HOUR);
min=DS1302_ReadData(MIN);
sec=DS1302_ReadData(SEC); //讀取時(shí)間
LCD12864_Num3216(0,16,hour>>4);
LCD12864_Num3216(1,16,hour&0x0f); //小時(shí)
LCD12864_Num3216(2,16,10); //冒號(hào)
LCD12864_Num3216(3,16,min>>4);
LCD12864_Num3216(4,16,min&0x0f); //分鐘
LCD12864_Num3216(5,16,10); //冒號(hào)
LCD12864_Num3216(6,16,sec>>4);
LCD12864_Num3216(7,16,sec&0x0f); //秒針
year=DS1302_ReadData(YEAR);
month=DS1302_ReadData(MONTH);
date=DS1302_ReadData(DATE); //讀取年月日
LCD12864_SetXY(0,1);
LCD12864_WriteData(yearH/10+'0');
LCD12864_WriteData(yearH%10+'0');
LCD12864_WriteData('0'+(year>>4));
LCD12864_WriteData('0'+(year&0x0f)); //年份
LCD12864_SetXY(3,1);
LCD12864_WriteData('0'+(month>>4));
LCD12864_WriteData('0'+(month&0x0f)); //月份
LCD12864_SetXY(5,1);
LCD12864_WriteData('0'+(date>>4));
LCD12864_WriteData('0'+(date&0x0f)); //日期
LCD12864_datas(4,4,Weekday[DS1302_ReadData(DAY)]); //星期
temp=DS18B20_ReadTemp(); //讀取溫度值
LCD12864_SetXY(6,4);
LCD12864_WriteData('0'+(temp%10000/1000));
LCD12864_WriteData('0'+(temp%1000/100));
// LCD12864_WriteData('C');
LCD12864_DrawPic1616(7,48,2); //溫度符號(hào)
keynum=Key_Scan();
if(keynum==13) {page=4;break;} //當(dāng)按鍵按下鍵值為13時(shí),打開(kāi)菜單
LCD12864_Delay1ms(500);
}
}
void Cursor(uchar n)
{
switch(n)
{
case 0:LCD12864_Reverse(1, 0,0);LCD12864_Reverse(2, 0,0);LCD12864_Reverse(3, 0,0);LCD12864_Reverse(4, 0,0);LCD12864_Reverse(5, 0,0);break;
case 1:LCD12864_Reverse(1,16,0);LCD12864_Reverse(2,16,0);LCD12864_Reverse(3,16,0);LCD12864_Reverse(4,16,0);LCD12864_Reverse(5,16,0);break;
case 2:LCD12864_Reverse(1,32,0);LCD12864_Reverse(2,32,0);LCD12864_Reverse(3,32,0);LCD12864_Reverse(4,32,0);LCD12864_Reverse(5,32,0);break;
case 3:LCD12864_Reverse(1,48,0);LCD12864_Reverse(2,48,0);LCD12864_Reverse(3,48,0);LCD12864_Reverse(4,48,0);LCD12864_Reverse(5,48,0);break;
default:break;
}
}
void meun(void) //菜單界面
{
char n=0,late=7;
LCD12864_datas(0,1," 1.電子時(shí)鐘");
LCD12864_datas(0,2," 2.調(diào)整時(shí)間");
LCD12864_datas(0,3," 3.設(shè)置鬧鐘");
LCD12864_datas(0,4," 4.倒計(jì)時(shí)器");
Cursor(0); //初始光標(biāo)位置
while(1)
{
keynum=Key_Scan();
late=n;
if(keynum==13) {page=n;break;} //確認(rèn)鍵
else if(keynum>=1&&keynum<=4) n=keynum-1;
else if(keynum==14) n++;
else if(keynum==15) n--;
if(n>3)n=0;if(n<0)n=3;
if(n!=late)
{
Cursor(n);
Cursor(late);
}
}
}
void Time_Cursor(char n)
{
switch(n) //選光標(biāo)
{
case 0:LCD12864_Reverse(0,16,0);LCD12864_Reverse(1,16,0);break;
case 1:LCD12864_Reverse(3,16,0);break;
case 2:LCD12864_Reverse(5,16,0);break;
case 3:LCD12864_Reverse(1,32,0);break;
case 4:LCD12864_Reverse(2,32,1);LCD12864_Reverse(3,32,2);break;
case 5:LCD12864_Reverse(4,32,0);break;
case 6:LCD12864_Reverse(4,48,0);break;
case 7:break;
}
}
void Adjust_time(void)
{
char n=0,late=7;
LCD12864_datas(0,1,"----時(shí)間設(shè)置----");
LCD12864_datas(2,2,"年");
LCD12864_datas(4,2,"月");
LCD12864_datas(6,2,"日");
LCD12864_datas(2,4,"星期");
hour=DS1302_ReadData(HOUR);
min=DS1302_ReadData(MIN);
sec=DS1302_ReadData(SEC); //讀取時(shí)間
year=DS1302_ReadData(YEAR);
month=DS1302_ReadData(MONTH);
date=DS1302_ReadData(DATE); //讀取年月日
day=DS1302_ReadData(DAY);
LCD12864_SetXY(0,2);
LCD12864_WriteData(yearH/10+'0');
LCD12864_WriteData(yearH%10+'0');
LCD12864_WriteData('0'+(year>>4));
LCD12864_WriteData('0'+(year&0x0f)); //年份
LCD12864_SetXY(3,2);
LCD12864_WriteData('0'+(month>>4));
LCD12864_WriteData('0'+(month&0x0f)); //月份
LCD12864_SetXY(5,2);
LCD12864_WriteData('0'+(date>>4));
LCD12864_WriteData('0'+(date&0x0f)); //日期
LCD12864_SetXY(1,3);
LCD12864_WriteData((hour>>4)+'0');
LCD12864_WriteData((hour&0x0f)+'0'); //小時(shí)
LCD12864_WriteData(':'); //冒號(hào)
LCD12864_WriteData((min>>4)+'0');
LCD12864_WriteData((min&0x0f)+'0'); //分鐘
LCD12864_WriteData(':'); //冒號(hào)
LCD12864_WriteData((sec>>4)+'0');
LCD12864_WriteData((sec&0x0f)+'0'); //秒針
LCD12864_datas(4,4,Weekday[day]); //星期
Time[0].num=(year>>4)*10+(year&0x0f);
Time[1].num=(month>>4)*10+(month&0x0f);
Time[2].num=(date>>4)*10+(date&0x0f);
Time[3].num=(hour>>4)*10+(hour&0x0f);
Time[4].num=(min>>4)*10+(min&0x0f);
Time[5].num=(sec>>4)*10+(sec&0x0f);
Time[6].num=day; //將BCD碼轉(zhuǎn)換為十進(jìn)制數(shù)
Time_Cursor(0); //初始光標(biāo)位置
while(1)
{
LCD12864_datas(7,4,"00");
late=n;
keynum=Key_Scan();
if(keynum==13)
{
LCD12864_datas(7,4,"01");
while(1)
{
keynum=Key_Scan();
if(keynum==14) Time[n].num++;
if(keynum==15) Time[n].num--;
if(Time[n].num>Time[n].max)Time[n].num=Time[n].min;
if(Time[n].num<Time[n].min)Time[n].num=Time[n].max;
if(n==6)
{
LCD12864_datas(4,4,Weekday[Time[n].num]); //星期
}
else
{
LCD12864_SetXY(Time[n].x,Time[n].y);
if(n==4) LCD12864_WriteData(':'); //冒號(hào)
LCD12864_WriteData('0'+(Time[n].num/10));
LCD12864_WriteData('0'+(Time[n].num%10));
if(n==4) LCD12864_WriteData(':'); //冒號(hào)
}
if(keynum==13)
{
DS1302_WriteDat(0x8e,0x00); //關(guān)閉寫(xiě)保護(hù)
DS1302_WriteDat(DS1302_Addr[n],((Time[n].num/10)<<4)+(Time[n].num%10));
DS1302_WriteDat(0x8e,0x80); //開(kāi)啟寫(xiě)保護(hù)
break;
}
if(keynum==16) break;
}
}
if(keynum==14) n++;
if(keynum==15) n--;
if(n>6)n=0;if(n<0)n=6;
if(n!=late)
{
Time_Cursor(n);
Time_Cursor(late);
}
if(keynum==16)
{
page=4;
break;
}
}
}
void Clock_Cursor(char n)
{
switch(n) //選光標(biāo)
{
case 0:LCD12864_Reverse(1,16,0);break;
case 1:LCD12864_Reverse(3,16,0);break;
case 2:LCD12864_Reverse(3,32,0);break;
case 3:break;
}
}
void Clock(uchar k)
{
char n=0,late=3;
LCD12864_WriteCom(0x01); //12864清屏
Time[7].num=Clock_num_hour[k]; //小時(shí)
Time[8].num=Clock_num_min[k]; //分鐘
Time[9].num=Clock_flag[k]; //標(biāo)志
LCD12864_datas(0,1,"----鬧鐘設(shè)置----");
LCD12864_SetXY(2,2);
LCD12864_WriteData(':'); //冒號(hào)
LCD12864_SetXY(1,2);
LCD12864_WriteData((Time[7].num>>4)+'0');
LCD12864_WriteData((Time[7].num&0x0f)+'0'); //小時(shí)
LCD12864_SetXY(3,2);
LCD12864_WriteData((Time[8].num>>4)+'0');
LCD12864_WriteData((Time[8].num&0x0f)+'0'); //分鐘
LCD12864_datas(0,3,"鬧鐘:");
if(Time[9].num==0) LCD12864_datas(3,3,"關(guān)");
else LCD12864_datas(3,3,"開(kāi)");
Time[7].num=(Time[7].num>>4)*10+(Time[7].num&0x0f);
Time[8].num=(Time[8].num>>4)*10+(Time[8].num&0x0f);
Time[9].num=(Time[9].num>>4)*10+(Time[9].num&0x0f);
Clock_Cursor(0); //初始光標(biāo)位置
while(1)
{
LCD12864_datas(7,4,"00");
keynum=Key_Scan();
late=n;
if(keynum==13)
{
LCD12864_datas(7,4,"01");
n=n+7;
while(1)
{
keynum=Key_Scan();
if(keynum==14) Time[n].num++;
if(keynum==15) Time[n].num--;
if(Time[n].num>Time[n].max)Time[n].num=Time[n].min;
if(Time[n].num<Time[n].min)Time[n].num=Time[n].max;
if(Time[9].num==0) LCD12864_datas(3,3,"關(guān)");
else LCD12864_datas(3,3,"開(kāi)");
LCD12864_SetXY(1,2);
LCD12864_WriteData((Time[7].num/10)+'0');
LCD12864_WriteData((Time[7].num%10)+'0'); //小時(shí)
LCD12864_SetXY(3,2);
LCD12864_WriteData((Time[8].num/10)+'0');
LCD12864_WriteData((Time[8].num%10)+'0'); //分鐘
if(keynum==13)
{
break;
}
if(keynum==16)
{
break;
}
}
n=n-7;
}
if(keynum==14) n++;
if(keynum==15) n--;
if(n>2)n=0;if(n<0)n=2;
if(n!=late)
{
Clock_Cursor(n);
Clock_Cursor(late);
}
if(keynum==16)
{
page=2; //返回菜單
Time[7].num=((Time[7].num/10)<<4)+(Time[7].num%10);
Time[8].num=((Time[8].num/10)<<4)+(Time[8].num%10);
Time[9].num=((Time[9].num/10)<<4)+(Time[9].num%10);
Clock_num_hour[k]=Time[7].num; //小時(shí)
Clock_num_min[k]=Time[8].num; //分鐘
Clock_flag[k]=Time[9].num; //標(biāo)志
if(Clock_flag[k]!=0)
{
TMOD|=0x01;
EA=1;
ET0=1;
TH0=0x3c;
TL0=0xb0; //定時(shí)50ms
TR0=1;
}
break;
}
}
}
void Select_Clock_Cursor(uchar n)
{
switch(n)
{
case 0:LCD12864_Reverse(2,16,0);LCD12864_Reverse(3,16,0);LCD12864_Reverse(4,16,0);LCD12864_Reverse(5,16,0);break;
case 1:LCD12864_Reverse(2,32,0);LCD12864_Reverse(3,32,0);LCD12864_Reverse(4,32,0);LCD12864_Reverse(5,32,0);break;
case 2:LCD12864_Reverse(2,48,0);LCD12864_Reverse(3,48,0);LCD12864_Reverse(4,48,0);LCD12864_Reverse(5,48,0);break;
default:break;
}
}
void Select_Clock(void)
{
char n=0,late=4;
LCD12864_datas(0,1,"----鬧鐘選擇----");
LCD12864_datas(0,2," 1.鬧鐘01");
LCD12864_datas(0,3," 2.鬧鐘02");
LCD12864_datas(0,4," 3.鬧鐘03");
Select_Clock_Cursor(0); //初始光標(biāo)位置
while(1)
{
keynum=Key_Scan();
late=n;
if(keynum==13) {clock_page=n;page=5;break;} //確認(rèn)鍵
else if(keynum>=1&&keynum<=4) n=keynum-1;
else if(keynum==14) n++;
else if(keynum==15) n--;
else if(keynum==16) {page=4; break;}
if(n>2)n=0;if(n<0)n=2;
if(n!=late)
{
Select_Clock_Cursor(n);
Select_Clock_Cursor(late);
}
}
}
void Countdown(void)
{
LCD12864_datas(0,1,"----倒計(jì)時(shí)器----");
while(1)
{
keynum=Key_Scan();
LCD12864_SetXY(3,3);
LCD12864_WriteData((M_num/10)+'0');
LCD12864_WriteData((M_num%10)+'0'); //分鐘
LCD12864_WriteData(':'); //冒號(hào)
LCD12864_WriteData((S_num/10)+'0');
LCD12864_WriteData((S_num%10)+'0'); //分鐘
if(keynum==13)
{
TMOD|=0x10;
EA=1;
ET1=1;
TH1=0x3c;
TL1=0xb0; //定時(shí)50ms
TR1=1;
}
else if(keynum==2) M_num--; //減低分鐘
else if(keynum==3) S_num--; //減低秒針
else if(keynum==14) //重置計(jì)數(shù)值
{
S_num=59;
M_num=59;
}
else if(keynum==15) //停止計(jì)時(shí)
{
TR1=0;
}
else if(keynum==16) {page=4; break;} //退出到菜單頁(yè)
if(S_num==0) //判斷時(shí)間越界
{
S_num=59;
M_num--;
}
if(M_num==0&&S_num==0)
{
while(1)
{
Beep_key();
Delay10ms(5);
if(Key_Scan()!=0)
{
TR1=0;
S_num=59;
M_num=59;
break;
}
}
}
}
}
void time_2(void) interrupt 3
{
TH1=0x3c;
TL1=0xb0; //定時(shí)50ms
counter++;
if(counter==20)
{
counter=0;
S_num--;
}
}
void main(void)
{
CLK_DIV=0x03; //八分頻
LCD12864_Init(); //12864初始化
LCD12864_CleanScreen(); //12864清屏
DS1302_Init(); //DS1302初始化
while(1)
{
LCD12864_CleanScreen(); //12864清屏(CGRAM)
LCD12864_WriteCom(0x01); //12864清屏(DDRAM)
if(page==0) Timer(); //page=0時(shí),數(shù)字鐘界面
else if(page==1) Adjust_time(); //page=1時(shí),調(diào)整時(shí)間界面
else if(page==2) Select_Clock(); //page=2時(shí),系統(tǒng)設(shè)置界面
else if(page==3) Countdown(); //page=3時(shí),倒計(jì)時(shí)器頁(yè)面
else if(page==4) meun(); //page=4時(shí),菜單頁(yè)面
else if(page==5) Clock(clock_page); //page=4時(shí),菜單頁(yè)面
}
}
void time_1(void) interrupt 1
{
uchar i,H,M;
H=DS1302_ReadData(HOUR);
M=DS1302_ReadData(MIN);
TH0=0x3c;
TL0=0xb0; //定時(shí)50ms
for(i=0;i<3;i++)
{
if(Clock_flag[i]==1)
while(H==Clock_num_hour[i]&&M==Clock_num_min[i])
{
Clock_flag[i]=0;
Beep_key();
Delay10ms(5);
if(Key_Scan()!=0) break;
}
}
if(Clock_flag[0]==0&&Clock_flag[1]==0&&Clock_flag[2]==0)
{
TR0=0;
// Time[9].num=0;
// Clock_flag[0]=1;
// Clock_flag[1]=1;
// Clock_flag[2]=1;
}
}
復(fù)制代碼
所有資料51hei提供下載:
帶鬧鐘萬(wàn)年歷程序.zip
(117.86 KB, 下載次數(shù): 36)
2018-11-28 23:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
cp5201314
時(shí)間:
2020-6-19 13:27
仿真都沒(méi)有?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩成人在线观看
|
中文一区
|
拍拍无遮挡人做人爱视频免费观看
|
欧美精品一区在线发布
|
亚洲成人精品一区
|
9191成人精品久久
|
日韩欧美在线视频
|
精品婷婷
|
羞羞在线观看视频
|
91亚洲国产
|
国产在线精品区
|
午夜三级网站
|
天天人人精品
|
古装三级在线播放
|
国产精品免费看
|
国产精品久久久久一区二区三区
|
国产黄色小视频在线观看
|
日韩欧美在线视频
|
99久久久久久
|
精品成人佐山爱一区二区
|
成人在线影视
|
国产成人jvid在线播放
|
亚洲视频欧美视频
|
91av免费看
|
欧美一级欧美一级在线播放
|
韩国精品一区
|
国产一区二区三区www
|
成人国产精品免费观看视频
|
日本a在线
|
亚洲国产精品一区二区三区
|
在线欧美亚洲
|
日韩成人在线一区
|
天天干夜夜拍
|
成人免费视频
|
涩涩视频在线观看
|
午夜影院普通用户体验区
|
亚洲成网
|
精品美女久久久
|
亚洲91视频
|
国产精品自产av一区二区三区
|
亚洲精品乱码久久久久久按摩
|