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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這是一段四位數碼管的單片機代碼,我想問問圖片里面那段是什么意思

[復制鏈接]
跳轉到指定樓層
樓主


  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define GPIO_DIG   P2                      //數據端

  4. #define uchar unsigned char              //重命名關鍵字
  5. #define uint unsigned int                     //重命名關鍵字

  6. sbit K1=P3^0;            //開始
  7. sbit K2=P3^1;            //暫停
  8. sbit K3=P3^2;            //復位

  9. sbit L1=P1^4;            //數碼管1位選
  10. sbit L2=P1^5;            //數碼管2位選
  11. sbit L3=P1^6;            //數碼管3位選
  12. sbit L4=P1^7;            //數碼管4位選

  13. sbit beep=P1^0;

  14. unsigned char code DIG_CODE[10] = {
  15. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16. 0x7f,0x6f};
  17. //0、1、2、3、4、5、6、7、8、9的顯示碼
  18. unsigned char code DIG_CODE2[10] = {
  19. 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
  20. 0xff,0xef};
  21. //0、1、2、3、4、5、6、7、8、9帶小數點的顯示碼
  22. unsigned char DisplayData[4];
  23. //用來存放要顯示的8位數的值

  24. uchar i,m;            //定義變量
  25. uchar min=0;
  26. long int k=0;
  27. uint Second_Counts;                     //定義變量

  28. void DigDisplay()                   //數碼管顯示子函數
  29. {
  30.          unsignedint j;              //定義變量

  31.          L1=0;                             //位選
  32.          L2=1;
  33.          L3=1;
  34.          L4=1;
  35.          GPIO_DIG= DisplayData[0];     //發送段碼
  36.          j= 1000;                                                    //掃描間隔時間設定
  37.          while(j--);
  38.          L1=1;                              //消隱
  39.          L2=1;
  40.          L3=1;
  41.          L4=1;               

  42.          L1=1;
  43.          L2=0;                             //位選
  44.          L3=1;
  45.          L4=1;
  46.          GPIO_DIG= DisplayData[1];     //發送段碼
  47.          j= 1000;                                                    //掃描間隔時間設定
  48.          while(j--);
  49.          L1=1;                              //消隱
  50.          L2=1;
  51.          L3=1;
  52.          L4=1;      

  53.          L1=1;
  54.          L2=1;
  55.          L3=0;                              //位選
  56.          L4=1;
  57.          GPIO_DIG= DisplayData[2];     //發送段碼
  58.          j= 1000;                                                    //掃描間隔時間設定
  59.          while(j--);
  60.          L1=1;                              //消隱
  61.          L2=1;
  62.          L3=1;
  63.          L4=1;      

  64.          L1=1;
  65.          L2=1;
  66.          L3=1;
  67.          L4=0;                              //位選
  68.          GPIO_DIG= DisplayData[3];     //發送段碼
  69.          j= 1000;                                                    //掃描間隔時間設定
  70.          while(j--);
  71.          L1=1;                              //消隱
  72.          L2=1;
  73.          L3=1;
  74.          L4=1;      

  75. }

  76. void main()
  77. {
  78. //      Second_Counts=570;
  79. //      min=9;
  80.          GPIO_DIG= 0x00;            //初始化數據口

  81.          TMOD=0x01;                               //定時器0方式1
  82.          TH0=(65536-50000)/256;                  //定時器0:50ms
  83.          TL0=(65536-50000)%256;
  84.          TH1=(65536-2000)/256;           
  85.          TL1=(65536-2000)%256;
  86.          EA=1;   
  87. //      ET1=1;
  88. //      TR1=1;         
  89.    while (1)
  90.     {
  91.                    if(K1==0)
  92.                    {
  93.                             ET0=1;
  94.                             TR0=1;               //開啟定時器
  95.                    }
  96.                    if(K2==0)
  97.                    {
  98.                             ET0=0;
  99.                             TR0=0;               //關閉定時器
  100.                    }
  101.                    if(K3==0)                                                 //復位按鍵按下時
  102.                    {
  103.                             ET0=0;
  104.                             TR0=0;               //關閉定時器
  105.                             DisplayData[0]= DIG_CODE2[0];      //清零顯示
  106.                             DisplayData[1]= DIG_CODE[0];         //清零顯示
  107.                             DisplayData[2]= DIG_CODE2[0];      //清零顯示
  108.                             DisplayData[3]= DIG_CODE[0];         //清零顯示
  109.                             i=0;                                                            //清零計數
  110.                             Second_Counts=0;                                 //清零秒
  111.                    }

  112.                    if((Second_Counts>0)&&(m==0))
  113.                    {
  114.                             ET1=1;
  115.                             TR1=1;   
  116.                    }

  117.                    if((min==9)&&(Second_Counts==599))
  118.                    {
  119.                             ET0=0;
  120.                             TR0=0;               //關閉定時器
  121.                             ET1=1;
  122.                             TR1=1;
  123.                    }

  124.                    DigDisplay();               //執行數碼管顯示函數
  125.     }
  126. }


  127. //T0中斷函數
  128. void DSY_Refresh() interrupt 1
  129. {
  130.          TH0=(65536-50000)/256;                  //恢復定時器0初值
  131.          TL0=(65536-50000)%256;
  132.          i++;
  133.          m++;
  134.          if(m>=20)
  135.          {
  136.                    m=0;
  137.          }
  138.          if(i==2)                                  //50ms*2=0.1s轉換狀態
  139.          {
  140.                    i=0;
  141.                    Second_Counts++;
  142.                    if(Second_Counts>=600)
  143.                    {
  144.                             Second_Counts=0;
  145.                             min++;
  146.                    }

  147.                    DisplayData[0]= DIG_CODE2[min%10];   //顯示百位
  148.                    DisplayData[1]= DIG_CODE[Second_Counts/100%10];   //顯示十位
  149.                    DisplayData[2]= DIG_CODE2[Second_Counts/10%10];   //顯示個位
  150.                    DisplayData[3]= DIG_CODE[Second_Counts%10];                     //顯示小數點后一位
  151. //               if(Second_Counts==10000)Second_Counts=0;                            //當秒計數到1000秒又變為0
  152.          }
  153. }

  154. void DSY_Refresh2() interrupt 3
  155. {
  156.          TH1=(65536-2000)/256;           
  157.          TL1=(65536-2000)%256;
  158.          k++;
  159.          beep=!beep;
  160.          if(k>=300)
  161.          {
  162.                    ET1=0;
  163.                    TR1=0;
  164.                    k=0;
  165.          }
  166. }
復制代碼


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

使用道具 舉報

沙發
ID:143244 發表于 2020-6-23 21:36 | 只看該作者
圖片這段,是分鐘計數。中斷是50ms一次,if(i==2)是說兩次一計數 每次0.1S  計數600就是60S也就是1分鐘則分鐘計數變量min加1
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰520 | 欧美一区二区大片 | 精品蜜桃一区二区三区 | 成人免费视频网站 | 精品九九| 琪琪午夜伦伦电影福利片 | 欧美成人一区二区三区 | 激情一区 | 人人性人人性碰国产 | 另类视频在线 | 国产电影一区 | 麻豆视频在线免费观看 | 天天操夜夜拍 | 久久精品亚洲精品国产欧美kt∨ | 久久精品一区二区 | 国产精品久久久亚洲 | 亚洲激情在线观看 | 亚洲精品高清视频 | 久久精品91久久久久久再现 | 免费观看一级毛片 | 中文字幕国| 亚洲国产视频一区 | 搞黄网站在线观看 | 国产精品久久精品 | 成人免费在线观看 | 天天射网站 | 国产成人高清 | 伊人伊人 | 国产一区不卡 | 欧美精品久久久久久久久老牛影院 | h网站在线观看 | 欧美日韩久久精品 | 国产精品免费大片 | 国产一区精品在线 | 亚洲一区综合 | 中文在线一区 | 黄色片在线| 黄久久久 | 日本成人中文字幕 | 欧美日韩在线一区二区三区 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 |