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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機定時器時鐘_8位數碼管_Proteus仿真代碼

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



單片機源程序如下:
  1. #include <AT89X52.h>       //調用51單片機的頭文件
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LS164_DATA = P3^0; //74LS164數據線
  5. sbit LS164_CLK  = P3^1;  //74LS164時鐘線
  6. sbit LS164_MR   = P3^3;   //74LS164使能
  7. sbit HOUR_A     = P1^0;
  8. sbit HOUR_S     = P1^1;
  9. sbit MINUTE_A   = P1^2;
  10. sbit MINUTE_S   = P1^3;
  11. sbit SECOND_A   = P1^4;
  12. sbit SECOND_S   = P1^5;
  13. sbit CLOCK_ON   = P1^6;
  14. sbit CLOCK_OFF  = P1^7;

  15. //---------------------------------------
  16. //數碼管字形表,供顯示時查詢
  17. unsigned char code LED[11]=
  18. {                          //定義表格一定要使用code,這樣會做到程序存儲區中
  19.     0x3F,                  //"0"的字形表,0B00111111
  20.     0x06,                  //"1"的字形表,0B00000110
  21.     0x5B,                  //"2"的字形表,0B01011011
  22.     0x4F,                  //"3"的字形表,0B01001111
  23.     0x66,                  //"4"的字形表,0B01100110
  24.     0x6D,                  //"5"的字形表,0B01101101
  25.     0x7D,                  //"6"的字形表,0B01111101
  26.     0x07,                  //"7"的字形表,0B00000111
  27.     0x7F,                  //"8"的字形表,0B01111111
  28.     0x6F,                  //"9"的字形表,0B01101111
  29.     0x40,                  //"-",         0B01000000
  30. };

  31. uint miao=0;                //秒
  32. uint fen=15;                        //分
  33. uint shi=12;                    //時
  34. uint n=0;                        //計數
  35. uint i=0;
  36. uint state=0;
  37. uint date[6]={0,0,0,0,0,0};          //定義一個有6個地址的數組,分別存時分秒的個位和十位

  38. //---------------------------------------
  39. //8位數碼管相關I/O設置
  40. //P2.0-P2.2為3-8譯碼器U16的3個輸入,P2=0x00 0x01 0x02 0x03最大為 0x07
  41. //可以不用定義三個位,直接寫P2=0X即可        
  42. //---------------------------------------
  43. //x為段選數據,y為位選0x00 0x01 0x02 0x03最大為 0x07
  44. void tube_display(uint x,uint y)
  45. {
  46.         P2=y;
  47. //        P0=LED[x];
  48.     LS164_MR=1;
  49.     state=LED[x];
  50.     for(i=0;i<8;i++)  //循環寫8位擴展引腳狀態
  51.         {
  52.                 LS164_CLK = 0;
  53.                 if(state & 0x80)
  54.                 {
  55.                         LS164_DATA = 1;
  56.                 }
  57.                 else
  58.                 {
  59.                         LS164_DATA = 0;
  60.                 }
  61.                 LS164_CLK = 1;
  62.                 state = state<<1;
  63.         }
  64. }
  65. //延時函數
  66. void delay(uint z)
  67. {
  68.      uint x,y;
  69.          for(x=z;x>0;x--)
  70.           for(y=50;y>0;y--);
  71. }
  72. //定時器初始化
  73. void time_init(void)                                                   //定時器初始化函數
  74. {
  75.     TMOD=0x02;                                                          //選擇方式2
  76.         TH0=156;                                                          //重裝初值為156    100us
  77.         TL0=156;                                                          //運行值為156
  78.         EA=1;                                                                  //開總中斷
  79.         ET0=1;                                                                  //開定時器0中斷
  80.         TR0=1;                                                                  //開定時器0
  81. }
  82. //外部中斷初始化
  83. void INT0_init(void)                                                   //定時器初始化函數
  84. {
  85.     IT0=1;     //INT0負跳變沿觸發
  86.     EX0=1;     //外部中斷0使能
  87.     EA=1;      //總中斷使能
  88. }
  89. void display(void)
  90. {       
  91.     tube_display(10,0x02);
  92.     delay(1);
  93.     tube_display(10,0x05);
  94.     delay(1);
  95.    
  96.     tube_display(date[0],0x07);
  97.     delay(1);
  98.    
  99.     tube_display(date[1],0x06);
  100.     delay(1);
  101.    
  102.     tube_display(date[2],0x04);
  103.     delay(1);
  104.    
  105.     tube_display(date[3],0x03);
  106.     delay(1);
  107.    
  108.     tube_display(date[4],0x01);
  109.     delay(1);
  110.    
  111.     tube_display(date[5],0x00);
  112.     delay(1);
  113. }
  114. /*************************** main code ******************************/
  115. void main(void)            //主函數,單片機開機后就是從這個函數開始運行
  116. {
  117.     time_init();
  118.     INT0_init();
  119.     while(1)               //死循環,單片機初始化后,將一直運行這個死循環
  120.     {
  121.        display();
  122.     }
  123. }
  124. /********************************************************************/
  125. /*定時器中斷*/
  126. void timer() interrupt 1                                          //定時器0中斷
  127. {
  128.      n++;
  129.          if(n==10000)                                                                 //當n=10000時,表示1s到了
  130.          {         
  131.              n=0;
  132.              miao++;
  133.                  if(miao==60)
  134.                  {
  135.                      miao=0;
  136.                      fen++;
  137.                          if(fen==60)
  138.                          {
  139.                              fen=0;
  140.                                  shi++;
  141.                                  if(shi==24)
  142.                                  {
  143.                                     shi=0;
  144.                                  }
  145.                          }
  146.                  }
  147.                  date[0]=miao%10;
  148.                  date[1]=miao/10;
  149.                  date[2]=fen%10;
  150.                  date[3]=fen/10;
  151.                  date[4]=shi%10;
  152.                  date[5]=shi/10;
  153.          }
  154. }
  155. /*按鍵中斷*/
  156. void INT0_ISR(void) interrupt 0
  157. {
  158.     EX0=0;
  159.     delay(1);
  160.     if(HOUR_A==0)
  161.     {
  162.         shi++;
  163.         while(HOUR_A==0);
  164.     }
  165.     else if(HOUR_S==0)
  166.     {
  167.         shi--;
  168.         while(HOUR_S==0);
  169.     }
  170.     else if(MINUTE_A==0)
  171.     {
  172.         fen++;
  173.         while(MINUTE_A==0);
  174.     }
  175.     else if(MINUTE_S==0)
  176.     {
  177.         fen--;
  178.         while(MINUTE_S==0);
  179.     }
  180.     else if(SECOND_A==0)
  181.     {
  182.         miao++;
  183.         while(SECOND_A==0);
  184.     }
  185.     else if(SECOND_S==0)
  186.     {
  187.         miao--;
  188.         while(SECOND_S==0);
  189.     }
  190.     else if(CLOCK_ON==0)
  191.     {
  192.         TR0=1;
  193.         while(CLOCK_ON==0);
  194.     }
  195.     else if(CLOCK_OFF==0)
  196.     {
  197.         TR0=0;
  198.         while(CLOCK_OFF==0);
  199.     }
  200.     date[0]=miao%10;
  201.     date[1]=miao/10;
  202.     date[2]=fen%10;
  203.     date[3]=fen/10;
  204.     date[4]=shi%10;
  205.     date[5]=shi/10;
  206.     IE0=0;
  207.     EX0=1;
  208. }
復制代碼

Proteus8.8仿真工程文件51hei附件下載:
8Wei_Time.zip (152.58 KB, 下載次數: 71)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本高清aⅴ毛片免费 | 国产三级 | 成人在线精品视频 | 亚洲在线视频 | 久久av网| 91麻豆精品国产91久久久资源速度 | www免费视频 | 羞羞视频在线观看 | 卡通动漫第一页 | 日韩中文在线视频 | 精品国产欧美一区二区三区成人 | 日韩欧美国产一区二区三区 | 一区二区三区视频播放 | 国产视频1区 | 天天看天天爽 | www久久久| 亚洲国产成人精品女人久久久 | 久久成人在线视频 | 九九热精品在线视频 | 国产精品无码专区在线观看 | 国产福利在线视频 | 日批免费观看 | 国产精品日韩 | 91网站在线观看视频 | 精品视频在线免费观看 | 国产精品久久久久久久久久久免费看 | 久久一热| 激情91 | 青青草国产在线观看 | 蜜桃视频成人 | 国产精品99久久久精品免费观看 | 免费高清av | 精品久久电影 | 成人一区精品 | 爽爽免费视频 | 中文二区 | 成人免费一区二区三区视频网站 | 亚洲欧洲精品一区 | 一片毛片 | 九九综合九九 | 黄色毛片一级 |