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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

Proteus仿真51單片機電子日歷時鐘萬年歷+矩陣按鍵+數(shù)碼管+設置時間

  [復制鏈接]
跳轉到指定樓層
樓主
ID:598540 發(fā)表于 2020-6-29 12:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.數(shù)碼管顯示
2.時間和日期每隔5秒自動切換一次
3.數(shù)碼管顯示
4.可設置時間和日期
5.矩陣按鍵控制,可更改
6.自動判斷閏年

1.按下切換按鍵可切換當前顯示時間還是日期
2.按下設置按鍵進入時間和日期的設置,設置哪一項,哪一項下面就會出現(xiàn)兩個點
3.再次按下設置按鍵即可推出設置繼續(xù)運行
4.自動判斷閏年
5.日期更正(比如當前為5月31日,當切換月份時,切換到6月,則天數(shù)自動由31改為30)

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg52.h>

  2. sbit key0 = P3^0; //年份 時間 切換
  3. sbit key1 = P3^1; //設置
  4. sbit key2 = P3^2; //增加
  5. sbit key3 = P3^3; //減少

  6. sbit led0 = P3^7;  //時間日期設置指示燈
  7. sbit led1 = P3^6; // 正常運行指示燈
  8. sbit led2 = P3^5; // 當前為時間指示燈
  9. sbit led3 = P3^4; // 閏年指示燈

  10. sbit s1 = P0^0;
  11. sbit s2 = P0^1;
  12. sbit s3 = P0^2;

  13. typedef unsigned char uchar;
  14. typedef unsigned int uint;

  15. uint smg[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,
  16.                           0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  17. uchar time[8],date[8];
  18. int year = 2020;
  19. char month=6,day=28,hour=18,min=22,s=0;
  20. uchar t=0; //日期和時間切換控制變量

  21. void delay(uint i);                         //延時函數(shù)
  22. void smg_show(char num_[]);         //數(shù)碼管顯示函數(shù)
  23. int keyscan();                                 //矩陣按鍵掃描函數(shù)
  24. void data_edit();                         //數(shù)碼管數(shù)據(jù)編輯函數(shù)
  25. char year_judge();                         //閏年判斷函數(shù)
  26. void relationship();                 //日期時間關系編輯函數(shù)
  27. void set_time(uchar change); //時間日期設置函數(shù)
  28. void Timer0Init();                         //定時器0初始化函數(shù)

  29. void main()
  30. {        
  31.         uchar key;
  32.         uchar change=0; //為1,顯示日期   為0,顯示時間
  33.         Timer0Init();   //定時器0初始化
  34.         led1 = 0;                //正常運行指示燈
  35.         year_judge();
  36.         //led3 = 0;
  37.         while(1)
  38.         {        
  39.                 key = keyscan();         //掃描矩陣按鍵

  40.                 if(t==5)
  41.                 {
  42.                    change = ~change;
  43.                    t = 0;
  44.                 }
  45.                
  46.                 if(change)led2 = 1;
  47.                 else led2 = 0;        

  48.                 if(key == 0)
  49.                 {
  50.                         led1 = 1;
  51.                         set_time(change); //時間日期設置函數(shù)
  52.                         led1 = 0;
  53.                 }

  54.                 if(key == 1)
  55.                 {
  56.                         change = ~change;
  57.                         t = 0;        
  58.                 }               

  59.                
  60.                  
  61.                 relationship();        //時間日期關系控制
  62.                 data_edit();//數(shù)碼管參數(shù)編輯函數(shù)
  63.                 if(s%2)
  64.                 {
  65.                         time[2] = 11;
  66.                         time[5] = 11;
  67.                 }
  68.                 if(change)
  69.                         smg_show(date);           //數(shù)碼管顯示函數(shù)
  70.                 else
  71.                         smg_show(time);           //數(shù)碼管顯示函數(shù)
  72.            
  73.         }


  74. }


  75. /*****************************************
  76.            延時函數(shù)
  77. *****************************************/
  78. void delay(uint x)
  79. {
  80.         uchar y;
  81.         for(x;x>0;x--)
  82.                 for(y=110;y>0;y--);        
  83. }


  84. /*****************************************
  85.            數(shù)碼管顯示函數(shù)
  86. *****************************************/
  87. void smg_show(char num_[])
  88. {
  89.         char i=0;                                
  90.         for(i=0;i<8;i++)
  91.         {
  92.                 switch(i)
  93.                 {
  94.                         case 0:
  95.                                         s3 = 0;s2 = 0;s1 = 0;break;
  96.                         case 1:
  97.                                         s3 = 0;s2 = 0;s1 = 1;break;
  98.                         case 2:
  99.                                         s3 = 0;s2 = 1;s1 = 0;break;
  100.                         case 3:
  101.                                         s3 = 0;s2 = 1;s1 = 1;break;
  102.                         case 4:
  103.                                         s3 = 1;s2 = 0;s1 = 0;break;
  104.                         case 5:
  105.                                         s3 = 1;s2 = 0;s1 = 1;break;
  106.                         case 6:
  107.                                         s3 = 1;s2 = 1;s1 = 0;break;
  108.                         case 7:
  109.                                         s3 = 1;s2 = 1;s1 = 1;break;
  110.                 }
  111.                 P1=~smg[num_[i]];
  112.                 delay(10);
  113.                 P1=0xff;
  114.                 delay(10);
  115.                
  116.         }

  117. }

  118. /*****************************************
  119.            矩陣按鍵函數(shù)
  120. *****************************************/
  121. int keyscan()
  122. {
  123.         uchar i,j=0;
  124.         uchar d = 50;
  125.         uint k = 0xff;
  126.         P2 = 0XF0;
  127.         if((P2&0xf0)==0xf0)
  128.                 return k;
  129.         if((P2&0xf0)==0xf0)
  130.                 return k;
  131.         for(i=0;i<4;i++)
  132.         {
  133.                 P2=~(1<<i);
  134.                 k=(P2&0xf0);
  135.                 if(k!=0xf0)
  136.                 {
  137.                         while((k&(1<<(j+4))))
  138.                         j++;
  139.                         k = i*4+j;
  140.                         P2 = 0xf0;
  141.                         while(P2!=0xf0);
  142.                
  143.                         break;
  144.                 }
  145.         }
  146.                 return k;
  147. }

  148. /*****************************************
  149.            數(shù)據(jù)編輯函數(shù)函數(shù)
  150. *****************************************/
  151. void data_edit()
  152. {
  153.          time[0] = hour/10;
  154.          time[1] = hour%10;
  155.          time[2] = 10;
  156.          time[3] = min/10;
  157.          time[4] = min%10;
  158.          time[6] = s/10;
  159.          time[7] = s%10;
  160.          time[5] = 10;         

  161.          date[0] = year/1000;
  162.          date[1] = year/100%10;
  163.          date[2] = year/10%10;
  164.          date[3] = year%10;
  165.          //date[2] = 10;
  166.          date[4] = month/10;
  167.          date[5] = month%10;
  168.          //date[5] = 10;
  169.          date[6] = day/10;
  170.          date[7] = day%10;
  171. }

復制代碼
全部資料51hei下載地址:
電子日歷時鐘.zip (73.82 KB, 下載次數(shù): 238)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:515926 發(fā)表于 2020-7-3 14:41 | 只看該作者
感謝樓主提供的全面素材,為我等初學者帶來福音。
回復

使用道具 舉報

板凳
ID:819173 發(fā)表于 2020-9-15 21:50 | 只看該作者
請問下,keyscan函數(shù)里,
if((P2&0xf0)==0xf0)
       return k;
寫了兩遍,是寫錯了嗎
回復

使用道具 舉報

地板
ID:852300 發(fā)表于 2020-12-4 11:24 | 只看該作者
早幾年這類產品銷量不錯!
回復

使用道具 舉報

5#
ID:858511 發(fā)表于 2020-12-11 09:32 | 只看該作者
感謝樓主的分享,對我有許多的幫助
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清不卡 | 天天宗合网 | 91精品国产一区二区三区香蕉 | 亚洲黄色片免费观看 | 第四色播日韩第一页 | 五月网婷婷 | 国产亚洲欧美日韩精品一区二区三区 | 成人午夜性成交 | 91超碰caoporn97人人 | 欧美成人精品在线 | 本道综合精品 | 日本在线小视频 | 国产激情在线 | 91免费版在线观看 | 99re在线视频观看 | 精品国产乱码久久久久久牛牛 | 久久99精品视频 | 草草网| 精品一区二区三区中文字幕 | 亚洲天天干 | 五月综合激情在线 | 尤物视频在线免费观看 | 中文字幕在线观看一区 | 国产成在线观看免费视频 | 久久久精品网站 | 日韩精品一区二区在线观看 | 91亚洲国产成人久久精品网站 | 国产高清一区二区三区 | 国产资源在线视频 | 国产乱码精品一区二区三区av | 日韩成人| 国产精品日韩欧美一区二区三区 | 久久99国产精一区二区三区 | 久久久久久久91 | 国产精品视频yy9299一区 | 亚洲综合字幕 | 中文字幕在线免费观看 | 国产成人精品一区二区三区四区 | 中文字幕一区二区三区精彩视频 | 亚洲国产成人久久综合一区,久久久国产99 | 日一区二区 |