找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8699|回复: 25
打印 上一主题 下一主题
收起左侧

KS0108-12864无字库、大数字时分、时钟、农历、生肖年、温度

  [复制链接]
跳转到指定楼层
楼主
参考本坛几位高人的程序终于完了一个心愿,令很早前买的12864屏可以按自己满意的显示方式显示
搬程序搬了两天总意搬好,


源代码下载: 19264改12864.rar (481.63 KB, 下载次数: 330)
自己不会画仿真图所以用qpzmg的原仿真,此19264也是用ks0108跟我的12864同芯片,实际用在12864的只要改一下屏选就行.

下面是源程序预览:
  1. /*系统头文件--------------------------------------------------------------------*/
  2. #include
  3. #include
  4. #include "MODEL.h"
  5. #include "LCM19264.h"
  6. #include "DS1302.h"
  7. #include "DS18B20.h"
  8. #include "nongli.h"

  9. /*定义按键----------------------------------------------------------------------*/
  10. sbit K1  = P3^0;  //按键K1-设置
  11. sbit K2  = P3^1;  //按键K2-确认、返回
  12. sbit K3  = P3^2;  //按键K3-加
  13. sbit K4  = P3^3;  //按键K4-减
  14. //sbit K5  = P1^3;
  15. /************************函数声明***********************************************/
  16. void DelayM(uint);
  17. void ds_w(void);
  18. uchar m,date,month,year,hour,minute,second;
  19. void Conver_week(bit c,uchar year,uchar month,uchar day);
  20. /*-----------------------------定义全局变量------------------------------*/
  21. bit q=0, w=0;    //调时标志位
  22. unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定义时间映射全局变量(专用寄存器)
  23. signed char address,item,max,mini;
  24. unsigned char sel,dd,mo,yy;
  25. /*延时1(us)微秒———————————————————————————————————————————————————————————————————————————————
  26. void delay(uint i)

  27.         while(i--);

  28. 毫秒级CPU延时函数———————————————————————————————————————————————————————————————————————————
  29. void DelayM(uint a)               
  30. {
  31.         uint i;
  32.         while( --a != 0) { for(i = 0; i < 125; i++); }                                             
  33. }
  34. */

  35. void displaytime(void)
  36. {
  37.         
  38.     year=read_time(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中
  39.         ShowChar(0,0,'2');
  40.         ShowChar(0,1,'0');
  41.         ShowChar(0,2,(year/16+0x30));        
  42.         ShowChar(0,3,(year%16+0x30));
  43.         ShowHZ(0,2,10);                 //年
  44.         
  45.         month=read_time(0x89);//调用1302时钟数据中的月数据,从地址0x89中
  46.         ShowChar(0,6,(month/16+0x30));         
  47.         ShowChar(0,7,(month%16)+0x30);
  48.         //ShowChar(0,4,(Time[6]/16));
  49.         //ShowChar(0,5,(Time[6]%16));
  50.         ShowHZ(0,4,11);                 //月
  51.         
  52.         date=read_time(0x87);//从1302芯片中读取日数据,从地址0x87中
  53.         ShowChar(0,10,(date/16+0x30));
  54.         ShowChar(0,11,(date%16+0x30));
  55.         //ShowChar(0,8,(Time[6]/16));
  56.         //ShowChar(0,9,(Time[6]%16));
  57.         ShowHZ(0,6,12);                 //日

  58.         //小时
  59.         hour = read_time(0x85);
  60.         //if((hour/16)==0){Show1632(1,0,11);}
  61.         //        else        {Show1632(1,0,(hour/16));}        //小时十位
  62.         Show1632(1,0,(hour/16));
  63.         Show1632(1,1,(hour%16));                                        //小时个位
  64.         Show1632(1,2,10);                                                //时钟分隔符号":"
  65.         //分钟
  66.         minute = read_time(0x83);
  67.         Show1632(1,3,(minute/16));                                        //分钟十位
  68.         Show1632(1,4,(minute%16));                                        //分钟个位
  69.         ShowSZ(2,5,10);                                                //时钟分隔符号":"        
  70.         //秒钟
  71.         second = read_time(0x81);
  72.         ShowSZ(2,6,(second/16));                                        //秒钟十位
  73.         ShowSZ(2,7,(second%16));                                        //秒钟个位
  74.         
  75.         ShowHZ(1,5,13);//星
  76.         ShowHZ(1,6,14);//期
  77.         
  78.         dd = read_time(0x87);//日
  79.         mo = read_time(0x89);//月
  80.         yy = read_time(0x8d);//年
  81.         Conver_week(0,yy,mo,dd);//调用公历换算星期子函数
  82.     //sel=week;//week是公历转换星期子函数的运行结果,结果为0-6,0是星期日
  83.         ShowHZ(1,7,((week)-1));//显示位置
  84.            if(week==0)
  85.            ShowHZ(1,7,12);    //0=星期日
  86. }
  87. void displaynl(void)
  88. {
  89.         Conversion(century,year,month,date);        //公历转农历
  90.         //write_com(0x30); write_com(0x06); write_com(0x98);
  91.         
  92.         ShowHZ(3,0,(month_moon));  //显示农历月
  93.         if(month_moon==1) {ShowHZ(3,0,28);}    //正
  94.         if(month_moon==2) {ShowHZ(3,0,1);}    //
  95.         if(month_moon==3) {ShowHZ(3,0,2);}    //
  96.         if(month_moon==4) {ShowHZ(3,0,3);}    //
  97.         if(month_moon==5) {ShowHZ(3,0,4);}    //
  98.         if(month_moon==6) {ShowHZ(3,0,5);}    //
  99.         if(month_moon==7) {ShowHZ(3,0,6);}    //
  100.         if(month_moon==8) {ShowHZ(3,0,7);}    //
  101.         if(month_moon==9) {ShowHZ(3,0,8);}    //
  102.         if(month_moon==10) {ShowHZ(3,0,9);}    //
  103.         if(month_moon==11) {ShowHZ(3,0,15);}    //
  104.         if(month_moon==12) {ShowHZ(3,0,16);}    //
  105.                        ShowHZ(3,1,11);
  106.         ShowHZ(3,2,(day_moon));  //显示农历月
  107.         if (day_moon==1)  {ShowHZ(3,2,17);ShowHZ(3,3,0);}// {lcm_w_word("初一");}
  108.         if (day_moon==2)  {ShowHZ(3,2,17);ShowHZ(3,3,1);}//  {lcm_w_word("初二");}
  109.         if (day_moon==3)  {ShowHZ(3,2,17);ShowHZ(3,3,2);}//  {lcm_w_word("初三");
  110.         if (day_moon==4)  {ShowHZ(3,2,17);ShowHZ(3,3,3);}//  {lcm_w_word("初四");}
  111.         if (day_moon==5)  {ShowHZ(3,2,17);ShowHZ(3,3,4);}//  {lcm_w_word("初五");}
  112.         if (day_moon==6)  {ShowHZ(3,2,17);ShowHZ(3,3,5);}//  {lcm_w_word("初六");}
  113.         if (day_moon==7)  {ShowHZ(3,2,17);ShowHZ(3,3,6);}//  {lcm_w_word("初七");}
  114.         if (day_moon==8)  {ShowHZ(3,2,17);ShowHZ(3,3,7);}//  {lcm_w_word("初八");}
  115.         if (day_moon==9)  {ShowHZ(3,2,17);ShowHZ(3,3,8);}//  {lcm_w_word("初九");}
  116.         if (day_moon==10) {ShowHZ(3,2,17);ShowHZ(3,3,9);}//  {lcm_w_word("初十");}
  117.         if (day_moon==11) {ShowHZ(3,2,9);ShowHZ(3,3,0);}//  {lcm_w_word("十一");}
  118.         if (day_moon==12) {ShowHZ(3,2,9);ShowHZ(3,3,1);}//   {lcm_w_word("十二");}
  119.         if (day_moon==13) {ShowHZ(3,2,9);ShowHZ(3,3,2);}//   {lcm_w_word("十三");
  120.         if (day_moon==14) {ShowHZ(3,2,9);ShowHZ(3,3,3);}//   {lcm_w_word("十四");}
  121.         if (day_moon==15) {ShowHZ(3,2,9);ShowHZ(3,3,4);}//   {lcm_w_word("十五");}
  122.         if (day_moon==16) {ShowHZ(3,2,9);ShowHZ(3,3,5);}//   {lcm_w_word("十六");}
  123.         if (day_moon==17) {ShowHZ(3,2,9);ShowHZ(3,3,6);}//   {lcm_w_word("十七");}
  124.         if (day_moon==18) {ShowHZ(3,2,9);ShowHZ(3,3,7);}//   {lcm_w_word("十八");}
  125.         if (day_moon==19) {ShowHZ(3,2,9);ShowHZ(3,3,8);}//   {lcm_w_word("十九");}
  126.         if (day_moon==20) {ShowHZ(3,2,1);ShowHZ(3,3,9);}//   {lcm_w_word("二十");}
  127.         if (day_moon==21) {ShowHZ(3,2,18);ShowHZ(3,3,0);}//   {lcm_w_word("廿一");}
  128.         if (day_moon==22) {ShowHZ(3,2,18);ShowHZ(3,3,1);}//  {lcm_w_word("廿二");}
  129.         if (day_moon==23) {ShowHZ(3,2,18);ShowHZ(3,3,2);}//  {lcm_w_word("廿三");
  130.         if (day_moon==24) {ShowHZ(3,2,18);ShowHZ(3,3,3);}//  {lcm_w_word("廿四");}
  131.         if (day_moon==25) {ShowHZ(3,2,18);ShowHZ(3,3,4);}//  {lcm_w_word("廿五");}
  132.         if (day_moon==26) {ShowHZ(3,2,18);ShowHZ(3,3,5);}//  {lcm_w_word("廿六");}
  133.         if (day_moon==27) {ShowHZ(3,2,18);ShowHZ(3,3,6);}//  {lcm_w_word("廿七");}
  134.         if (day_moon==28) {ShowHZ(3,2,18);ShowHZ(3,3,7);}//  {lcm_w_word("廿八");}
  135.         if (day_moon==29) {ShowHZ(3,2,18);ShowHZ(3,3,8);}//  {lcm_w_word("廿九");}
  136.         if (day_moon==30) {ShowHZ(3,2,2);ShowHZ(3,3,9);}//  {lcm_w_test(三十
  137.          
  138. }

  139. void Set_time(uchar sel)
  140. {
  141.           signed char address,item;
  142.           signed char max,mini;
  143.           ShowHZ(3,4,19);          //显示"设"
  144.         ShowHZ(3,5,20);          //显示"置"         
  145.         if(sel==0) {ShowHZ(3,6,10);ShowHZ(3,7,27);address=0x8c; max=99; mini=0;}  //年份
  146.         if(sel==1) {ShowHZ(3,6,11);ShowHZ(3,7,27);address=0x88; max=12; mini=1;}  //月份
  147.         if(sel==2) {ShowHZ(3,6,12);ShowHZ(3,7,14);address=0x86; max=31; mini=1;}  //日期
  148.         if(sel==3) {ShowHZ(3,6,23);ShowHZ(3,7,24);address=0x84; max=23;mini=0;}//小时
  149.         if(sel==4) {ShowHZ(3,6,21);ShowHZ(3,7,22);address=0x82; max=59;mini=0;}//分钟

  150.   //读取1302某地址上的数值转换成10进制赋给item
  151.           item=((read_time(address+1))/16)*10 + (read_time(address+1))%16;
  152.           if(K3 == 0){item++;}
  153.           if(K4 == 0){item--;}
  154.           if(item>max) item=mini;   
  155.           if(item<mini) item="max;"
  156.           write_time(0x8e,0x00);//允许写操作
  157.           write_time(address,(item/10)*16+item%10);//转换成16进制写入1302
  158.           write_time(0x8e,0x80);//写保护,禁止写操作
  159.           displaytime();

  160. }
  161. void main()
  162. {
  163.         uchar e=0;
  164.         ds1302_init();
  165.         InitLCD();
  166.         while(1)
  167.         {
  168.                 if(w==0)
  169.                 {
  170.                         displaytime();
  171.                         displaynl();        
  172.                         read_temp();                  //读取温度
  173.                     ds1820disp();                 //显示温度
  174.                 }   //正常走时
  175.                 else {}                    //否则启动调时
  176. //设置键------------------------------------------------------------------------               
  177.                 if (K1 == 0)               // 设置时间
  178.                 {
  179.                         DelayM(20);                   //按键消抖
  180.                         if(K1 == 0 && w == 1)  //当是调时状态 本键用于调整下一项
  181.                         {
  182.                                 e++;
  183.                                 if (e >= 6 ){e = 0;}
  184.                                 Set_time(e);       //调整                                
  185.                         }                        
  186.                         if(K1 == 0 && w == 0)  //当是正常状态时就进入调时状态
  187.                         {
  188.                                 ClearScreen(0);
  189.                                 ClearScreen(1);
  190.                                 ClearScreen(2);    //清除左中右屏显示
  191.                                 w=1;                   //进入调时                                
  192.                                 Set_time(e);       //调整
  193.                         }
  194.                            while(K1 == 0);        //等待键松开
  195.                 }
  196. //确认,返回键-------------------------------------------------------------------               
  197.                 if (K2 == 0)               //在调时状态时就退出调时
  198.                 {
  199.                         DelayM(20);            //按键消抖
  200.                         if(K2 == 0 && w == 1)
  201.                         {                                
  202.                                 w = 0;                   //退出调时
  203.                                 e = 0;                       //"下一项"计数器清0                                                               
  204.                         }
  205.                         if(K2 == 0 && w == 0)
  206.                         {                                
  207.                                 ClearScreen(0);
  208.                                 ClearScreen(1);
  209.                                 ClearScreen(2);           //清除左中右屏显示                                
  210.                                 while(K2 == 0);   
  211.                         }
  212.                         ClearScreen(0);
  213.                         ClearScreen(1);
  214.                         ClearScreen(2);        //清除左中右屏显示
  215.                         displaytime();                   //显示时间
  216.                         read_temp();                  //读取温度
  217.                     ds1820disp();                 //显示温度
  218.                         while(K2 == 0);  
  219.                 }
  220. //加调整------------------------------------------------------------------------               
  221.                 if (K3 == 0 && w == 1)
  222.                 {
  223.                         DelayM(20);
  224.                         if(K3 == 0 && w == 1) {        Set_time(e); }
  225.                         while(K3 == 0);
  226.                 }
  227. //减调整------------------------------------------------------------------------               
  228.                 if (K4 == 0 && w == 1)
  229.                 {               
  230.                         DelayM(20);
  231.                         if(K4 == 0 && w == 1) { Set_time(e); }
  232.                         while(K4 == 0);
  233.                 }
  234.         }
  235. /*液晶背光控制,按一下亮,再按一下灭----------------------------------------
  236.                 if(K5 == 0)        
  237.                 {
  238.                         DelayM(20); q = ~q;      //标志位取反
  239.                          if(q){BLK = BLK | 1;}   
  240.                                  else {BLK = BLK & 0;}   
  241.                         while(K5 == 0);           
  242.                 }                                                                                                                                        */
  243. }
  244.   
复制代码



评分

参与人数 1黑币 +5 收起 理由
vvv64 + 5 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏22 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:104846 发表于 2016-2-2 22:01 | 只看该作者
不错,喜欢这个界面,学习了,多谢
回复

使用道具 举报

板凳
ID:64089 发表于 2016-2-17 13:42 | 只看该作者
不错,参考一下思路
回复

使用道具 举报

地板
ID:144413 发表于 2016-10-25 19:54 | 只看该作者
这个有时间误差自动补偿吗,1302走不准
回复

使用道具 举报

5#
ID:228939 发表于 2018-1-23 22:05 | 只看该作者
谢谢楼主,先收藏了
回复

使用道具 举报

6#
ID:271385 发表于 2018-1-25 16:18 | 只看该作者
图看着好漂亮
回复

使用道具 举报

7#
ID:279161 发表于 2018-1-26 16:04 | 只看该作者
收藏先,谢谢楼主
回复

使用道具 举报

8#
ID:41770 发表于 2018-4-2 10:37 | 只看该作者

图看着好漂亮
回复

使用道具 举报

9#
ID:269211 发表于 2018-4-3 00:40 | 只看该作者
为什么不走时呢?
回复

使用道具 举报

10#
ID:62743 发表于 2018-4-26 17:21 | 只看该作者
写得好,拜读,谢谢分享
回复

使用道具 举报

11#
ID:315723 发表于 2018-4-26 18:47 | 只看该作者
这个漂亮
回复

使用道具 举报

12#
ID:521117 发表于 2019-10-5 21:44 | 只看该作者
做的很好看,淘了个3.8寸屏,也准备做个时钟,感谢。
回复

使用道具 举报

13#
ID:584814 发表于 2019-10-8 21:38 | 只看该作者
新手学习,多谢分享。
回复

使用道具 举报

14#
ID:727275 发表于 2020-4-13 19:48 | 只看该作者
这个界面设计的图看着好漂亮,谢谢楼主分享
回复

使用道具 举报

15#
ID:135809 发表于 2020-4-16 16:17 | 只看该作者
很好的学习资料,收藏了
回复

使用道具 举报

16#
ID:621343 发表于 2020-6-25 17:41 | 只看该作者
怎么改成12864
回复

使用道具 举报

17#
ID:87000 发表于 2022-8-17 17:07 | 只看该作者
这个字体非常不错
回复

使用道具 举报

18#
ID:366877 发表于 2022-8-21 14:11 | 只看该作者
本帖最后由 wdgao 于 2022-8-23 04:40 编辑

这是非常好的项目,只是希望作者把修改好的源文件分享一下,更多的人受教、受益!
回复

使用道具 举报

19#
ID:190577 发表于 2022-8-21 15:09 | 只看该作者
您好,怎么程序编译下生成新的hex,仿真就运行不了,自带的hex可以运行。
回复

使用道具 举报

20#
ID:74784 发表于 2022-8-21 18:29 | 只看该作者
我当年试验时的图:




回复

使用道具 举报

21#
ID:366877 发表于 2022-8-22 04:54 | 只看该作者
我看了一下,很受启发。好像作者给的程序里汉字显示模块有瑕疵,请作者指正。谢谢!
回复

使用道具 举报

22#
ID:1042173 发表于 2022-8-30 00:03 | 只看该作者
非常不错的界面,大字体,
回复

使用道具 举报

23#
ID:1041859 发表于 2022-9-1 11:18 | 只看该作者
参考价值很高
谢谢
回复

使用道具 举报

24#
ID:1042173 发表于 2022-9-2 00:01 | 只看该作者
lxa0 发表于 2022-8-21 18:29
我当年试验时的图:

哇08年了呀……那么久。大佬了,
回复

使用道具 举报

25#
ID:98875 发表于 2022-9-10 16:45 | 只看该作者
显示界面审计的很漂亮!点赞!
回复

使用道具 举报

26#
ID:824664 发表于 2023-3-13 00:23 | 只看该作者
漂亮!美观,大方,值得学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表