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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

獨立式鍵盤調時的數碼時鐘實驗

[復制鏈接]
跳轉到指定樓層
樓主
獨立式鍵盤調時的數碼時鐘實驗仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //實例75:獨立式鍵盤調時的數碼時鐘實驗
  2. #include<reg51.h>    //  包含51單片機寄存器定義的頭文件
  3. unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //數字0~9的段碼
  4. unsigned char int_time ; //中斷次數計數變量
  5. unsigned char second;    //秒計數變量
  6. unsigned char minute;    //分鐘計數變量
  7. unsigned char hour;     //小時計數變量

  8. sbit S1=P1^4;          //將S1位定義為P1.4
  9. sbit S2=P1^5;          //將S2位定義為P1.5
  10. sbit S3=P1^6;          //將S3位定義為P1.6
  11. sbit S4=P1^7;          //將S4位定義為P1.7

  12. /******************************************************************
  13. 函數功能:數碼管掃描延時
  14. ********************************************************************/
  15. void delay(void)     
  16. {
  17.    unsigned char j;
  18.         for(j=0;j<200;j++)
  19.          ;
  20.   }
  21. /******************************************************************
  22. 函數功能:鍵盤掃描延時
  23. ********************************************************************/
  24.   void delay60ms(void)
  25.   {
  26.     unsigned char i,j;
  27.          for(i=0;i<200;i++)
  28.          for(j=0;j<100;j++)
  29.            ;
  30.   }

  31. /******************************************************************
  32. 函數功能:顯示秒
  33. 入口參數:s
  34. ********************************************************************/
  35. void DisplaySecond(unsigned char s)
  36. {
  37.    P2=0xbf;        //P2.6引腳輸出低電平, DS6點亮
  38.    P0=Tab[s/10];          //顯示十位
  39.    delay();

  40.    P2=0x7f;       //P2.7引腳輸出低電平, DS7點亮
  41.    P0=Tab[s%10];         //顯示個位
  42.         delay();
  43.         P2=0xff;     //關閉所有數碼管
  44.    
  45. }

  46. /******************************************************************
  47. 函數功能:顯示分鐘
  48. 入口參數:m
  49. ********************************************************************/
  50. void DisplayMinute(unsigned char m)
  51. {
  52.      P2=0xf7;   // P2.3引腳輸出低電平, DS3點亮
  53.      P0=Tab[m/10];//顯示個位
  54.           delay();
  55.           P2=0xef;   // P2.4引腳輸出低電平, DS4點亮
  56.           P0=Tab[m%10];
  57.           delay();
  58.           P2=0xdf;   //P2.5引腳輸出低電平, DS5點亮
  59.           P0=0xbf;   //分隔符“-”的段碼
  60.           delay();
  61.           P2=0xff;   //關閉所有數碼管
  62. }
  63. /******************************************************************
  64. 函數功能:顯示小時的子程序
  65. 入口參數:h
  66. ********************************************************************/
  67. void DisplayHour(unsigned char h)
  68. {
  69.    
  70.    P2=0xfe;        //P2.0引腳輸出低電平, DS0點亮
  71.    P0=Tab[h/10];          //顯示十位
  72.    delay();

  73.    P2=0xfd;       //P2.1引腳輸出低電平, DS1點亮
  74.    P0=Tab[h%10];    //顯示個位
  75.         delay();   
  76.         P2=0xfb;     //P2.2引腳輸出低電平, DS2點亮
  77.         P0=0xbf;     //分隔符“-”的段碼
  78.         delay();
  79.    P2=0xff;     //關閉所有數碼管
  80.    
  81. }
  82. /******************************************************************
  83. 函數功能:鍵盤掃描
  84. ********************************************************************/
  85. void key_scan(void)
  86. {
  87.      P1=0xf0;   //將P1口高4位置高電平“1”
  88.           if((P1&0xf0)!=0xf0)         //有鍵按下
  89.            {
  90.                      delay60ms();         //延時60ms再檢測
  91.                              if((P1&0xf0)!=0xf0)         //確實有鍵按下
  92.                              {
  93.                                   if(S1==0)      //如果是S1鍵按下
  94.                                      second++;   //秒加1
  95.                                            if(S2==0)      //如果是S2鍵按下
  96.                                    minute++;    //分鐘加1
  97.                                                  if(S3==0)     //如果是S3鍵按下
  98.                                    hour++;      //小時加1
  99.                                                  if(S4==0)     //如果是S4鍵按下
  100.                                    {
  101.                                                     second=0;   //秒清0
  102.                                                     minute=0;   //分鐘清0
  103.                                                     hour=0;     //小時清0
  104.                                                   }
  105.               }
  106.            }
  107. }

  108. /******************************************************************
  109. 函數功能:主函數
  110. ********************************************************************/

  111. void main(void)
  112.    {
  113.                    
  114.                         TMOD=0x01;             //使用定時器T0               
  115.                         EA=1;                  //開中斷總允許
  116.                         ET0=1;                 //允許T0中斷
  117.                         TH0=(65536-46083)/256;  //定時器高八位賦初值
  118.                         TL0=(65536-46083)%256;  //定時器低八位賦初值
  119.                         TR0=1;                 //啟動定時器T0
  120.                         int_time=0;    //中斷計數變量初始化
  121.                         second=0;      //秒計數變量初始化
  122.                         minute=0;     //分鐘計數變量初始化
  123.                         hour=0;       //小時計數變量初始化
  124.         
  125.          while(1)
  126.                         {             
  127.                                           DisplaySecond(second);    //調用秒顯示子程序
  128.                                     DisplayMinute(minute);   //調用分鐘顯示子程序
  129.                                          DisplayHour(hour);       //調用小時顯示子程序
  130.                                                                                               
  131.                    }
  132.   }

  133. /******************************************************************
  134. 函數功能:定時器T0的中斷服務子程序
  135. ********************************************************************/
  136.   void interserve(void ) interrupt 1 using 1  //using Time0
  137.   {
  138.      TR0=0;                 //關閉定時器T0
  139.      int_time++;           //中斷次數加1
  140.                  if(int_time==20)    //如果中斷次數滿20
  141.                    {
  142.               int_time=0;    //中斷計數變量清0
  143.                         second++;      //秒計數變量加1
  144.                         }
  145.                  if(second==60)      //如果秒計滿60
  146.                     {
  147.                                  second=0;    //如果秒計滿60,將秒計數變量清0
  148.                                  minute++;    //分鐘計數變量加1
  149.                          }
  150.                  if(minute==60)    //如果分鐘計滿60
  151.                    {
  152.                            minute=0;    //如果分鐘計滿60,將分鐘計數變量清0
  153.                            hour++;      //小時計數變量加1
  154.                    }
  155.                  if(hour==24)     //如果小時計滿24
  156.                    {
  157.                         hour=0;              //如果小時計滿24,將小時計數變量清0
  158.                }
  159.       key_scan();               //執行鍵盤掃描
  160.       TH0=(65536-46083)/256;    //定時器T0高四位賦值
  161.                 TL0=(65536-46083)%256;    //定時器T0低四位賦值
  162.       TR0=1;                   //啟動定時器T0
  163.                
  164.   }  
復制代碼

所有資料51hei提供下載:
獨立式鍵盤調時的數碼時鐘實驗.zip (34.09 KB, 下載次數: 10)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人三区四区 | 国产一区二区三区视频免费观看 | 少妇精品久久久久久久久久 | 国产精品日日做人人爱 | 久久精品久久久久久 | 一区影视 | 亚洲第1页 | 色综久久 | 国产精品久久久 | 久久久久av | 日韩中文久久 | 久久99视频这里只有精品 | 99免费在线视频 | 久久亚洲精品国产精品紫薇 | 亚洲国产69 | 在线播放国产一区二区三区 | 国产中文字幕在线 | 日本一二区视频 | 99福利在线观看 | 国产一级精品毛片 | 久久久久久久夜 | 九九九久久国产免费 | 午夜精品三区 | 亚洲欧美一区二区三区1000 | 亚洲 欧美 日韩在线 | 一级大片 | 欧美视频日韩 | 久久久激情视频 | 国产精品自拍视频 | 久久综合av| 亚洲视频免费在线观看 | 一区二区三区小视频 | 涩涩鲁亚洲精品一区二区 | 午夜资源| 国内精品久久久久久久 | 色就干 | 久久伊人在 | 二区中文字幕 | 97精品久久 | 可以免费看的毛片 | 亚洲视频不卡 |