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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

高仿真單片機PCF8583數碼管電子鐘,剛做的課設

[復制鏈接]
跳轉到指定樓層
樓主
直接發包 兩個包 ,兩個電路有點差別 ,程序是一樣的,都proteus圖加源代碼 ,加生成好的hex、
帶小時 分鐘時間設置和 12/24 小時顯示按鈕
基于51單片機和PCF8583的電子鐘設計proteus仿真原理圖如下(工程文件可到附件下載):



單片機源程序如下:
  1. //-------------------------------------------------------------------
  2. //名稱:高度仿真數碼管電子鐘
  3. //-------------------------------------------------------------------
  4. //說明:本例在Proteus中選用了高仿真的電子鐘元器件,并添加了時分調整
  5. //      功能,閃爍顯示,AM/PM切換,12h/24h制選擇等。
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. uchar tCount=0;
  11. //時鐘設置開關及按鍵
  12. sbit K1=P0^0;            //12h/24h
  13. sbit K2=P0^1;            //設置
  14. sbit K3=P0^2;           //小時加
  15. sbit K4=P0^3;            //時鐘加
  16. //當前時間:時分秒
  17. uchar current_Time[ ]={12,59,00};
  18. //時分秒顯示緩沖(各占兩位),最后的0x00控制AM,PM及發光管閃光等
  19. uchar disp_Buffer[ ]={0,0,0,0,0,0,0x00};
  20. //12h,24h,AM,PM及SET控制標志
  21. uchar f_24=0,f_AM=0,f_set=0;
  22. //--------------------------------------------------------------------
  23. //延時
  24. //--------------------------------------------------------------------
  25. void DelayMS(uint x)
  26. {
  27.         uchar i;
  28.         while(--x) for (i=0;i<120;i++);         
  29. }
  30. //--------------------------------------------------------------------
  31. //加時
  32. //--------------------------------------------------------------------
  33. void Add_Hour()
  34. {
  35.         //小時數累加
  36.         ++current_Time[0];
  37.         //24小時制時滿24歸零
  38.         if (f_24 ==1 && current_Time[0] == 24 ) current_Time[0] = 0;
  39.         //12h制滿13歸1,且取反AM與PM標志
  40.         if (f_24==0 && current_Time[0]==13)
  41.         {
  42.                  current_Time[0]=1;
  43.                 //將原來的AM與PM位取反
  44.         disp_Buffer[6]=(disp_Buffer[6]&0xFE)|(~(disp_Buffer[6]&0x01)&0x01);
  45.          }
  46.         
  47. }
  48. //--------------------------------------------------------------------
  49. //加分
  50. //--------------------------------------------------------------------
  51. void Add_Miniute()
  52. {
  53.         //分鐘數累加
  54.         ++current_Time[1];
  55.         if (current_Time[1]==60)
  56.         {
  57.                 current_Time[1]=0;
  58.                 Add_Hour();
  59.         }        
  60. }
  61. //--------------------------------------------------------------------
  62. //根據當前時間刷新時分秒顯示緩沖
  63. //--------------------------------------------------------------------
  64. void Refresh_Disp_Buffer()
  65. {
  66.         uchar i;
  67.         //刷新顯示緩沖
  68.         for (i=0;i<3;i++)
  69.         {
  70.                 disp_Buffer[2*i] = current_Time[i]/10;
  71.                 disp_Buffer[2*i+1] =current_Time[i]%10;
  72.         }
  73. }

  74. //--------------------------------------------------------------------
  75. //外部中斷
  76. //--------------------------------------------------------------------
  77. void EX0_INT() interrupt 0
  78. {
  79.         ++tCount;
  80.         if (tCount==25) disp_Buffer[6] &=0xF7;//每0.5秒 LED[:]點亮
  81.         if (tCount==50)                               //每秒刷新顯示緩沖等
  82.         {
  83.                 tCount=0;
  84.                 disp_Buffer[6] |=0x08;            //每1秒 LED[:]關閉
  85.                 if (++current_Time[2] == 60)              //秒遞增
  86.                 {
  87.                         current_Time[2]=0;
  88.                         Add_Miniute();               
  89.                 }
  90.                 Refresh_Disp_Buffer();                  //刷新時分秒的顯示緩沖
  91.         }
  92. }
  93. //--------------------------------------------------------------------
  94. //顯示時間
  95. //--------------------------------------------------------------------
  96. void Display_Time()
  97. {
  98.         uchar i;
  99.         for (i=0;i<7;i++)
  100.         {
  101.         P2=(disp_Buffer[i]<<4)|i|0x08;  DelayMS(5);
  102.             P2=P2&0xF7; DelayMS(5);
  103.         }
  104. }
  105. //--------------------------------------------------------------------
  106. //時鐘調整與設置
  107. //--------------------------------------------------------------------
  108. void adjust_and_set_clock()
  109. {
  110.         //設置狀態下,調整時與分,12h/24h制等
  111.         while (K2==0)
  112.         {
  113.                 //設置12h/24h制
  114.                 if (K1==0) //切換12h/24h制
  115.                 {
  116.                         f_24=1;disp_Buffer[6]|=0x02;
  117.                 }
  118.                 else
  119.                 {
  120.                         f_24=0;disp_Buffer[6]&=0xFD;
  121.                 }
  122.                 //加小時
  123.                 if (K3==0)
  124.                 {
  125.                         DelayMS(150);//小時增加時會影響am,pm標志,因此這里可調用數
  126.                         Add_Hour();
  127.                 }
  128.                 //加分鐘
  129.                 if (K4==0)
  130.                 {
  131.                         DelayMS(150);//因為加分鐘的函數會向小時進位,故單獨增加               
  132.                         current_Time[1]=(current_Time[1]+1)%60;
  133.                 }
  134.                 Refresh_Disp_Buffer();
  135.                 Display_Time();
  136.         }
  137. }
  138. //---------------------------------------------------------------------
  139. //按鍵掃描子程序
  140. //---------------------------------------------------------------------
  141. void Keyboard_scan()
  142. {
  143.          if (K1==0) //切換12h/24h制
  144.         {
  145.                 f_24=1;disp_Buffer[6]|=0x02;
  146.         }
  147.         else
  148.         {
  149.                 f_24=0;disp_Buffer[6]&=0xFD;
  150.         }
  151.         if (K2==0) //顯示或關閉"set"
  152.         {
  153.                 EX0=0;f_set=1;disp_Buffer[6] |=0x04;
  154.         }
  155.         else
  156. ……………………

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

所有資料51hei提供下載:
高仿真數碼管電子鐘.rar (28.92 KB, 下載次數: 60)
高仿真電子鐘單片機1.rar (24.51 KB, 下載次數: 57)




評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-6-7 03:18 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:371829 發表于 2018-7-15 21:01 | 只看該作者
里面的程序根本沒有關于pcf8583的程序啊
回復

使用道具 舉報

地板
ID:214276 發表于 2020-4-14 22:24 | 只看該作者
第二個下載包有源程序。浪費我5個黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 找个黄色片 | 亚洲精品电影在线观看 | 国产一级电影在线观看 | 欧美日韩不卡合集视频 | 色综合久 | 日本免费一区二区三区四区 | 亚洲看片 | 日本在线视频不卡 | 久久天天躁狠狠躁夜夜躁2014 | 日日草天天干 | 亚洲天堂一区 | 亚洲三级在线观看 | 亚洲bt 欧美bt 日本bt | 国产美女精品视频 | 亚洲女人天堂网 | 国产99久久精品一区二区300 | 97色在线观看免费视频 | 女朋友的闺蜜3韩国三级 | 亚洲天堂中文字幕 | 久久久精品一区二区 | 中文av电影 | 性xxxxx | 精品视频一区二区三区在线观看 | 欧美v片| 国产精品视频一二三 | 日韩一区二区成人 | 久久久久久国模大尺度人体 | 亚洲 91| 91 中文字幕 | 亚洲视频免费播放 | 日韩欧美操 | 久久久久久成人 | 91精品久久久久久久久久 | 日韩美女一区二区三区在线观看 | 青草久久免费视频 | 中文字幕第一页在线 | 久久久久国产 | 欧美精品1区2区3区 免费黄篇 | 亚洲综合在线播放 | 中文字幕av在线 | 日韩国产一区二区三区 |