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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

protues仿真 單片機可調時鐘

[復制鏈接]
跳轉到指定樓層
樓主
可調時鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


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

  2. typedef unsigned                 char         u8;                                                        // 定義無符號8位類型
  3. typedef unsigned  short int                 u16;                                                // 定義無符號16位類型
  4. typedef unsigned  long         int         u32;                                                // 定義無符號32位類型

  5. sbit Button1 = P1^0;                                                                                // 模式按鈕
  6. sbit Button2 = P1^1;                                                                                // 加號按鈕
  7. sbit Button3 = P1^2;                                                                                // 減號按鈕

  8. u8 DisBuf[8] = { 12,30,17,30,00,17,00,00 };                                        // 數碼管初始值無顯示

  9. u8 Hour=12,Min=30,Sec=0;
  10. u32 seconds = 0;

  11. /********************************************************************
  12. * 函數功能 :延時函數
  13. * 入口參數 :None       
  14. * 出口參數 : Time:延時時間
  15. * 其他描述  
  16. ********************************************************************/
  17. void Delay_us( u16 Time )
  18. {
  19.         while( Time-- );
  20. }

  21. /********************************************************************
  22. * 函數功能 :數碼管驅動
  23. * 入口參數 :None       
  24. * 出口參數 : 按鍵識別碼       
  25. * 其他描述  
  26. ********************************************************************/
  27. void Seg_Drive( void )
  28. {       
  29.         // 共陽極數碼管的數碼表       
  30.         u8 code codebuf[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf,0xff};
  31.         u8 i = 0;
  32.         for( i=0;i<8;i++ )                                                                                                // 有8個為共陰極數碼管
  33.         {
  34.                 P3 = 0xff;                                                                                                        // 關閉顯示,消除鬼影
  35.                 P3 = ~(1<<i);                                                                                                // 輸出片選
  36.                 P2 = ~codebuf[DisBuf[i]];                                                                         // 根據緩沖區顯示數據且數碼管顯示數字2015.09.15
  37.                 Delay_us( 200 );                                                                                        // 200 us的時間
  38.         }
  39. }

  40. /********************************************************************
  41. * 函數功能 :數據拆分       
  42. * 入口參數 :None       
  43. * 出口參數 : Num:兩位數據
  44. * 其他描述  
  45. ********************************************************************/
  46. void SegDisp( u8 hour,u8 min,u8 sec )
  47. {
  48.         DisBuf[0] = hour/10;                                                  //
  49.         DisBuf[1] = hour%10;                                                //
  50.         DisBuf[3] = min/10;                                                  //
  51.         DisBuf[4] = min%10;                                                        //
  52.         DisBuf[6] = sec/10;                                                  //
  53.         DisBuf[7] = sec%10;                                                        //
  54. }
  55.                                   
  56. /********************************************************************
  57. * 函數功能 :ScanKey       
  58. * 入口參數 :None       
  59. * 出口參數 : 按鍵識別碼       
  60. * 其他描述  矩陣按鍵的掃描       
  61. ********************************************************************/
  62. u8 ScanKey( void )
  63. {
  64.         if( 0 == Button1  )                return 'M';        // 返回對數據執行的模式M
  65.         if( 0 == Button2  )                return '+';        // 返回對數據執行的加數+
  66.         if( 0 == Button3  )                return '-'; // 返回對數據執行的減數-
  67.         return 0;
  68. }

  69. /********************************************************************
  70. * 函數功能 :按鍵判斷、消除抖動、松手檢測       
  71. * 入口參數 :None       
  72. * 出口參數 : 按鍵識別碼       
  73. * 其他描述 :       
  74. ********************************************************************/
  75. u8 ReadKey( void )
  76. {
  77.         u8 tmp;

  78.         tmp = ScanKey();                                                // 讀取按鍵值
  79.         if( 0 == tmp ) return 0;                                // 判斷是否有按鍵按下
  80.         if( tmp!=ScanKey() ) return 0;                        // 讀回來的值是否與原來相同
  81.         while( 0 != ScanKey()  );                                // 讀回來的按鍵為0,也就是說是松手檢測
  82.         return tmp;                                                                // 返回鍵值
  83. }

  84. /********************************************************************
  85. * 函數功能 :定時器初始化
  86. * 入口參數 :None       
  87. * 出口參數 : None
  88. * 其他描述 :       
  89. ********************************************************************/
  90. void time_init( void )
  91. {
  92.         TMOD = 0x01;                                                                         // 設置定時T0器工作方式1                        
  93.         EA = 1;                                                                                        // 開啟T0總中斷
  94.         TR0 = 1;                                                                                // 啟動T0定時器
  95.         ET0 = 1;                                                                                // 開啟計數/定時器T0中斷
  96. }


  97. /********************************************************************
  98. * 函數功能 :用戶程序入口       
  99. * 入口參數 :None       
  100. * 出口參數 : None
  101. * 其他描述 :       
  102. ********************************************************************/
  103. void main( void )
  104. {
  105.         u8 Num = 0;
  106.         static u8 Mode = 0;               
  107.        
  108.         time_init();                                                                        // 定時器初始化
  109.         while( 1 )
  110.         {
  111.                 switch( ReadKey() )
  112.                 {
  113.                         // 三種模式:時、分、秒
  114.                         case 'M':        Mode = (Mode+1)%4;                break;       
  115.                         // 時鐘調整 增操作
  116.                         case '+':       
  117.                                 if( 1 == Mode )                                                // 小時調整
  118.                                 {
  119.                                         Hour = (Hour+1)%24;                                // 一天 24 小時               
  120.                                 }
  121.                                 else if ( 2== Mode )
  122.                                 {
  123.                                         Min = (Min+1)%60;                                // 一小時60 分鐘       
  124.                                 }
  125.                                 else if ( 3== Mode )
  126.                                 {
  127.                                         Sec = (Sec+1)%60;                                // 一分鐘 60 秒
  128.                                 }
  129.                         break;
  130.                                
  131.                         // 時鐘調整 減操作                       
  132.                         case '-':               
  133.                                 if( 1 == Mode )                                                // 小時調整
  134.                                 {
  135.                                         Hour == 0 ? Hour =23 : Hour--;        // 一天 24 小時               
  136.                                 }
  137.                                 else if ( 2== Mode )
  138.                                 {
  139.                                         Min == 0 ? Min =59 : Min--;                // 一小時60 分鐘       
  140.                                 }
  141.                                 else if ( 3== Mode )
  142.                                 {
  143.                                         Sec == 0 ? Sec =59 : Sec--;                // 一分鐘 60 秒
  144.                                 }
  145.                         break;
  146.                 }
  147.                
  148.                 SegDisp(Hour,Min,Sec);                                                // 數碼管數據拆分
  149.                 Seg_Drive();                                                                // 數碼管驅動
  150.        
  151. ……………………

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

所有資料51hei提供下載:
Chap6_3(可調時鐘).rar (72.38 KB, 下載次數: 26)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:348542 發表于 2018-6-10 09:33 來自觸屏版 | 只看該作者
(⊙o⊙)哇,我還不會
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码一区二区三区a | 美女久久久久久久 | 日韩成人影院在线观看 | 亚洲欧美中文日韩在线v日本 | 日韩在线视频一区二区三区 | 亚洲视频在线观看免费 | 罗宾被扒开腿做同人网站 | 久久久成人精品 | 69av在线视频 | 亚洲精品电影在线观看 | 九九久久国产 | 成人免费视频网站在线观看 | 黄片毛片在线观看 | 狠狠操av | 国产精品区一区二区三区 | 欧美中文字幕在线观看 | 免费精品| 国产91网站在线观看 | 狠狠艹| 91免费视频观看 | 密桃av | 麻豆国产一区二区三区四区 | 一区二区三区四区国产 | 国产精品亚洲综合 | 91在线一区| 国产高清一区二区三区 | 国产欧美日韩综合精品一区二区 | 中文字幕一区在线观看视频 | 操操日| 国产精品96久久久久久 | 日日摸日日碰夜夜爽2015电影 | 99精品免费在线观看 | 亚洲风情在线观看 | 91日韩在线 | 精品久久电影 | 美女天天操 | 亚洲国产中文字幕 | 久久日韩精品一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 国产一区精品 | 91精品国产综合久久久久久丝袜 |