国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

(連載1)吳鑒鷹單片機項目精講(連載)之基于單片機的數字電子鐘設計

發布時間:2014-6-12 10:53    發布者:吳鑒鷹
(連載1)吳鑒鷹單片機項目精講(連載)之基于單片機的數字電子鐘設計


先關的原理圖請點擊下載:
吳鑒鷹基于單片機的數字電子鐘.pdf (295.38 KB)
     現在來第一講,詳細解析如何制作基于單片機的數字時鐘,提供詳細的硬件原理圖和軟件程序。
開關K1:K1 = 0時,時鐘正常運行,此時不允許調整時鐘。數碼管的高兩位顯示小時,后兩位顯示分鐘,led每閃一次表示時鐘運行一次,在調整的過程中,led是停止發亮的。
一、 按鍵、開關功能說明:
* 按鍵RESET:按下能復位程序。
* 按鍵PULSE:提供單脈沖,從而實現單片機對外部脈沖的計數,利用單脈沖實現相應的位加一。
* 開關K0:K0 = 0能調整分位,K0 = 1能調整時位。
* 開關K2:k2為高電平時,使單脈沖輸入至INT1,通過外中斷實現相應值的加一功能。

二、地址分配和鏈接
* P2.7: 和寫信號一起組成字位口的片選信號,字位口的對應地址為8000H。
* P2.6: 和寫信號一起組成字位口的片選信號,字位口的對應地址為4000H。
* D0~D7: 單片機的數據總線LED顯示的內容通過D0~D7數據線從單片機傳到LED。
* P2.0~P2.5:單片機的P2口,和2764的高位地址線相連,決定2764中的存儲單元的地址。
* P1.4~P1.7: 單片機的P1端口,和發光二極管L1~L4相連,通過單片機的P1.4~P1.7控制,所以顯示秒表和時鐘的時間變化。
* P1.0: 和開關K0相連,決定時間調整的字位。
* P1.1 : 和開關K1相連,決定時間運行的模式。
* P1.2: 和開關K2相連,決定外中斷的模式選擇。

三、整體功能簡介
LED顯示模塊與單片機的鏈接中,對LED顯示模塊的讀寫和字位、段碼的選擇通過口P2.6\P2.7完成的。
外部存儲器2764是通過鎖存器373和單片機相連,并且通過P2端口的相關信號線進行地址的分配。地址范圍是0000H~1FFFH。
四、程序設計
  1. /******************************************************
  2. *程序:吳鑒鷹數字電子鐘的設計                                                           
  3. ** 這一講的主要內容: 數字電子鐘的設計原理和程序                                                                                
  4. ** 功能描述:  
  5. ** 輸 入:         
  6. ** 內容:     
  7. ** 輸 出:
  8. **         
  9. ** 全局變量:
  10. ** 調用模塊:
  11. **
  12. ** 作 者:    吳鑒鷹
  13. ** 日 期:     14.02.17

  14. 備注:有什么錯誤的地方,歡迎各大燒友指正

  15. O(∩_∩)O~
  16. *******************************************************/
  17. //變量定義和頭文件的調用
  18. //定義頭文件和各個輸入管腳以及變量聲明
  19. #include
  20. #include
  21. #define  uint unsigned int
  22. #define  uchar  unsigned char


  23. /*定義字型字位口*/
  24. #define  DIGPORT  XBYTE  [0X8000]
  25. #define  WORDPORT  XBYTE [0X4000]

  26. /*定義P1口各管腳*/
  27. sbit  K0 = P1^0;
  28. sbit  K1 = P1^1;
  29. sbit  K2 = P1^2;
  30. sbit  BEEP = P1^3;
  31. sbit  L0 = P1^4;
  32. sbit  L1 = P1^5
  33. sbit  L2 = P1^6;
  34. sbit  L3 = P1^7;

  35. uchar  data  BUFFER[2]  = {0,0};  //顯示的緩存數組,依次為低位、高位
  36. uchar  data  CLOCK[4] = {0,0,0,0};
  37. uchar  data  SECOND[2] = {0,0};

  38. /*定義運行狀態*/
  39. uchar  data  STATE = 0;
  40. /*STATE = 0;秒表*/
  41. /*STATE = 4,或者7,時鐘運行*/
  42. /* STATE = 6,時鐘時調整 */

  43. bit  bdata  SND = 0;    /*  秒表START(開始)  */
  44. bit  bdata  RST = 0;     /*秒表RESET(復位)*/

  45. /*數碼管顯示編碼“0”-“9”,"A","-"*/
  46. uchar  code  TABLE[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X40};

  47. /******************************************************
  48. *程序:主程序                                                                                                                        
  49. ** 功能描述: 主干程序
  50. ** 輸 入:         
  51. ** 內容:     
  52. ** 輸 出:
  53. **         
  54. ** 全局變量:
  55. ** 調用模塊:
  56. **
  57. ** 作 者:    吳鑒鷹
  58. ** 日 期:     14.02.17

  59. 備注:有什么錯誤的地方,歡迎各大燒友指正

  60. O(∩_∩)O~
  61. *******************************************************/
  62. void  main()
  63. {
  64.       uchar   stabak;
  65.           P1 = 0X0F;
  66.       EA = 1;
  67.       IT1 = 1;
  68.       ET0 = 1;
  69.       TMOD = 0X61;
  70.       TH0 = -5000/256;
  71.       TL0 = -5000%256;
  72.       TH1 = 0XFF;
  73.       TL1 = 0XFF;
  74.       T2CON = 0;
  75.       TH2 = -5000/256;
  76.       TL2 = -5000%256;

  77.        K0 = 1;
  78.        K1 = 1;
  79.        K2 = 1;
  80.        STATE = P1&0X07;
  81.        stabak = STATE;

  82.       for(;;)
  83.     {
  84.            switch()
  85.         {
  86.                 case 0:
  87.                 {
  88.                     EX1 = 0;
  89.                     ET1 = 1;
  90.                     ET2 = 1;
  91.                     TR1 = 1;
  92.                     SND = 1;
  93.                     L1 = 1;   
  94.                     L0 = 0;
  95.                     L2 = 0;
  96.                     SECOND[0] = 0;
  97.                     SECOND[1] = 0;
  98.                 }break;

  99.                  case   5:
  100.                 {
  101.                           IE1 = 0;
  102.                           EX1 = 1;
  103.                           ET1 = 0;
  104.                           ET2 = 0;
  105.                           TR0 = 0;
  106.                           L0 = 1;
  107.                           L1 = 0;
  108.                           L2 = 0;
  109.                 }break;

  110.                 case  6:
  111.                {
  112.                     IE1 = 0;
  113.                     EX1 = 1;
  114.                     ET1 = 0;
  115.                     ET2 = 1;
  116.                     TR0 = 0;
  117.                }break;

  118.                   default:
  119.                {
  120.                    EX1 = 0;
  121.                    ET1 = 0;
  122.                    ET2 = 1;
  123.                    L1 = 0;
  124.                                    L2 = 0;
  125.                }

  126.         }
  127.          while(STATE == stabak)
  128.      {
  129.          switch(STATE)
  130.       {
  131.          case 0:
  132.       {
  133.          BUFFER[0] = SECOND[0];
  134.          BUFFER[1] = SECOND[1];
  135.       }break;
  136.       
  137.       case 5:
  138.       {
  139.           BUFFER[0] = CLOCK[2];
  140.           BUFFER[1] = 101;/*A-*/
  141.       }break;
  142.       
  143.       case 6:
  144.       {
  145.           BUFFER[0] = 110;/*A-*/
  146.           BUFFER[1] = CLOCK[3];
  147.       }break;
  148.       
  149.       default:
  150.       {
  151.           BUFFER[0] = CLOCK[2];
  152.           BUFFER[1] = CLOCK[3];
  153.       }break;
  154.       
  155.       default:
  156.       {
  157.           BUFFER[0] = CLOCK[2];
  158.           BUFFER[1] = CLOCK[3];
  159.       }
  160.       
  161.       }
  162.       
  163.      //顯示函數
  164.      display();
  165.      K0 = 1;
  166.      K1 = 1;
  167.      K2 = 1;
  168.      STATE = P1&0X07;   
  169.      }
  170.      stabak = STATE;
  171.     }
  172. }

  173. /******************************************************
  174. *程序:子函數(1):timer0(void)                                                                                                                        
  175. ** 功能描述:  用定時器0實現24小時的時鐘顯示
  176. ** 輸 入:         
  177. ** 內容:     
  178. ** 輸 出:
  179. **         
  180. ** 全局變量:
  181. ** 調用模塊:
  182. **
  183. ** 作 者:    吳鑒鷹
  184. ** 日 期:     14.02.17

  185. 備注:有什么錯誤的地方,歡迎各大燒友指正

  186. O(∩_∩)O~
  187. *******************************************************/
  188. void  timer0(void)   interrupt  1  using 1
  189. {
  190.     /*重置定時器初值*/
  191. TH0 = -5000/256;
  192. TL0 = -5000%256;


  193. /*定時器處理*/
  194. CLOCK[0] = CLOCK[0]+1;
  195. if((CLOCK[0] == 50) && (STATE >= 4))
  196. {
  197.     L0 = !L0;
  198. }

  199. if(CLOCK[0] == 100)
  200. {
  201.     if(STATE >= 4)  L0 = !L0;
  202.     CLOCK[0] = 0;
  203.     CLOCK[1] = CLOCK[1] + 1;
  204.    
  205.     if(CLOCK[1] == 60)
  206.     {
  207.        CLOCK[1] = 0;
  208.     CLOCK[2] = CLOCK[2] + 1;
  209.     if(CLOCK[2] == 60)
  210.     {
  211.         CLOCK[2] == 0;
  212.      CLOCK[3] == CLOCK[3] + 1;
  213.      if(CLOCK[3] == 24)
  214.      {
  215.         CLOCK[3] = 0;
  216.      }
  217.     }
  218.     }
  219. }
  220. }

  221. /******************************************************
  222. *程序:子函數(2):intsvr1(void)                                                                                                                        
  223. ** 功能描述:  對外中斷1的按鍵脈沖進行判斷和計數,并完成對應的時間調整功能。
  224. ** 輸 入:         
  225. ** 內容:     
  226. ** 輸 出:
  227. **         
  228. ** 全局變量:
  229. ** 調用模塊:
  230. **
  231. ** 作 者:    吳鑒鷹
  232. ** 日 期:     14.02.17

  233. 備注:有什么錯誤的地方,歡迎各大燒友指正

  234. O(∩_∩)O~
  235. *******************************************************/
  236. void intsvr1(void) interrupt  2  using 2  
  237. {
  238.    if(STATE == 5)
  239.    {
  240.        CLOCK[2] == CLOCK[2] + 1;
  241.     if(CLOCK[2] == 60)  CLOCK[2] == 0;
  242.    }
  243.    if(STATE == 6)
  244.    {
  245.        CLOCK[3] == CLOCK[3] + 1;
  246.     if(CLOCK[3] == 24)  CLOCK[3] = 0;
  247.    }
  248. }

  249. /******************************************************
  250. *程序:子函數(3):display(void)                                                                                                                        
  251. ** 功能描述:  用動態顯示的方法,將當前的時間或秒表內容通過數碼管顯示。
  252. ** 輸 入:         
  253. ** 內容:     
  254. ** 輸 出:
  255. **         
  256. ** 全局變量:
  257. ** 調用模塊:
  258. **
  259. ** 作 者:    吳鑒鷹
  260. ** 日 期:     14.02.17

  261. 備注:有什么錯誤的地方,歡迎各大燒友指正

  262. O(∩_∩)O~
  263. *******************************************************/
  264. void diplay(void)
  265. {
  266.    uchar i;
  267.    uchar delay;
  268.    uchar disp;
  269.    uchar digit;
  270.    digit = 0x08;
  271.    for(i = 0;i < 2; i++)
  272.    {
  273.       if(BUFFET> 100)  
  274. {
  275.    disp = BUFFER%10 + 10;
  276. }
  277.    else  disp = BUFFER%10;
  278.    
  279.    DIGPORT = digit;
  280.    WORDPORT = TABLE[disp];
  281.    
  282.    for(delay = 0;delay <= 200;delay ++);
  283.    digit = digit >> 1;
  284.    disp = BUFFER/10;
  285.    
  286.    DIGPORT = digit;
  287.    WORDPORT = TABLE[disp];
  288.    
  289.    for(delay = 0;delay <= 200;delay ++);
  290.    digit = digit >> 1;
  291.    }
  292. }
復制代碼




本文地址:http://m.qingdxww.cn/thread-130009-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
liyong7818 發表于 2014-7-11 09:01:36
先謝謝分享,看后在發表意見
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 無線充電基礎知識及應用培訓教程2
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人扳一级aa毛片 | 日本亚洲高清乱码中文在线观看 | 99热精品在线观看 | 亚洲综合偷自成人网第页色 | 日韩高清dvd | 久久久久久久国产免费看 | 国产精品久久久久久久免费 | 逼逼无毛| 日本深夜18免费看片高清网 | 亚洲欧美在线观看首页 | 欧美影院一区二区三区 | 大又大又粗又爽女人毛片 | 麻豆资源| 91大神在线精品视频一区 | 香蕉依依精品视频在线播放 | 99热这里只有精 | 欧美日韩免费在线观看 | 高清国产一级精品毛片基地 | 在线观看欧美一区 | 99爱视频在线观看 | 欧美在线观看视频网站 | 日本中文字幕在线视频 | 亚洲婷婷影院 | 九九热视频精品在线 | 四虎最新永久免费视频 | 亚洲国产二区三区久久 | 久久免费视频1 | 青热久思思 | 网红主播大尺度精品福利视频 | 国产香蕉一区二区在线观看 | 国产日韩亚洲欧洲一区二区三区 | 国产精品久久一区二区三区 | 日本韩国欧美一区 | 亚洲视频综合 | 色一情一伦一区二区三 | 国产成人性色视频 | 99久热只有精品视频免费看 | 亚洲日本中文 | 国产一级特黄aaa大片 | 99福利资源久久福利资源 | 亚洲zscs综合网站 |