參考本壇幾位高人的程序終于完了一個心愿,令很早前買的12864屏可以按自己滿意的顯示方式顯示
搬程序搬了兩天總意搬好,
源代碼下載:
19264改12864.rar
(481.63 KB, 下載次數: 350)
2015-7-18 16:04 上傳
點擊文件名下載附件
自己不會畫仿真圖所以用qpzmg的原仿真,此19264也是用ks0108跟我的12864同芯片,實際用在12864的只要改一下屏選就行.
下面是源程序預覽:
- /*系統頭文件--------------------------------------------------------------------*/
- #include
- #include
- #include "MODEL.h"
- #include "LCM19264.h"
- #include "DS1302.h"
- #include "DS18B20.h"
- #include "nongli.h"
- /*定義按鍵----------------------------------------------------------------------*/
- sbit K1 = P3^0; //按鍵K1-設置
- sbit K2 = P3^1; //按鍵K2-確認、返回
- sbit K3 = P3^2; //按鍵K3-加
- sbit K4 = P3^3; //按鍵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,tiangan,dizhi,moontemp1,moontemp2;//定義時間映射全局變量(專用寄存器)
- signed char address,item,max,mini;
- unsigned char sel,dd,mo,yy;
- /*延時1(us)微秒———————————————————————————————————————————————————————————————————————————————
- void delay(uint i)
- while(i--);
- 毫秒級CPU延時函數———————————————————————————————————————————————————————————————————————————
- void DelayM(uint a)
- {
- uint i;
- while( --a != 0) { for(i = 0; i < 125; i++); }
- }
- */
- 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=星期日
- }
- void displaynl(void)
- {
- Conversion(century,year,month,date); //公歷轉農歷
- //write_com(0x30); write_com(0x06); write_com(0x98);
-
- ShowHZ(3,0,(month_moon)); //顯示農歷月
- if(month_moon==1) {ShowHZ(3,0,28);} //正
- 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 Set_time(uchar sel)
- {
- signed char address,item;
- signed char max,mini;
- ShowHZ(3,4,19); //顯示"設"
- ShowHZ(3,5,20); //顯示"置"
- if(sel==0) {ShowHZ(3,6,10);ShowHZ(3,7,27);address=0x8c; max=99; mini=0;} //年份
- if(sel==1) {ShowHZ(3,6,11);ShowHZ(3,7,27);address=0x88; max=12; mini=1;} //月份
- if(sel==2) {ShowHZ(3,6,12);ShowHZ(3,7,14);address=0x86; max=31; mini=1;} //日期
- if(sel==3) {ShowHZ(3,6,23);ShowHZ(3,7,24);address=0x84; max=23;mini=0;}//小時
- if(sel==4) {ShowHZ(3,6,21);ShowHZ(3,7,22);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 main()
- {
- uchar e=0;
- ds1302_init();
- InitLCD();
- while(1)
- {
- if(w==0)
- {
- displaytime();
- displaynl();
- 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);
- } */
- }
-
復制代碼
|