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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3558|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)定時器時鐘_8位數(shù)碼管_Proteus仿真代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:714407 發(fā)表于 2021-11-1 02:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  1. #include <AT89X52.h>       //調(diào)用51單片機(jī)的頭文件
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LS164_DATA = P3^0; //74LS164數(shù)據(jù)線
  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. //數(shù)碼管字形表,供顯示時查詢
  17. unsigned char code LED[11]=
  18. {                          //定義表格一定要使用code,這樣會做到程序存儲區(qū)中
  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;                        //計數(shù)
  35. uint i=0;
  36. uint state=0;
  37. uint date[6]={0,0,0,0,0,0};          //定義一個有6個地址的數(shù)組,分別存時分秒的個位和十位

  38. //---------------------------------------
  39. //8位數(shù)碼管相關(guān)I/O設(shè)置
  40. //P2.0-P2.2為3-8譯碼器U16的3個輸入,P2=0x00 0x01 0x02 0x03最大為 0x07
  41. //可以不用定義三個位,直接寫P2=0X即可        
  42. //---------------------------------------
  43. //x為段選數(shù)據(jù),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++)  //循環(huán)寫8位擴(kuò)展引腳狀態(tài)
  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. //延時函數(shù)
  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)                                                   //定時器初始化函數(shù)
  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)                                                   //定時器初始化函數(shù)
  84. {
  85.     IT0=1;     //INT0負(fù)跳變沿觸發(fā)
  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)            //主函數(shù),單片機(jī)開機(jī)后就是從這個函數(shù)開始運行
  116. {
  117.     time_init();
  118.     INT0_init();
  119.     while(1)               //死循環(huán),單片機(jī)初始化后,將一直運行這個死循環(huán)
  120.     {
  121.        display();
  122.     }
  123. }
  124. /********************************************************************/
  125. /*定時器中斷*/
  126. void timer() interrupt 1                                          //定時器0中斷
  127. {
  128.      n++;
  129.          if(n==10000)                                                                 //當(dāng)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. }
復(fù)制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av网站在线播放 | 亚洲毛片 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | h视频亚洲| 伊人网91| 国产免费a视频 | 亚洲国产成人在线视频 | 夜夜爽99久久国产综合精品女不卡 | 天天爱av | 在线观看特色大片免费网站 | 国产精品免费看 | 国产在线视频一区二区 | 精品免费视频 | 国产午夜视频 | 久久久久久久久久久久久九 | 久久综合狠狠综合久久 | 国产欧美精品区一区二区三区 | 日韩黄色小视频 | 国产一区| 日韩a| 99精品国产一区二区青青牛奶 | 婷婷开心激情综合五月天 | 在线一区视频 | 欧美成人精品在线 | 日皮视频免费 | 岛国在线免费观看 | 青青久草| 欧美一级二级视频 | 日日日日日日bbbbb视频 | 日韩精品区 | 性高朝久久久久久久3小时 av一区二区三区四区 | 超碰在线人人干 | 国产精品久久久久久福利一牛影视 | 中文精品视频 | 欧美成人a| 欧美成人a| 亚洲精品免费观看 | 久久久一区二区三区四区 | 国产精品区二区三区日本 | av中文在线 | 中文无码日韩欧 |