找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 114786|回复: 489
收起左侧

LCD12864液晶菜单界面小系统 代码开源+效果视频

  [复制链接]
ID:52744 发表于 2013-8-7 01:16 | 显示全部楼层 |阅读模式
效果视频


011820tpmjpay3d2k18pas.jpg

这个是主界面
011850vkh7m32tm07kd8df.jpg
这个是主菜单界面
011906glnlo5l1bet5ttpt.jpg
这个是设置时间的子界面
011922iv52er65z55dger4.jpg
这个是设置日期

011937v9w7xj7y89yuzffq.jpg
设置背景光
011750eriu9uu879uxrttn.jpg
这是设置了按键音和闹铃以后,主界面出现状态标志

011806lljpjjoa0ehyzrlj.jpg
闹铃的界面,喇叭出现铃声。
011734lldha5yh1azdyeb7.jpg
生日倒计时提醒功能。

011721ps68vacgggwt8egj.jpg


今天晚上刚刚写完代码,第一次写这个超过2天,以前都在学习过程中。有点小开心。赶紧上论坛来和大家分享下。绝对原创。因为,我根本看不懂别人太复杂的代码,代码量大了看起来就累,然后就不想看。。。不知道大家有没有这样的感觉,每次帖子看写方法的比较舒服。

代码献上,我这里用的是STC90C516RD+,代码量大了点

还有 希望有高手能看到,提点建议给我,感觉写这个非常要命,我每次处理冗长的条件的时候,我只会加很多bit flag标志去判断,然后节省时间,代码量特别大,,,挺摸不着头脑的,希望有志同道合的朋友经常一起交流。我经常登这个论坛,有兴趣的可以回复我。先自我介绍下,我今年大三,刚学完开发板现有的模块,然后准备这个寒假多实践下,买了很多串口通信的器件,希望能找到个交流的伴,每次在学校就我一个人在捣鼓这东西,觉得时间久了有点没有激情了。。。

数字菜单系统开发者YuMin_Dong-1.7z (71.22 KB, 下载次数: 4993)

评分

参与人数 24黑币 +191 收起 理由
ttmax3 + 5
dww465757120 + 30 很给力!
A142989 + 30 很给力!
hym51hdz + 5 特别好的制作!谢谢朋友的分享!
HGQK + 5 共享资料的黑币奖励!
zkele + 5 赞一个!
gzgongying + 5
renqian4436 + 5 很给力!
Gianluca + 3
xiangbinbin + 5 绝世好帖!
feifede + 2 回帖助人的奖励!
201511106109 + 6 很给力!
LN初学者 + 5 共享资料的黑币奖励!
张小帅1126 + 3 赞一个!
zhaok2013 + 5 很给力!
huang917500 + 5 很给力!
静亦不静 + 2 很给力!
hang007 + 1
YJGG + 10 共享资料的黑币奖励!
暗光 + 35 共享资料的黑币奖励!
王城wc + 1
JY脚印 + 10 很给力!
madell + 3 赞一个!
sfh0512 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:52744 发表于 2013-8-7 01:17 | 显示全部楼层
这个是main.c文件
  1. /*------------------------------------
  2. 名称:多级菜单数字电子钟
  3. 编写:YuMin_Dong
  4. 时间:2013.01.24
  5. ------------------------------------*/
  6. #include <reg52.h>
  7. //#include<intrins.h>
  8. #include<stdio.h>
  9. #include"zm.h"
  10. #include"delay.h"
  11. #include"lcd12864.h"
  12. #include"ds18b20.h"
  13. #include"ds1302.h"
  14. #include"process.h"

  15. /*------------------------------------
  16.                         全局变量定义
  17. ------------------------------------*/

  18. bit Temperature_Flag;                        //读取并显示温度标签,使温度刷新频率低些
  19. //bit Re_Time_Flag;
  20. //bit Flag1;        //进入子菜单后置标志,中断一次Menu_Count自加一次
  21. bit Bell_Work;

  22. /*------------------------------------
  23.                         转换表
  24. ------------------------------------*/
  25. //code UINT8 *WEEK_TAB[]={"一","二","三","四","五","六","日",};                //星期中文字库表

  26. /*------------------------------------
  27.                         函数声明部分
  28. ------------------------------------*/
  29. //void Display_Time();
  30. //void System_BootScreen();
  31. //void Timer0_Init();
  32. //void Int0_Init();
  33. //void Display_Temperature();
  34. //UINT8 Conver_Week(bit c,UINT8 year,UINT8 month,UINT8 date);

  35. /*------------------------------------
  36.                         启动画面
  37. ------------------------------------*/
  38. void System_BootScreen()
  39. {
  40. UINT8 i;
  41. LCD_SendImg128x64(User0_128x64);        //欢迎画面
  42. for(i=0;i<10;i++)
  43. DelayMs(255);                                                //画面延时

  44. LCD_SendImg128x64(User1_128x64);        //照片显示
  45. for(i=0;i<10;i++)
  46. DelayMs(255);
  47. }

  48. /*------------------------------------
  49.                         初始化定时器
  50. ------------------------------------*/
  51. void Timer_Init()                                       
  52. {
  53. TMOD|=0x11;                                        //两个定时器置方式一
  54. IE|=0X8a;                                        //开总中断开关和两个定时器中断开关
  55. PT1=1;                                                //按键音产生中断T1权拉高,使之能在INT0下产生声响
  56. TR0=1;                                                //开启定时器0,刷新用
  57. //PX0=1;
  58. //TR1=1;
  59. }

  60. /*------------------------------------
  61.                         初始化INT0
  62. ------------------------------------*/
  63. void Int0_Init()
  64. {
  65. EX0=1;                //打开外中断0,中断允许
  66. IT0=1;                //设置下降沿触发
  67. }

  68. /*------------------------------------
  69.                         INT0中断处理函数
  70. ------------------------------------*/
  71. void Int0_IRQ() interrupt 0
  72. {
  73.         Menu_Flag=1;                                //进入主菜单标签
  74.         TR1=1;                                                //开启TR1有按键音       
  75.         while(!KEY_MENU)                        //等待按键结束,使用中断做按键,能让它实时性比较好
  76.         ;
  77.         TR1=0;                                        //按键结束,按键音结束
  78.                
  79.         if(Menu0)                                        //子菜单0(设置时间进入后)
  80.         {
  81.         Set_Hour=~Set_Hour;                        //因为只有时钟和分钟个设置,0和1两种状态能区分了
  82.         }
  83.         else if(Menu1)                                //子菜单1(设置日期进入后)
  84.                 Menu1_Flag=1;                        //为减少中断代码长度,事实证明,用个标志更好
  85.         else if(Menu2)
  86.                 Menu2_Flag=1;
  87.         else if(Menu3) Set_Bright=~Set_Bright;                //子菜单3(背景光开关)
  88.         else if(Menu4) Set_Speaker=~Set_Speaker;        //子菜单4(按键音开关)
  89. Refresh_SetTime=1;                                //在子状态中任何状态按一下都会使产生刷新显示标签。       
  90. }       

  91. /*------------------------------------
  92.                         T0中断处理函数
  93. ------------------------------------*/
  94. void Timer0_IRQ() interrupt 1
  95. {
  96. static UINT8 i;
  97. TH0=-50000/256;
  98. TL0=-50000%256;
  99. i++;
  100. if(i==80)        Temperature_Flag=1;        //2.5s中产生一次(读取并刷新温度的标签)
  101. }

  102. /*------------------------------------
  103.                         T1中断处理函数
  104. ------------------------------------*/
  105. void Timer1_IRQ() interrupt 3
  106. {
  107. TH1=-600/256;                                        //产生某种频率的按键音
  108. TL1=-600%256;                                        //经测试,2000HZ~4000HZ左右的比较适合做按键音
  109. SPEAKER=~SPEAKER;                                //产生方波 提供某种频率的按键音
  110. }

  111. /*------------------------------------
  112.                         主函数
  113. ------------------------------------*/
  114. void main()
  115. {
  116. LCD_ClearGDRAM();                //清除DDRAM和GDRAM的显示
  117. System_BootScreen();        //启动画面
  118. DS1302_Init();                        //初始化DS1302
  119. Int0_Init();                        //初始化外中断0
  120. LCD_Init();                                //初始化12864
  121. Timer_Init();                        //初始化定时器
  122. LCD_ClearGDRAM();                //清屏DDRAM和GDRAM
  123. LCD_SetCGRAM(1,User1_16x16);//写入CGRAM自定义字符 主菜单指向箭头
  124. LCD_SetCGRAM(0,User0_16x16);//闹钟标志
  125. LCD_SetCGRAM(2,User2_16x16);//℃
  126. LCD_SetCGRAM(3,User4_16x16);//温度计
  127. Display_Temperature();                //开始的时候先显示下温度,使界面比较完整不会空缺
  128. SPEAKER=0;                                        //断开喇叭,使之不会长时间导通烧坏
  129. BRIGHT=1;                                        //打开背景光
  130. while(1)
  131. {
  132. SPEAKER=0;                                        //断开喇叭,使之不会长时间导通烧坏
  133.         if(Temperature_Flag)        //大循环下,温度标签置位后刷新显示温度
  134.         {
  135.         Temperature_Flag=0;                //清零标签
  136.         Display_Temperature();
  137.         }
  138.        
  139.        
  140.         if(!Menu_Flag)                        //没有菜单标签则显示主时钟界面
  141.         {
  142.         DS1302_ReadDate();                //读取日期
  143.                 if(Bell_Flag)                //Bell标志被置位,表明在设置菜单里,开始定时了,开始往下执行,等待定时到
  144.                 {
  145.                         if(Hour==Bell_Hour&&Minute==Bell_Minute)
  146.                         {
  147.                         LCD_ClearGDRAM();
  148.                         LCD_SendImg128x64(User2_128x64);
  149.                         Bell_Work=1;
  150.                         ET1=1;
  151.                         TR1=1;
  152.                                 while(1)
  153.                                 {
  154.                                         if(!KEY_ENTER)
  155.                                         {
  156.                                         DelayMs(10);
  157.                                                 if(!KEY_ENTER)
  158.                                                 {
  159.                                                 while(!KEY_ENTER);
  160.                                                 Bell_Flag=0;
  161.                                                 Temperature_Flag=1;
  162.                                                 Bell_Work=0;
  163.                                                 TR1=0;
  164.                                                 Menu_Flag=0;
  165.                                                 LCD_ClearGDRAM();
  166.                                                 LCD_Init();
  167.                                                 break;
  168.                                                 }
  169.                                         }
  170.                                 }
  171.                         }
  172.                 }
  173.         Display_Date();                        //填充显示日期
  174.         Display_Week();                        //填充显示星期
  175.         DS1302_ReadTime();                //读取时间
  176.         Display_Time();                        //填充显示时间
  177.         }
  178.        
  179.         else if(Menu_Flag)                //显示控制界面
  180.         {
  181.         LCD_ClearGDRAM();                //清屏之前的主时钟界面
  182.         LCD_RefreshMenu();                //菜单显示
  183.         FanHui1=0;                                //清零FanHui1标签,使之每一次进入菜单后都能停在下面那个while菜单循环中
  184.         //guide_old++;                        //
  185.         while(!FanHui1)                        //FanHui没有被置1,死循环,当主菜单下按了返回则置1,跳出循环
  186.         {       
  187.         MainMenu_Pro();                        //主菜单处理函数
  188.         SPEAKER=0;                                //断开喇叭,使之不会长时间导通烧坏
  189.                 while(Enter_Menu)        //进入子菜单标签
  190.                 {
  191.                                 if(Menu0) Menu0_Pro();                //子菜单0处理函数
  192.                                 else if(Menu1) Menu1_Pro();       
  193.                                 else if(Menu2) Menu2_Pro();
  194.                                 else if(Menu3) Menu3_Pro();
  195.                                 else if(Menu4) Menu4_Pro();
  196.                                 else if(Menu5) Menu5_Pro();
  197.                 SPEAKER=0;                                //断开喇叭,使之不会长时间导通烧坏
  198.                 }
  199.         }//一级菜单while()
  200.         Temperature_Flag=1;                //每当退出主菜单,重新显示温度
  201.         }//显示界面块
  202. }
  203. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
Foyekoo + 5

查看全部评分

回复

使用道具 举报

ID:52863 发表于 2013-8-13 14:36 | 显示全部楼层
能不能把完整的程序和电路图发来啊?!感激不尽
回复

使用道具 举报

ID:53023 发表于 2013-8-13 22:54 | 显示全部楼层
haoyang de !!!!51黑有你更精彩!!
回复

使用道具 举报

ID:55815 发表于 2013-10-21 15:43 | 显示全部楼层
很好  学习 谢谢
回复

使用道具 举报

ID:52596 发表于 2013-10-25 09:31 | 显示全部楼层
这网站上下载怎么这么慢呢?
回复

使用道具 举报

ID:56369 发表于 2013-10-29 13:50 | 显示全部楼层
收藏了
回复

使用道具 举报

ID:56446 发表于 2013-10-30 11:03 | 显示全部楼层
128*64点阵,欢迎用RAIO的RA6963
回复

使用道具 举报

ID:56494 发表于 2013-10-31 21:41 | 显示全部楼层
完整的程序和电路图发一下吧,楼主
回复

使用道具 举报

ID:14052 发表于 2013-11-1 10:46 | 显示全部楼层
顶,谢谢
回复

使用道具 举报

ID:56381 发表于 2013-11-4 00:08 | 显示全部楼层
受教了,学习中
回复

使用道具 举报

ID:58467 发表于 2014-1-2 15:58 | 显示全部楼层
完整的程序和电路图发一下吧,楼主
回复

使用道具 举报

ID:59090 发表于 2014-2-12 14:22 | 显示全部楼层
我下载编译怎么这么多的错误啊?
回复

使用道具 举报

ID:59084 发表于 2014-2-21 01:11 | 显示全部楼层
完整的程序和电路图发一下吧,楼主 谢谢!
回复

使用道具 举报

ID:59315 发表于 2014-2-28 12:24 | 显示全部楼层
赞一个!!!
回复

使用道具 举报

ID:59377 发表于 2014-3-8 08:35 | 显示全部楼层
看着很吊的样子
回复

使用道具 举报

ID:60237 发表于 2014-4-4 14:02 | 显示全部楼层
楼主厉害啊,感谢分享
回复

使用道具 举报

ID:46750 发表于 2014-4-6 14:06 | 显示全部楼层
楼主真强呀!
回复

使用道具 举报

ID:52249 发表于 2014-4-14 17:34 | 显示全部楼层
支持楼主~~
回复

使用道具 举报

ID:60687 发表于 2014-4-14 20:07 | 显示全部楼层
好东西,收藏学习
回复

使用道具 举报

ID:61227 发表于 2014-4-28 22:03 | 显示全部楼层
谢谢楼主慷慨,谢谢了
回复

使用道具 举报

ID:61200 发表于 2014-4-28 22:25 | 显示全部楼层
楼主厉害啊。功能完善的万年历了。感谢分享
回复

使用道具 举报

ID:61339 发表于 2014-5-2 02:30 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:58110 发表于 2014-5-2 07:30 | 显示全部楼层
倒计时功能不错,学习学习。
回复

使用道具 举报

ID:61904 发表于 2014-5-16 09:33 | 显示全部楼层
xie谢分享,学习一下
回复

使用道具 举报

ID:61311 发表于 2014-5-26 21:13 | 显示全部楼层
楼主在吗,怎么我的有错误?请教

ZM.H(11): 错误 C129: missing ';' before 'User16x32',,,
回复

使用道具 举报

ID:47760 发表于 2014-6-1 23:57 | 显示全部楼层
不错的东西
回复

使用道具 举报

ID:59850 发表于 2014-6-3 10:29 | 显示全部楼层
能发下原理图吗
回复

使用道具 举报

ID:63365 发表于 2014-7-7 21:19 | 显示全部楼层
漂亮    这就是我想要的
回复

使用道具 举报

ID:63977 发表于 2014-7-14 17:52 | 显示全部楼层
先看看了。
回复

使用道具 举报

ID:64095 发表于 2014-7-17 21:32 | 显示全部楼层
可不可以把完整的程序发给我
回复

使用道具 举报

ID:62989 发表于 2014-7-18 17:37 | 显示全部楼层
正在学习菜单,感觉挺麻烦的
回复

使用道具 举报

ID:63888 发表于 2014-7-19 23:20 | 显示全部楼层
支持支持
回复

使用道具 举报

ID:59084 发表于 2014-8-16 22:41 | 显示全部楼层
可不可以把完整的程序和原理图发给我,楼主  
回复

使用道具 举报

ID:65740 发表于 2014-9-3 09:51 | 显示全部楼层
你好,我看了你的图片了,第一次做的挺好的,就你说的,我也是想一直找个志同道合的朋友经常一起交流交流,有时间方便聊一聊!
回复

使用道具 举报

ID:65585 发表于 2014-9-5 15:37 | 显示全部楼层
好东西啊,谢谢楼主分享!
回复

使用道具 举报

ID:66181 发表于 2014-9-15 12:25 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:66142 发表于 2014-9-15 23:14 | 显示全部楼层
郁闷.我的12864不显示了.可能屏坏了.那天在找一块试试
回复

使用道具 举报

ID:64825 发表于 2014-9-30 10:03 | 显示全部楼层
不错。。。。
回复

使用道具 举报

ID:66929 发表于 2014-10-3 19:55 | 显示全部楼层
很不错
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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