久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD12864+ds1302大時間顯示 單片機(jī)程序

[復(fù)制鏈接]
ID:683123 發(fā)表于 2020-2-10 15:40 | 顯示全部樓層 |閱讀模式
下面是復(fù)制的部分代碼,復(fù)制到里面?zhèn)渥⑹莵y碼,不過提供源程序下載查看,備注很清楚,適合初學(xué)者
本程序是12864顯示屏配合DS1302模塊,用的普中科技HC6800ESV2.0的開發(fā)板。不過沒用開發(fā)板自帶的DS1302,電路板設(shè)計有缺陷導(dǎo)致1302和12864顯示屏沖突。
各種現(xiàn)實數(shù)字全部自己設(shè)計圖片并取模顯示。全程屏幕顯示用的是繪圖模式刷新。用兩個按鍵控制時間設(shè)定。
思路:先把屏幕格局設(shè)計出來,把字體字模提取。先把時間顯示好再想辦法把按鍵控制設(shè)計進(jìn)去,然后再想著把要設(shè)置的那個位閃爍變化。

單片機(jī)源程序如下:
  1. void main()
  2. {
  3.         Lcd12864Init();//Lcd初始化
  4.   DisplayKJ(image1);//畫面初始化
  5.         Time0init();
  6.         Time1init();//定時器初始化
  7.   Lcd12864Com(0x36);//打開繪圖模式
  8.         while(1)
  9.         {
  10.                 /***************判斷K1鍵按下并且按鍵參數(shù)加1***********************/
  11.                 if(K1==0)
  12.                 {
  13.                         Delay(20);
  14.                         if(K1==0)
  15.                         {
  16.                                 while(K1==0);
  17.                                 Keynumber++;
  18.                                 TR0=0;//暫停定時器0計數(shù),不讀取DS1302里面的數(shù)值
  19.                         }
  20.                 }
  21.         /***********根據(jù)K1的次數(shù)判斷需要閃爍的位置分別是秒分時日月周*******************/
  22.                 switch(Keynumber)
  23.                 {
  24.                         case 0:
  25.                                                 DisplayTime();break;//無設(shè)置的時候全部刷新一遍
  26.                         case 1:
  27.                                   if(shannumber==0)
  28.                                                 {
  29.                                                         DisplayMS(image2[SetTimeDate[0]/10]);
  30.                                                         DisplayMG(image2[SetTimeDate[0]%10]);
  31.                                                 }
  32.                                                 else
  33.                                                 {
  34.                                                         DisplayMS(image2[10]);
  35.                                                   DisplayMG(image2[10]);
  36.                                                 };
  37.                                                 break;//設(shè)置秒的時候只刷新秒位
  38.                         case 2:
  39.                                 if(shannumber==0)
  40.                                                 {
  41.                                                 DisplayFG(image2[SetTimeDate[1]%10]);
  42.                                                 DisplayFS(image2[SetTimeDate[1]/10]);        
  43.                                                 }
  44.                                                 else
  45.                                                 {
  46.                                                         DisplayFS(image2[10]);
  47.                                                   DisplayFG(image2[10]);
  48.                                                 };
  49.                                                 break;//設(shè)置分的時候只刷新分位
  50.                         case 3:
  51.                                 if(shannumber==0)
  52.                                                 {
  53.                                                 DisplaySG(image2[SetTimeDate[2]%10]);
  54.                                                 DisplaySS(image2[SetTimeDate[2]/10]);
  55.                                                 }
  56.                                                 else
  57.                                                 {
  58.                                                         DisplaySS(image2[10]);
  59.                                                   DisplaySG(image2[10]);
  60.                                                 };
  61.                                                         break;//設(shè)置小時的時候只刷新小時位
  62.                         case 4:
  63.                                 if(shannumber==0)
  64.                                                 {
  65.                                                 DisplayRS(image3[SetTimeDate[3]/10]);
  66.                                                 DisplayRG(image3[SetTimeDate[3]%10]);
  67.                                                 }
  68.                                                 else
  69.                                                 {
  70.                                                         DisplayRS(image3[10]);
  71.                                                   DisplayRG(image3[10]);
  72.                                                 };
  73.                                                         break;//設(shè)置日的時候只刷新日位
  74.                         case 5:
  75.                                 if(shannumber==0)
  76.                                                 {
  77.                                                 DisplayYS(image3[SetTimeDate[4]/10]);
  78.                                                 DisplayYG(image3[SetTimeDate[4]%10]);
  79.                                                 }
  80.                                                 else
  81.                                                 {
  82.                                                         DisplayYS(image3[10]);
  83.                                                   DisplayYG(image3[10]);
  84.                                                 };
  85.                                                         break;//設(shè)置月的時候只刷新月位
  86.                         case 6:
  87.                                 if(shannumber==0)
  88.                                                 {
  89.                                                 DisplayXQ(image3[SetTimeDate[5]%10]);
  90.                                                 }
  91.                                                 else
  92.                                                 {
  93.                                                         DisplayXQ(image3[10]);
  94.                                                 };
  95.                                                         break;//設(shè)置周的時候只刷新周位
  96.                         case 7:
  97.                                                 Keynumber=0;Ds1302Init();TR0=1;break;//按鍵循環(huán)一遍重新將數(shù)據(jù)寫入時間數(shù)組,然后打開定時器讀取DS1302內(nèi)的數(shù)據(jù)
  98.                 }
  99. /******************在設(shè)置的狀態(tài)下判斷K2并設(shè)置各參數(shù)***********************/
  100. /********************設(shè)置秒?yún)?shù)*********************/
  101.                 if((Keynumber==1)&&(K2==0))
  102.                 {
  103.                         Delay(20);
  104.                         if((Keynumber==1)&&(K2==0))
  105.                         {
  106.                                 while((Keynumber==1)&&(K2==0));
  107.                                         SetTimeDate[0]++;
  108.                                 if(SetTimeDate[0]==60)
  109.                                 {
  110.                                         SetTimeDate[0]=0;
  111.                                 }        
  112.                         }
  113.                 }
  114. /*******************設(shè)置分參數(shù)****************************/
  115.                 if((Keynumber==2)&&(K2==0))
  116.                 {
  117.                         Delay(20);
  118.                         if((Keynumber==2)&&(K2==0))
  119.                         {
  120.                                 while((Keynumber==2)&&(K2==0));
  121.                                         SetTimeDate[1]++;
  122.                                 if(SetTimeDate[1]==60)
  123.                                 {
  124.                                         SetTimeDate[1]=0;
  125.                                 }        
  126.                         }
  127.                 }
  128. /**********************設(shè)置時參數(shù)***********************************/        
  129.                 if((Keynumber==3)&&(K2==0))
  130.                                 {
  131.                                         Delay(20);
  132.                                         if((Keynumber==3)&&(K2==0))
  133.                                         {
  134.                                                 while((Keynumber==3)&&(K2==0));
  135.                                                         SetTimeDate[2]++;
  136.                                                 if(SetTimeDate[2]==24)
  137.                                                 {
  138.                                                         SetTimeDate[2]=0;
  139.                                                 }        
  140.                                         }
  141.                                 }
  142. /**********************設(shè)置日參數(shù)*******************************************/
  143.                         if((Keynumber==4)&&(K2==0))
  144.                                 {
  145.                                         Delay(20);
  146.                                         if((Keynumber==4)&&(K2==0))
  147.                                         {
  148.                                                 while((Keynumber==4)&&(K2==0));
  149.                                                         SetTimeDate[3]++;
  150.                                                 if(SetTimeDate[3]==32)
  151.                                                 {
  152.                                                         SetTimeDate[3]=1;
  153.                                                 }        
  154.                                         }
  155.                                 }
  156. /***********************設(shè)置月參數(shù)*************************************/
  157.                                 if((Keynumber==5)&&(K2==0))
  158.                                 {
  159.                                         Delay(20);
  160.                                         if((Keynumber==5)&&(K2==0))
  161.                                         {
  162.                                                 while((Keynumber==5)&&(K2==0));
  163.                                                         SetTimeDate[4]++;
  164.                                                 if(SetTimeDate[4]==13)
  165.                                                 {
  166.                                                         SetTimeDate[4]=1;
  167.                                                 }        
  168.                                         }
  169.                                 }
  170. /********************設(shè)置星期*****************************************/
  171.                                 if((Keynumber==6)&&(K2==0))
  172.                                 {
  173.                                         Delay(20);
  174.                                         if((Keynumber==6)&&(K2==0))
  175.                                         {
  176.                                                 while((Keynumber==6)&&(K2==0));
  177.                                                         SetTimeDate[5]++;
  178.                                                 if(SetTimeDate[5]==8)
  179.                                                 {
  180.                                                         SetTimeDate[5]=1;
  181.                                                 }        
  182.                                         }
  183.                                 }
  184.         }
  185. }

  186. void Timer0() interrupt 1  //定時器0中斷函數(shù)
  187. {
  188.   static uchar counte;
  189.         TH0=0x3c;
  190.         TL0=0xb0;
  191.         counte++;
  192.         
  193.         if(counte==1)
  194.         {  
  195.                   counte=0;
  196.                         SetTimeDate[0]=BcdToNum(Ds1302_Read(0x81));//正常運(yùn)行把讀出的秒分時保存到數(shù)組SetTimeDate中
  197.                         SetTimeDate[1]=BcdToNum(Ds1302_Read(0x83));
  198.                         SetTimeDate[2]=BcdToNum(Ds1302_Read(0x85));
  199.                         SetTimeDate[3]=BcdToNum(Ds1302_Read(0x87));
  200.                         SetTimeDate[4]=BcdToNum(Ds1302_Read(0x89));         
  201.                         SetTimeDate[5]=BcdToNum(Ds1302_Read(0x8b));                        
  202.         }        
  203. }
  204. /*************************定時器1中斷函數(shù),設(shè)置閃爍的變量******************/
  205. void Timer1() interrupt 3
  206. {                static uchar number;
  207.     TH1 = 0x3c;
  208.     TL1 = 0xb0;
  209.         number++;
  210.     if(number==10)
  211.                 {
  212.                         number=0;
  213.                         shannumber=~shannumber;                        
  214.                 }
  215. }
復(fù)制代碼

Keil代碼51hei下載地址:
12864顯示時間 ds1302 按鍵.rar (60.33 KB, 下載次數(shù): 88)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:609524 發(fā)表于 2021-11-2 15:18 | 顯示全部樓層
樓主能發(fā)原理圖出來嗎
回復(fù)

使用道具 舉報

ID:68720 發(fā)表于 2021-11-3 19:47 | 顯示全部樓層
先下一個,有時間整一個。謝謝共享!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级大片免费 | 男人的天堂久久 | 自拍偷拍亚洲视频 | 欧美一二三 | 精品91| 欧美日韩三级在线观看 | 久久久视频在线 | 亚洲精品国产一区 | 东京久久 | 久草热播| 熟女毛片 | 成人欧美一区二区三区在线播放 | 亚洲在线一区 | 亚洲高清一区二区三区 | 国产精品久久久久久久久免费高清 | 久久青草av| 国产欧美日韩 | 国产精品精品久久久 | 国产日韩欧美一区 | 国产精品视频中文字幕 | 午夜影晥| 国产免费又黄又爽又刺激蜜月al | 日韩欧美二区 | 国产乡下妇女做爰 | 视频一区二区中文字幕 | 日日夜夜精品视频 | 精品国产一区探花在线观看 | 成人精品一区二区三区 | 日本精品免费 | 中文字幕日韩欧美 | 久久不卡视频 | 午夜av成人| 精精精精xxxx免费视频 | 成人一级片在线观看 | 久国产视频 | 九九久久精品 | 一区二区精品 | 日韩在线一区视频 | 欧美精品video | 91免费高清 | 中文字幕亚洲一区二区三区 |