找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 147000|回復(fù): 490
收起左側(cè)

LCD12864液晶菜單界面小系統(tǒng) 代碼開源+效果視頻

  [復(fù)制鏈接]
ID:52744 發(fā)表于 2013-8-7 01:16 | 顯示全部樓層 |閱讀模式
效果視頻


011820tpmjpay3d2k18pas.jpg

這個是主界面
011850vkh7m32tm07kd8df.jpg
這個是主菜單界面
011906glnlo5l1bet5ttpt.jpg
這個是設(shè)置時間的子界面
011922iv52er65z55dger4.jpg
這個是設(shè)置日期

011937v9w7xj7y89yuzffq.jpg
設(shè)置背景光
011750eriu9uu879uxrttn.jpg
這是設(shè)置了按鍵音和鬧鈴以后,主界面出現(xiàn)狀態(tài)標志

011806lljpjjoa0ehyzrlj.jpg
鬧鈴的界面,喇叭出現(xiàn)鈴聲。
011734lldha5yh1azdyeb7.jpg
生日倒計時提醒功能。

011721ps68vacgggwt8egj.jpg


今天晚上剛剛寫完代碼,第一次寫這個超過2天,以前都在學(xué)習(xí)過程中。有點小開心。趕緊上論壇來和大家分享下。絕對原創(chuàng)。因為,我根本看不懂別人太復(fù)雜的代碼,代碼量大了看起來就累,然后就不想看。。。不知道大家有沒有這樣的感覺,每次帖子看寫方法的比較舒服。

代碼獻上,我這里用的是STC90C516RD+,代碼量大了點

還有 希望有高手能看到,提點建議給我,感覺寫這個非常要命,我每次處理冗長的條件的時候,我只會加很多bit flag標志去判斷,然后節(jié)省時間,代碼量特別大,,,挺摸不著頭腦的,希望有志同道合的朋友經(jīng)常一起交流。我經(jīng)常登這個論壇,有興趣的可以回復(fù)我。先自我介紹下,我今年大三,剛學(xué)完開發(fā)板現(xiàn)有的模塊,然后準備這個寒假多實踐下,買了很多串口通信的器件,希望能找到個交流的伴,每次在學(xué)校就我一個人在搗鼓這東西,覺得時間久了有點沒有激情了。。。

數(shù)字菜單系統(tǒng)開發(fā)者YuMin_Dong-1.7z (71.22 KB, 下載次數(shù): 5012)

評分

參與人數(shù) 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初學(xué)者 + 5 共享資料的黑幣獎勵!
張小帥1126 + 3 贊一個!
zhaok2013 + 5 很給力!
huang917500 + 5 很給力!
靜亦不靜 + 2 很給力!
hang007 + 1
YJGG + 10 共享資料的黑幣獎勵!
暗光 + 35 共享資料的黑幣獎勵!
王城wc + 1
JY腳印 + 10 很給力!
madell + 3 贊一個!
sfh0512 + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

ID:52744 發(fā)表于 2013-8-7 01:17 | 顯示全部樓層
這個是main.c文件
  1. /*------------------------------------
  2. 名稱:多級菜單數(shù)字電子鐘
  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.                         轉(zhuǎn)換表
  24. ------------------------------------*/
  25. //code UINT8 *WEEK_TAB[]={"一","二","三","四","五","六","日",};                //星期中文字庫表

  26. /*------------------------------------
  27.                         函數(shù)聲明部分
  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;                                        //開總中斷開關(guān)和兩個定時器中斷開關(guān)
  55. PT1=1;                                                //按鍵音產(chǎn)生中斷T1權(quán)拉高,使之能在INT0下產(chǎn)生聲響
  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;                //設(shè)置下降沿觸發(fā)
  67. }

  68. /*------------------------------------
  69.                         INT0中斷處理函數(shù)
  70. ------------------------------------*/
  71. void Int0_IRQ() interrupt 0
  72. {
  73.         Menu_Flag=1;                                //進入主菜單標簽
  74.         TR1=1;                                                //開啟TR1有按鍵音       
  75.         while(!KEY_MENU)                        //等待按鍵結(jié)束,使用中斷做按鍵,能讓它實時性比較好
  76.         ;
  77.         TR1=0;                                        //按鍵結(jié)束,按鍵音結(jié)束
  78.                
  79.         if(Menu0)                                        //子菜單0(設(shè)置時間進入后)
  80.         {
  81.         Set_Hour=~Set_Hour;                        //因為只有時鐘和分鐘個設(shè)置,0和1兩種狀態(tài)能區(qū)分了
  82.         }
  83.         else if(Menu1)                                //子菜單1(設(shè)置日期進入后)
  84.                 Menu1_Flag=1;                        //為減少中斷代碼長度,事實證明,用個標志更好
  85.         else if(Menu2)
  86.                 Menu2_Flag=1;
  87.         else if(Menu3) Set_Bright=~Set_Bright;                //子菜單3(背景光開關(guān))
  88.         else if(Menu4) Set_Speaker=~Set_Speaker;        //子菜單4(按鍵音開關(guān))
  89. Refresh_SetTime=1;                                //在子狀態(tài)中任何狀態(tài)按一下都會使產(chǎn)生刷新顯示標簽。       
  90. }       

  91. /*------------------------------------
  92.                         T0中斷處理函數(shù)
  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中產(chǎn)生一次(讀取并刷新溫度的標簽)
  101. }

  102. /*------------------------------------
  103.                         T1中斷處理函數(shù)
  104. ------------------------------------*/
  105. void Timer1_IRQ() interrupt 3
  106. {
  107. TH1=-600/256;                                        //產(chǎn)生某種頻率的按鍵音
  108. TL1=-600%256;                                        //經(jīng)測試,2000HZ~4000HZ左右的比較適合做按鍵音
  109. SPEAKER=~SPEAKER;                                //產(chǎn)生方波 提供某種頻率的按鍵音
  110. }

  111. /*------------------------------------
  112.                         主函數(shù)
  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;                                        //斷開喇叭,使之不會長時間導(dǎo)通燒壞
  129. BRIGHT=1;                                        //打開背景光
  130. while(1)
  131. {
  132. SPEAKER=0;                                        //斷開喇叭,使之不會長時間導(dǎo)通燒壞
  133.         if(Temperature_Flag)        //大循環(huán)下,溫度標簽置位后刷新顯示溫度
  134.         {
  135.         Temperature_Flag=0;                //清零標簽
  136.         Display_Temperature();
  137.         }
  138.        
  139.        
  140.         if(!Menu_Flag)                        //沒有菜單標簽則顯示主時鐘界面
  141.         {
  142.         DS1302_ReadDate();                //讀取日期
  143.                 if(Bell_Flag)                //Bell標志被置位,表明在設(shè)置菜單里,開始定時了,開始往下執(zhí)行,等待定時到
  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菜單循環(huán)中
  184.         //guide_old++;                        //
  185.         while(!FanHui1)                        //FanHui沒有被置1,死循環(huán),當主菜單下按了返回則置1,跳出循環(huán)
  186.         {       
  187.         MainMenu_Pro();                        //主菜單處理函數(shù)
  188.         SPEAKER=0;                                //斷開喇叭,使之不會長時間導(dǎo)通燒壞
  189.                 while(Enter_Menu)        //進入子菜單標簽
  190.                 {
  191.                                 if(Menu0) Menu0_Pro();                //子菜單0處理函數(shù)
  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;                                //斷開喇叭,使之不會長時間導(dǎo)通燒壞
  198.                 }
  199.         }//一級菜單while()
  200.         Temperature_Flag=1;                //每當退出主菜單,重新顯示溫度
  201.         }//顯示界面塊
  202. }
  203. }
復(fù)制代碼

評分

參與人數(shù) 1黑幣 +5 收起 理由
Foyekoo + 5

查看全部評分

回復(fù)

使用道具 舉報

ID:52863 發(fā)表于 2013-8-13 14:36 | 顯示全部樓層
能不能把完整的程序和電路圖發(fā)來?!感激不盡
回復(fù)

使用道具 舉報

ID:53023 發(fā)表于 2013-8-13 22:54 | 顯示全部樓層
haoyang de !!!!51黑有你更精彩。
回復(fù)

使用道具 舉報

ID:55815 發(fā)表于 2013-10-21 15:43 | 顯示全部樓層
很好  學(xué)習(xí) 謝謝
回復(fù)

使用道具 舉報

ID:52596 發(fā)表于 2013-10-25 09:31 | 顯示全部樓層
這網(wǎng)站上下載怎么這么慢呢?
回復(fù)

使用道具 舉報

ID:56369 發(fā)表于 2013-10-29 13:50 | 顯示全部樓層
收藏了
回復(fù)

使用道具 舉報

ID:56446 發(fā)表于 2013-10-30 11:03 | 顯示全部樓層
128*64點陣,歡迎用RAIO的RA6963
回復(fù)

使用道具 舉報

ID:56494 發(fā)表于 2013-10-31 21:41 | 顯示全部樓層
完整的程序和電路圖發(fā)一下吧,樓主
回復(fù)

使用道具 舉報

ID:14052 發(fā)表于 2013-11-1 10:46 | 顯示全部樓層
頂,謝謝
回復(fù)

使用道具 舉報

ID:56381 發(fā)表于 2013-11-4 00:08 | 顯示全部樓層
受教了,學(xué)習(xí)中
回復(fù)

使用道具 舉報

ID:58467 發(fā)表于 2014-1-2 15:58 | 顯示全部樓層
完整的程序和電路圖發(fā)一下吧,樓主
回復(fù)

使用道具 舉報

ID:59090 發(fā)表于 2014-2-12 14:22 | 顯示全部樓層
我下載編譯怎么這么多的錯誤?
回復(fù)

使用道具 舉報

ID:59084 發(fā)表于 2014-2-21 01:11 | 顯示全部樓層
完整的程序和電路圖發(fā)一下吧,樓主 謝謝!
回復(fù)

使用道具 舉報

ID:59315 發(fā)表于 2014-2-28 12:24 | 顯示全部樓層
贊一個。!
回復(fù)

使用道具 舉報

ID:59377 發(fā)表于 2014-3-8 08:35 | 顯示全部樓層
看著很吊的樣子
回復(fù)

使用道具 舉報

ID:60237 發(fā)表于 2014-4-4 14:02 | 顯示全部樓層
樓主厲害啊,感謝分享
回復(fù)

使用道具 舉報

ID:46750 發(fā)表于 2014-4-6 14:06 | 顯示全部樓層
樓主真強呀!
回復(fù)

使用道具 舉報

ID:52249 發(fā)表于 2014-4-14 17:34 | 顯示全部樓層
支持樓主~~
回復(fù)

使用道具 舉報

ID:60687 發(fā)表于 2014-4-14 20:07 | 顯示全部樓層
好東西,收藏學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:61227 發(fā)表于 2014-4-28 22:03 | 顯示全部樓層
謝謝樓主慷慨,謝謝了
回復(fù)

使用道具 舉報

ID:61200 發(fā)表于 2014-4-28 22:25 | 顯示全部樓層
樓主厲害啊。功能完善的萬年歷了。感謝分享
回復(fù)

使用道具 舉報

ID:61339 發(fā)表于 2014-5-2 02:30 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報

ID:58110 發(fā)表于 2014-5-2 07:30 | 顯示全部樓層
倒計時功能不錯,學(xué)習(xí)學(xué)習(xí)。
回復(fù)

使用道具 舉報

ID:61904 發(fā)表于 2014-5-16 09:33 | 顯示全部樓層
xie謝分享,學(xué)習(xí)一下
回復(fù)

使用道具 舉報

ID:61311 發(fā)表于 2014-5-26 21:13 | 顯示全部樓層
樓主在嗎,怎么我的有錯誤?請教

ZM.H(11): 錯誤 C129: missing ';' before 'User16x32',,,
回復(fù)

使用道具 舉報

ID:47760 發(fā)表于 2014-6-1 23:57 | 顯示全部樓層
不錯的東西
回復(fù)

使用道具 舉報

ID:59850 發(fā)表于 2014-6-3 10:29 | 顯示全部樓層
能發(fā)下原理圖嗎
回復(fù)

使用道具 舉報

ID:63365 發(fā)表于 2014-7-7 21:19 | 顯示全部樓層
漂亮    這就是我想要的
回復(fù)

使用道具 舉報

ID:63977 發(fā)表于 2014-7-14 17:52 | 顯示全部樓層
先看看了。
回復(fù)

使用道具 舉報

ID:64095 發(fā)表于 2014-7-17 21:32 | 顯示全部樓層
可不可以把完整的程序發(fā)給我
回復(fù)

使用道具 舉報

ID:62989 發(fā)表于 2014-7-18 17:37 | 顯示全部樓層
正在學(xué)習(xí)菜單,感覺挺麻煩的
回復(fù)

使用道具 舉報

ID:63888 發(fā)表于 2014-7-19 23:20 | 顯示全部樓層
支持支持
回復(fù)

使用道具 舉報

ID:59084 發(fā)表于 2014-8-16 22:41 | 顯示全部樓層
可不可以把完整的程序和原理圖發(fā)給我,樓主  
回復(fù)

使用道具 舉報

ID:65740 發(fā)表于 2014-9-3 09:51 | 顯示全部樓層
你好,我看了你的圖片了,第一次做的挺好的,就你說的,我也是想一直找個志同道合的朋友經(jīng)常一起交流交流,有時間方便聊一聊!
回復(fù)

使用道具 舉報

ID:65585 發(fā)表于 2014-9-5 15:37 | 顯示全部樓層
好東西啊,謝謝樓主分享!
回復(fù)

使用道具 舉報

ID:66181 發(fā)表于 2014-9-15 12:25 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:66142 發(fā)表于 2014-9-15 23:14 | 顯示全部樓層
郁悶.我的12864不顯示了.可能屏壞了.那天在找一塊試試
回復(fù)

使用道具 舉報

ID:64825 發(fā)表于 2014-9-30 10:03 | 顯示全部樓層
不錯。。。。
回復(fù)

使用道具 舉報

ID:66929 發(fā)表于 2014-10-3 19:55 | 顯示全部樓層
很不錯
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表