参考本坛几位高人的程序终于完了一个心愿,令很早前买的12864屏可以按自己满意的显示方式显示
搬程序搬了两天总意搬好,
源代码下载:
19264改12864.rar
(481.63 KB, 下载次数: 350)
自己不会画仿真图所以用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);
- } */
- }
-
复制代码
|