webwxgetmsgimg (1).jpg (63.68 KB, 下載次數: 32)
下載附件
2020-3-30 10:35 上傳
19264 加3231電子鐘程序整合自論壇大神
webwxgetmsgimg.jpg (65.61 KB, 下載次數: 34)
下載附件
2020-3-30 10:35 上傳
以下粘貼部分代碼
*系統頭文件--------------------------------------------------------------------*/
#include <reg52.h>
#include <absacc.h>
#include "MODEL.h"
#include "LCM19264.h"
#include "ds3231.h"
#include "DS18B20.h"
#include "nongli.h"
//#include "ds1302.h"
/*定義按鍵----------------------------------------------------------------------*/
sbit K1 = P3^2; //按鍵K1-設置
sbit K2 = P3^3; //按鍵K2-確認、返回
sbit K3 = P3^4; //按鍵K3-加
sbit K4 = P3^5; //按鍵K4-減
//sbit K5 = P1^3;
/************************函數聲明***********************************************/
void DelayM(uint);
//void ds_w(void);
uchar m,date,month,year,hour,minute,second;
void Conver_week(bit c,uchar year,uchar month,uchar day);
/*-----------------------------定義全局變量------------------------------*/
bit q=0, w=0; //調時標志位
unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,moontemp1,moontemp2;//定義時間映射全局變量(專用寄存器)
uchar Htemp1,Htemp2,Mtemp1,Mtemp2,Stemp1,Stemp2;
void displaytime(void)
{
/* year=read_time(0x8d);//調用1302時鐘數據中的年數據,從地址0x8d中
ShowChar(0,0,'2');
ShowChar(0,1,'0');
ShowChar(0,2,(year/16+0x30));
ShowChar(0,3,(year%16+0x30));
ShowHZ(0,2,10); //年
month=read_time(0x89);//調用1302時鐘數據中的月數據,從地址0x89中
ShowChar(0,6,(month/16+0x30));
ShowChar(0,7,(month%16)+0x30);
//ShowChar(0,4,(Time[6]/16));
//ShowChar(0,5,(Time[6]%16));
ShowHZ(0,4,11); //月
date=read_time(0x87);//從1302芯片中讀取日數據,從地址0x87中
ShowChar(0,10,(date/16+0x30));
ShowChar(0,11,(date%16+0x30));
//ShowChar(0,8,(Time[6]/16));
//ShowChar(0,9,(Time[6]%16));
ShowHZ(0,6,12); //日
//小時
hour = read_time(0x85);
//if((hour/16)==0){Show1632(1,0,11);}
// else {Show1632(1,0,(hour/16));} //小時十位
Show1632(1,0,(hour/16));
Show1632(1,1,(hour%16)); //小時個位
Show1632(1,2,10); //時鐘分隔符號":"
//分鐘
minute = read_time(0x83);
Show1632(1,3,(minute/16)); //分鐘十位
Show1632(1,4,(minute%16)); //分鐘個位
ShowSZ(2,5,10); //時鐘分隔符號":"
//秒鐘
second = read_time(0x81);
ShowSZ(2,6,(second/16)); //秒鐘十位
ShowSZ(2,7,(second%16)); //秒鐘個位
ShowHZ(1,5,13);//星
ShowHZ(1,6,14);//期
dd = read_time(0x87);//日
mo = read_time(0x89);//月
yy = read_time(0x8d);//年
Conver_week(0,yy,mo,dd);//調用公歷換算星期子函數
//sel=week;//week是公歷轉換星期子函數的運行結果,結果為0-6,0是星期日
ShowHZ(1,7,((week)-1));//顯示位置
if(week==0)
ShowHZ(1,7,12); //0=星期日 */
year=read_random(DS3231_YEAR);//調用3231時鐘數據中的年數據,從地址0x8d中
ShowChar(0,0,'2');
ShowChar(0,1,'0');
ShowChar(0,2,(year/10+0x30));
ShowChar(0,3,(year%10+0x30));
ShowHZ(0,2,10); //年
month=read_random(DS3231_MONTH);//調用3231時鐘數據中的月數據,從地址0x05中
ShowChar(0,6,(month/10+0x30));
ShowChar(0,7,(month%10)+0x30);
ShowHZ(0,4,11); //月
date=read_random(DS3231_DAY);//從3231芯片中讀取日數據,從地址0x04中
ShowChar(0,10,(date/10+0x30));
ShowChar(0,11,(date%10+0x30));
ShowHZ(0,6,12); //日
//小時
hour =read_random(DS3231_HOUR); //從3231芯片中讀取小時數據,從地址0x02中
Show1632(1,0,(hour/10));
Show1632(1,1,(hour%10)); //小時個位
Show1632(1,2,10); //時鐘分隔符號":"
//分鐘
minute= read_random(DS3231_MINUTE); //從3231芯片中讀取分鐘數據,從地址0x01中
Show1632(1,3,(minute/10)); //分鐘十位
Show1632(1,4,(minute%10)); //分鐘個位
ShowSZ(2,5,10); //時鐘分隔符號":"
//秒鐘
second =read_random(DS3231_SECOND); //從3231芯片中讀取秒鐘數據,從地址0x01中
ShowSZ(2,6,(second/10)); //秒鐘十位
ShowSZ(2,7,(second%10)); //秒鐘個位
ShowHZ(1,9,13);//星
ShowHZ(1,10,14);//期
dd = read_random(DS3231_DAY);//日
mo = read_random(DS3231_MONTH);//月
yy = read_random(DS3231_YEAR);//年
Conver_week(0,yy,mo,dd);//調用公歷換算星期子函數
//sel=week;//week是公歷轉換星期子函數的運行結果,結果為0-6,0是星期日
ShowHZ(1,11,((week)-1));//顯示位置
if(week==0)
ShowHZ(1,11,12); //0=星期日
}
void displaynl(void)
{
Conversion(century,year,month,date); //公歷轉農歷
ShowHZ(3,0,(month_moon)); //顯示農歷月
if(month_moon==1) {ShowHZ(3,0,35);} //正
if(month_moon==2) {ShowHZ(3,0,1);} //二
if(month_moon==3) {ShowHZ(3,0,2);} //三
if(month_moon==4) {ShowHZ(3,0,3);} //四
if(month_moon==5) {ShowHZ(3,0,4);} //五
if(month_moon==6) {ShowHZ(3,0,5);} //六
if(month_moon==7) {ShowHZ(3,0,6);} //七
if(month_moon==8) {ShowHZ(3,0,7);} //八
if(month_moon==9) {ShowHZ(3,0,8);} //九
if(month_moon==10) {ShowHZ(3,0,9);} //十
if(month_moon==11) {ShowHZ(3,0,15);} //冬
if(month_moon==12) {ShowHZ(3,0,16);} //臘
ShowHZ(3,1,11);//顯示月
ShowHZ(3,2,(day_moon)); //顯示農歷月
if (day_moon==1) {ShowHZ(3,2,17); ShowHZ(3,3,0);}// {lcm_w_word("初一");}
if (day_moon==2) {ShowHZ(3,2,17); ShowHZ(3,3,1);}// {lcm_w_word("初二");}
if (day_moon==3) {ShowHZ(3,2,17); ShowHZ(3,3,2);}// {lcm_w_word("初三");}
if (day_moon==4) {ShowHZ(3,2,17); ShowHZ(3,3,3);}// {lcm_w_word("初四");}
if (day_moon==5) {ShowHZ(3,2,17); ShowHZ(3,3,4);}// {lcm_w_word("初五");}
if (day_moon==6) {ShowHZ(3,2,17); ShowHZ(3,3,5);}// {lcm_w_word("初六");}
if (day_moon==7) {ShowHZ(3,2,17); ShowHZ(3,3,6);}// {lcm_w_word("初七");}
if (day_moon==8) {ShowHZ(3,2,17); ShowHZ(3,3,7);}// {lcm_w_word("初八");}
if (day_moon==9) {ShowHZ(3,2,17); ShowHZ(3,3,8);}// {lcm_w_word("初九");}
if (day_moon==10) {ShowHZ(3,2,17); ShowHZ(3,3,9);}// {lcm_w_word("初十");}
if (day_moon==11) {ShowHZ(3,2,9); ShowHZ(3,3,0);}// {lcm_w_word("十一");}
if (day_moon==12) {ShowHZ(3,2,9); ShowHZ(3,3,1);}// {lcm_w_word("十二");}
if (day_moon==13) {ShowHZ(3,2,9); ShowHZ(3,3,2);}// {lcm_w_word("十三");}
if (day_moon==14) {ShowHZ(3,2,9); ShowHZ(3,3,3);}// {lcm_w_word("十四");}
if (day_moon==15) {ShowHZ(3,2,9); ShowHZ(3,3,4);}// {lcm_w_word("十五");}
if (day_moon==16) {ShowHZ(3,2,9); ShowHZ(3,3,5);}// {lcm_w_word("十六");}
if (day_moon==17) {ShowHZ(3,2,9); ShowHZ(3,3,6);}// {lcm_w_word("十七");}
if (day_moon==18) {ShowHZ(3,2,9); ShowHZ(3,3,7);}// {lcm_w_word("十八");}
if (day_moon==19) {ShowHZ(3,2,9); ShowHZ(3,3,8);}// {lcm_w_word("十九");}
if (day_moon==20) {ShowHZ(3,2,1); ShowHZ(3,3,9);}// {lcm_w_word("二十");}
if (day_moon==21) {ShowHZ(3,2,18); ShowHZ(3,3,0);}// {lcm_w_word("廿一");}
if (day_moon==22) {ShowHZ(3,2,18); ShowHZ(3,3,1);}// {lcm_w_word("廿二");}
if (day_moon==23) {ShowHZ(3,2,18); ShowHZ(3,3,2);}// {lcm_w_word("廿三");}
if (day_moon==24) {ShowHZ(3,2,18); ShowHZ(3,3,3);}// {lcm_w_word("廿四");}
if (day_moon==25) {ShowHZ(3,2,18); ShowHZ(3,3,4);}// {lcm_w_word("廿五");}
if (day_moon==26) {ShowHZ(3,2,18); ShowHZ(3,3,5);}// {lcm_w_word("廿六");}
if (day_moon==27) {ShowHZ(3,2,18); ShowHZ(3,3,6);}// {lcm_w_word("廿七");}
if (day_moon==28) {ShowHZ(3,2,18); ShowHZ(3,3,7);}// {lcm_w_word("廿八");}
if (day_moon==29) {ShowHZ(3,2,18); ShowHZ(3,3,8);}// {lcm_w_word("廿九");}
if (day_moon==30) {ShowHZ(3,2,2); ShowHZ(3,3,9);}// {lcm_w_test("三十");}
}
void displaysx(void){
unsigned char LunarYearD,ReYear;//農歷年份的十進制數 和取模后的余數
//LunarYearD=(year_moon/16)*10+year_moon%16; //農歷年轉換成10進制數
ReYear=LunarYearD%12; //農歷年模12,取余運算
switch(ReYear) //生肖
{
case 0: ShowHZ(0,10,23);break;//write_com(0x9a);lcm_w_word("龍年");break; //余0即整除 農歷 龍年
case 1: ShowHZ(0,10,24);break;//write_com(0x9a);lcm_w_word("蛇年");break; //蛇年
case 2: ShowHZ(0,10,25);break;//write_com(0x9a);lcm_w_word("馬年");break;
case 3: ShowHZ(0,10,26);break;//write_com(0x9a);lcm_w_word("羊年");break;
case 4: ShowHZ(0,10,27);break;//write_com(0x9a);lcm_w_word("猴年");break;
case 5: ShowHZ(0,10,28);break;//write_com(0x9a);lcm_w_word("雞年");break;
case 6: ShowHZ(0,10,29);break;//write_com(0x9a);lcm_w_word("狗年");break;
case 7: ShowHZ(0,10,30);break;//write_com(0x9a);lcm_w_word("豬年");break;
case 8: ShowHZ(0,10,19);break;//write_com(0x9a);lcm_w_word("鼠年");break;
case 9: ShowHZ(0,10,20);break;//write_com(0x9a);lcm_w_word("牛年");break;
case 10:ShowHZ(0,10,21);break;//write_com(0x9a);lcm_w_word("虎年");break;
case 11:ShowHZ(0,10,22);break;//write_com(0x9a);lcm_w_word("兔年");break;
}
}
/*void Set_time(uchar sel)
{
signed char address,item;
signed char max,mini;
ShowHZ(3,6,31); //顯示"設"
if(sel==0) {ShowHZ(3,7,10);address=0x8c; max=99; mini=0;} //年
if(sel==1) {ShowHZ(3,7,11);address=0x88; max=12; mini=1;} //月
if(sel==2) {ShowHZ(3,7,12);address=0x86; max=31; mini=1;} //日
if(sel==3) {ShowHZ(3,7,33);address=0x84; max=23;mini=0;}//時
if(sel==4) {ShowHZ(3,7,32);address=0x82; max=59;mini=0;}//鐘
//讀取1302某地址上的數值轉換成10進制賦給item
item=((read_time(address+1))/16)*10 + (read_time(address+1))%16;
if(K3 == 0){item++;}
if(K4 == 0){item--;}
if(item>max) item=mini;
if(item<mini) item=max;
write_time(0x8e,0x00);//允許寫操作
write_time(address,(item/10)*16+item%10);//轉換成16進制寫入1302
write_time(0x8e,0x80);//寫保護,禁止寫操作
displaytime();
} */
void Set_time(uchar sel)
{
signed char address,item;
signed char max,mini;
ShowHZ(3,6,31); //顯示"調"
if(sel==0) {ShowHZ(3,7,10);address=DS3231_YEAR; max=99; mini=0;} //年
if(sel==1) {ShowHZ(3,7,11);address=DS3231_MONTH; max=12; mini=1;} //月
if(sel==2) {ShowHZ(3,7,12);address=DS3231_DAY; max=31; mini=1;} //日
if(sel==3) {ShowHZ(3,7,33);address=DS3231_HOUR; max=23;mini=0;}//時
if(sel==4) {ShowHZ(3,7,32);address=DS3231_MINUTE; max=59;mini=0;}//鐘
//讀取3231某地址上的數值轉換成10進制賦給item
item=(read_random(address));
if(K3 == 0){item++;}
if(K4 == 0){item--;}
if(item>max) item=mini;
if(item<mini) item=max;
//write_byte(0, 0x98);//允許寫操作
write_byte(address,(item/10)*16+item%10);//轉換成10進制寫入3231
// write_byte(0x8e,0x80);//寫保護,禁止寫操作
displaytime();
}
void main()
{
uchar e=0;
InitLCD();
while(1)
{
if(w==0)
{
displaytime();
displaynl();
displaysx();
read_temp(); //讀取溫度
ds1820disp(); //顯示溫度
} //正常走時
else {} //否則啟動調時
//設置鍵------------------------------------------------------------------------
if (K1 == 0) // 設置時間
{
DelayM(20); //按鍵消抖
if(K1 == 0 && w == 1) //當是調時狀態 本鍵用于調整下一項
{
e++;
if (e >= 6 ){e = 0;}
Set_time(e); //調整
}
if(K1 == 0 && w == 0) //當是正常狀態時就進入調時狀態
{
ClearScreen(0);
ClearScreen(1);
ClearScreen(2); //清除左中右屏顯示
w=1; //進入調時
Set_time(e); //調整
}
while(K1 == 0); //等待鍵松開
}
//確認,返回鍵-------------------------------------------------------------------
if (K2 == 0) //在調時狀態時就退出調時
{
DelayM(20); //按鍵消抖
if(K2 == 0 && w == 1)
{
w = 0; //退出調時
e = 0; //"下一項"計數器清0
}
if(K2 == 0 && w == 0)
{
ClearScreen(0);
ClearScreen(1);
ClearScreen(2); //清除左中右屏顯示
while(K2 == 0);
}
ClearScreen(0);
ClearScreen(1);
ClearScreen(2); //清除左中右屏顯示
displaytime(); //顯示時間
read_temp(); //讀取溫度
ds1820disp(); //顯示溫度
while(K2 == 0);
}
//加調整------------------------------------------------------------------------
if (K3 == 0 && w == 1)
{
DelayM(20);
if(K3 == 0 && w == 1) { Set_time(e); }
while(K3 == 0);
}
//減調整------------------------------------------------------------------------
if (K4 == 0 && w == 1)
{
DelayM(20);
if(K4 == 0 && w == 1) { Set_time(e); }
while(K4 == 0);
}
}
/*液晶背光控制,按一下亮,再按一下滅----------------------------------------
if(K5 == 0)
{
DelayM(20); q = ~q; //標志位取反
if(q){BLK = BLK | 1;}
else {BLK = BLK & 0;}
while(K5 == 0);
} */
}
51hei.png (10.97 KB, 下載次數: 36)
下載附件
2020-3-30 17:31 上傳
全部資料51hei下載地址:
19264 3231.zip
(208.93 KB, 下載次數: 268)
2020-3-30 10:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|