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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9390|回復: 8
打印 上一主題 下一主題
收起左側

51單片機運用定時器計時用lcd顯示實時時鐘年月日(帶仿真及源程序)

  [復制鏈接]
跳轉到指定樓層
樓主
能區分閏年,閏月。每按K1一次跳到要設置的位置。K2每按一次 相應位家1. lcd.zip (34.05 KB, 下載次數: 100)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2017-5-5 15:57 | 只看該作者



  1. #include<reg52.h>
  2. #include<absacc.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define DATA_ADDR XBYTE[0xF000]    //數據口地址
  6. #define COM_ADDR XBYTE[0xF100]    //命令口地址
  7. uchar xdata *C_ADDR,*D_ADDR;//指向命令口和數據口的地址指針
  8. uchar count=0;
  9. uchar second=0,fen=58,hour=23,mounth=2,day=25;
  10. uint year=2017;
  11. uchar k2;
  12. uchar zifuma[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
  13. uchar data COM;     //存放命令的變量
  14. uchar data DAT1;     //存放第一參數的變量
  15. uchar data DAT2;    //存放第二參數的變量
  16. void clear(void);
  17. void LCD_DISP(uchar y,uchar x,uchar zifu);
  18. void LCD_InIt();
  19. void DELAY();
  20. void WRITE_COM_DATA0();
  21. void WRITE_COM_DATA1();
  22. void WRITE_COM_DATA2();
  23. void WRITE_ZIFU();

  24. //上電延時子程序
  25. void DELAY()
  26. {   uint i,j;
  27.     for(i=0;i<2;i++)
  28.         {
  29.                 for(j=0;j<5;j++);
  30.         }
  31. }

  32. //向LCD寫入要顯示的字符的函數
  33. void WRITE_ZIFU()
  34. {
  35.      D_ADDR=&DATA_ADDR;//取數據口地址
  36.      *D_ADDR=DAT2;//將顯示的字符寫入LCD的數據單元
  37.      DELAY();
  38.      C_ADDR= &COM_ADDR;//取命令口地址
  39.      *C_ADDR=COM;//將命令寫入LCD的命令單元
  40.      DELAY();
  41. }

  42. //向LCD寫入無參數命令的函數
  43. void WRITE_COM_DATA0()
  44. {    C_ADDR=&COM_ADDR;//取命令口地址
  45.      *C_ADDR=COM;//將命令寫入LCD的命令單元
  46.      DELAY();   
  47. }

  48. //向LCD寫入只有一個參數命令的函數
  49. void WRITE_COM_DATA1()
  50. {    D_ADDR= &DATA_ADDR;//取數據口地址
  51.      *D_ADDR=DAT1;//將參數或者數據寫入LCD的數據單元
  52.      DELAY();
  53.      C_ADDR= &COM_ADDR;//取命令口地址
  54.      *C_ADDR=COM;//將命令寫入LCD的命令單元
  55.      DELAY();
  56. }

  57. //向LCD寫入有2個參數命令的函數
  58. void WRITE_COM_DATA2()
  59. {    D_ADDR=&DATA_ADDR;//取數據口地址
  60.      *D_ADDR=DAT1;//將參數1或者數據1寫入LCD的數據單元
  61.      DELAY();
  62.      *D_ADDR=DAT2;//將參數2或者數據2寫入LCD的數據單元
  63.      DELAY();
  64.      C_ADDR=&COM_ADDR;//取命令口地址
  65.      *C_ADDR=COM;//將命令寫入LCD的命令單元
  66.      DELAY();
  67. }


  68. //LCD初始化函數
  69. void LCD_InIt()
  70. {     
  71. //顯示區域設置
  72.         DAT1=0x00;//設置文本顯示區首地址,首地址為屏幕的左上角
  73.         DAT2=0x00;
  74.             COM=0x40;//設置文本顯示區首地址的命令
  75.         WRITE_COM_DATA2();//雙參數函數。將文本顯示區首地址寫入LCD

  76.             DAT1=16;//設置文本顯示區域寬度,即一行顯示所占字節數.每行16個字符
  77.             DAT2=0;                                          
  78.             COM=0x41;//設置文本顯示區域寬度的命令
  79.         WRITE_COM_DATA2();//雙參數函數。將文本顯示區寬度寫入LCD

  80.             DAT1=0x00;//設置顯示區域首地址,或文本屬性區域首地址
  81.             DAT2=0x00;
  82.             COM=0x42;//設置顯示區域首地址或文本屬性區域首地址的命令
  83.         WRITE_COM_DATA2();//雙參數函數。顯示區域首地址或文本屬性區域首地址寫入LCD

  84.             DAT1=0x10;/ /設置圖形顯示區域寬度或為文本屬性區域寬度,即一行顯示所占字節數
  85.         DAT2=0x00;
  86.             COM=0x43;//設置圖形顯示區域寬度或為文本屬性區域寬度的命令
  87.         WRITE_COM_DATA2();//雙參數函數。顯示區域首地址或文本屬性區域首地址寫入LCD

  88. //顯示光標設置
  89.             COM=0xA1;//光標形狀設置命令
  90.         WRITE_COM_DATA0();//無參數函數。光標形狀設置命令寫入LCD

  91. //設置光標初始位置,是字符行和字符列,第0行第0列
  92.             DAT1=0x00;//設置光標列位置
  93.         DAT2=0x00;//設置光標行位置
  94.             COM=0x21;//設置光標行和列位置的命令
  95.         WRITE_COM_DATA2();//雙參數函數。光標行和列位置寫入LCD

  96. //顯示方式設置,使用內部字符發生器
  97.             COM=0x80;//顯示方式設置,邏輯"或"合成
  98.         WRITE_COM_DATA0();//無參數函數。顯示方式設置命令寫入LCD

  99. //顯示開關方式
  100.             COM=0x97;//僅用文本顯示
  101.         WRITE_COM_DATA0();//無參數函數。僅用文本顯示方式命令寫入LCD
  102. }


  103. //LCD在規定位置顯示字符。行為Y,列為X,要顯示的字符預先放在zifu變量中
  104. void LCD_DISP(uchar y,uchar x,uchar zifu)
  105. {
  106.         DAT1=y*16+x;//設置顯示RAM首地址,水平方向字符數
  107.         DAT2=0;//固定送0
  108.         COM=0x24;//設置將要進行操作的顯示緩沖區(RAM)的一個單元地址
  109.         WRITE_COM_DATA2();//雙參數函數。設置將要顯示的字符位置  

  110.         DAT2=zifu;//要顯示的字符
  111.         COM=0xc4;//數據寫,地址不變
  112.         WRITE_ZIFU();//單參數函數。將要顯示的字符在規定的(x,y)位置寫入LCD ,在LCD上顯示該字符
  113. }

  114. //清顯示緩沖區(16*8單元)
  115. void clear(void)
  116. {
  117.       uchar i,j;
  118.       for(i=0;i<8;i++)
  119.       {
  120.          for(j=0;j<16;j++)
  121.              LCD_DISP(i,j,0x00);
  122.       }
  123. }
  124. void main()
  125. {  
  126.             TMOD = 0x01;
  127.          TH0 = (65536-20000)/256;
  128.          TL0 = (65536-20000)%256;
  129.          ET0 = 1;  
  130.          TR0 = 1;

  131.          EX1 = 1; //中斷int1
  132.          IT1 = 1;

  133.          EX0 = 1; //中斷int0
  134.          IT0 = 1;

  135.           EA = 1;
  136.         SP=0x60;
  137.     DELAY();//上電延時
  138.     DELAY();
  139.     LCD_InIt();//LCD初始化設置
  140.     clear();//清顯示緩沖區(16*8單元),屏幕全黑
  141.         while(1)
  142.         {
  143.            LCD_DISP(3,2,zifuma[year/1000]);
  144.        LCD_DISP(3,3,zifuma[year%1000/100]);
  145.            LCD_DISP(3,4,zifuma[year%1000%100/10]);
  146.        LCD_DISP(3,5,zifuma[year%1000%100%10]);
  147.        LCD_DISP(3,6,0x0D);
  148.        LCD_DISP(3,7,zifuma[mounth/10]);
  149.        LCD_DISP(3,8,zifuma[mounth%10]);
  150.        LCD_DISP(3,9,0x0D);
  151.        LCD_DISP(3,10,zifuma[day/10]);
  152.        LCD_DISP(3,11,zifuma[day%10]);

  153.        LCD_DISP(4,3,zifuma[hour/10]);
  154.        LCD_DISP(4,4,zifuma[hour%10]);
  155.        LCD_DISP(4,5,0x0D);
  156.        LCD_DISP(4,6,zifuma[fen/10]);
  157.        LCD_DISP(4,7,zifuma[fen%10]);
  158.        LCD_DISP(4,8,0x0D);
  159.        LCD_DISP(4,9,zifuma[second/10]);
  160.        LCD_DISP(4,10,zifuma[second%10]);
  161.          P1=k2;
  162.         }
  163. }
  164. int_1k2() interrupt 2
  165. {
  166.         if(k2==6)
  167.         k2=0;
  168.         else
  169.         k2++;
  170.                 if(k2==0)
  171.         {
  172.         DAT1=0x00;//設置光標列位置
  173.     DAT2=0x00;//設置光標行位置       
  174.         }
  175.         else if(k2==1)
  176.         {
  177.         DAT1=0x09;//設置光標列位置
  178.     DAT2=0x04;//設置光標行位置
  179.         }
  180.         else if(k2==2)
  181.         {
  182.         DAT1=0x06;//設置光標列位置
  183.     DAT2=0x04;//設置光標行位置
  184.         }
  185.         else if(k2==3)
  186.         {
  187.         DAT1=0x03;//設置光標列位置
  188.     DAT2=0x04;//設置光標行位置
  189.         }
  190.         else if(k2==4)
  191.         {
  192.         DAT1=0x0a;//設置光標列位置
  193.     DAT2=0x03;//設置光標行位置
  194.         }
  195.         else if(k2==5)
  196.         {
  197.         DAT1=0x07;//設置光標列位置
  198.     DAT2=0x03;//設置光標行位置
  199.         }
  200.         else if(k2==6)
  201.         {
  202.         DAT1=0x02;//設置光標列位置
  203.     DAT2=0x03;//設置光標行位置
  204.         }
  205.     COM=0x21;//設置光標行和列位置的命令
  206.     WRITE_COM_DATA2();//雙參數函數。光標行和列位置寫入LCD


  207. }
  208. int_0k1() interrupt 0
  209. {
  210.         if(k2==1)
  211.         {
  212.          if(second==59)
  213.          second=0;
  214.          else
  215.          second++;
  216.         }
  217.         else if(k2==2)
  218.         {
  219.          if(fen==59)
  220.          fen=0;
  221.          else
  222.          fen++;
  223.         }
  224.         else if(k2==3)
  225.          {
  226.          if(hour==23)
  227.           hour=0;
  228.           else
  229.           hour++;
  230.           }
  231.          else if(k2==4)
  232.         {
  233.          if(year%4==0)
  234.            {
  235.             if(mounth==2)
  236.                     {
  237.                   if(day==29)
  238.                   day=1;
  239.                   else
  240.                   day++;
  241.                  }
  242.                 else if(mounth==1|mounth==3|mounth==5|mounth==7|mounth==8|mounth==10|mounth==12)
  243.                     {
  244.                   if(day==31)
  245.                   day=1;
  246.                   else
  247.                   day++;
  248.                   }
  249.                 else if(mounth==4|mounth==6|mounth==9|mounth==11)
  250.                  {
  251.                   if(day==30)
  252.                   day=1;
  253.                   else
  254.                   day++;
  255.                  }
  256.            }
  257.            else        if(year%4!=0)
  258.            {
  259.             if(mounth==2)
  260.                     {
  261.                   if(day==28)
  262.                   day=1;
  263.                   else
  264.                   day++;
  265.                  }
  266.                 else if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10||mounth==12)
  267.                     {
  268.                   if(day==31)
  269.                   day=1;
  270.                   else
  271.                   day++;
  272.                   }
  273.                 else if(mounth==4||mounth==6||mounth==9||mounth==11)
  274.                  {
  275.                   if(day==30)
  276.                   day=1;
  277.                   else
  278.                   day++;
  279.                  }
  280.            }
  281.          }
  282.         else if(k2==5)
  283.          {
  284.          if(mounth==12)
  285.           mounth=1;
  286.           else
  287.           mounth++;
  288.           }
  289.            else if(k2==6)
  290.          year++;

  291. }
  292. timer0() interrupt 1
  293. {
  294.        
  295.         TH0 = (65536-20000)/256;
  296.         TL0 = (65536-20000)%256;
  297.    if(year%4==0)
  298.    {
  299.         if(mounth==2)
  300.         {
  301.          if(count==49)
  302.          {
  303.           count=0;
  304.           if(second==59)
  305.           {
  306.           second=0;
  307.             if(fen==59)
  308.                   {
  309.                    fen=0;
  310.                    if(hour==23)
  311.                    {
  312.                         hour=0;
  313.                          if(day==29)
  314.                             {
  315.                               day=1;
  316.                               if(mounth==12)
  317.                                {
  318.                                     mounth=1;
  319.                                      year++;
  320.                                    }
  321.                                     else
  322.                                     mounth++;
  323.                              }
  324.                         else
  325.                         day++;               
  326.                           }
  327.                else
  328.                    hour++;
  329.                   }
  330.             else
  331.             fen++;
  332.             }
  333.           else
  334.           second++;
  335.           }
  336.         else
  337.         count++;
  338.         }
  339.     else
  340.         ;
  341.   }
  342.   if(year%4!=0)
  343.    {
  344.           if(mounth==2)
  345.         {
  346.          if(count==49)
  347.          {
  348.           count=0;
  349.           if(second==59)
  350.           {
  351.           second=0;
  352.             if(fen==59)
  353.                   {
  354.                    fen=0;
  355.                    if(hour==23)
  356.                    {
  357.                         hour=0;
  358.                          if(day==28)
  359.                             {
  360.                               day=1;
  361.                               if(mounth==12)
  362.                                {
  363.                                     mounth=1;
  364.                                      year++;
  365.                                    }
  366.                                     else
  367.                                     mounth++;
  368.                              }
  369.                         else
  370.                         day++;               
  371.                           }
  372.                else
  373.                    hour++;
  374.                   }
  375.             else
  376.             fen++;
  377.             }
  378.           else
  379.           second++;
  380.           }
  381.         else
  382.         count++;
  383.         }
  384.         else
  385.         ;
  386.   }
  387.   if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10||mounth==12)
  388.     {
  389.          if(count==49)
  390.          {
  391.           count=0;                                    
  392.           if(second==59)
  393.           {
  394.           second=0;
  395.             if(fen==59)
  396.                   {
  397.                    fen=0;
  398.                    if(hour==23)
  399.                    {
  400.                         hour=0;
  401.                          if(day==31)
  402.                             {
  403.                               day=1;
  404.                               if(mounth==12)
  405.                                {
  406.                                     mounth=1;
  407.                                      year++;
  408.                                    }
  409.                                     else
  410.                                     mounth++;
  411.                              }
  412.                         else
  413.                         day++;               
  414.                           }
  415.                else
  416.                    hour++;
  417.                   }
  418.             else
  419.             fen++;
  420.             }
  421.           else
  422.           second++;
  423.           }
  424.         else
  425.         count++;
  426.         }
  427.     if(mounth==4||mounth==6||mounth==9||mounth==11)
  428.     {
  429.          if(count==49)
  430.          {
  431.           count=0;
  432.           if(second==59)
  433.           {
  434.           second=0;
  435.             if(fen==59)
  436.                   {
  437.                    fen=0;
  438.                    if(hour==23)
  439.                    {
  440.                         hour=0;
  441.                          if(day==30)
  442.                             {
  443.                               day=1;
  444.                               if(mounth==12)
  445.                                {
  446.                                     mounth=1;
  447.                                      year++;
  448.                                    }
  449.                                     else
  450.                                     mounth++;
  451.                              }
  452.                         else
  453.                         day++;               
  454.                           }
  455.                else
  456.                    hour++;
  457.                   }
  458.             else
  459.             fen++;
  460.             }
  461.           else
  462.           second++;
  463.           }




  464. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
回復

使用道具 舉報

板凳
ID:99130 發表于 2017-5-6 11:27 | 只看該作者
不顯示時間嗎?
回復

使用道具 舉報

地板
ID:192650 發表于 2017-5-6 19:18 | 只看該作者

下面就是時間
回復

使用道具 舉報

5#
ID:99130 發表于 2017-5-6 19:24 | 只看該作者

那數碼管的作用是顯示星期咯
回復

使用道具 舉報

6#
ID:192650 發表于 2017-5-6 19:50 | 只看該作者
越快樂越墮落 發表于 2017-5-6 19:24
那數碼管的作用是顯示星期咯

不是,數碼管我是自己加上去顯示K1按了幾下
回復

使用道具 舉報

7#
ID:464106 發表于 2019-1-7 20:37 | 只看該作者
給力哦
回復

使用道具 舉報

8#
ID:750850 發表于 2020-5-13 15:35 | 只看該作者
能加上溫度嗎?
回復

使用道具 舉報

9#
ID:848242 發表于 2020-11-24 10:28 | 只看該作者
可以,實用,解決問題了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91最新在线视频 | 日本黄色一级片视频 | 亚洲va在线va天堂va狼色在线 | 一区二区三区不卡视频 | 国产精品久久久久免费 | 黑人巨大精品 | 国产精品国产三级国产aⅴ无密码 | 国产在线区 | 国产成人精品网站 | 久久精品在线 | 成人免费在线观看 | 97国产精品视频 | 欧美日韩亚洲一区 | 日日夜夜精品免费视频 | 精品久久久久久 | 99re热精品视频 | japan21xxxxhd美女| 欧美国产一区二区 | 免费观看av | 亚洲精品国产电影 | 蜜桃在线视频 | 国产一区2区 | 最近中文字幕免费 | 在线一区二区三区 | 精品日韩一区二区 | 精品国产乱码 | a级黄色网 | 久久国产精品亚洲 | 国产精品爱久久久久久久 | 中文在线一区二区 | 国产一区二区三区久久久久久久久 | 日韩一区二区免费视频 | 天天操天天射综合 | 激情久久久久 | 在线天堂免费中文字幕视频 | 亚洲国产精品一区二区第一页 | 日韩免费av | 毛片免费视频 | 伊人久久免费 | www.亚洲一区二区三区 | 欧美激情综合五月色丁香小说 |