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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的時鐘設計,包涵源碼及仿真電路

[復制鏈接]
跳轉到指定樓層
樓主
ID:197252 發表于 2018-10-29 15:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我這個周用單片機做的時鐘,用數碼管顯示,用定時器來即時。 Clock.zip (93.36 KB, 下載次數: 15)



單片機源程序:
  1. #include"reg51.h"
  2. #define uchar unsigned char
  3. uchar code scan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  4. uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  5.                                         0x80,0x90,0xff,0xbf};
  6. uchar data dis[8]={0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00};
  7. uchar data timedata[3]={0x00,0x00,0x00};
  8. //timedata[0]: 秒計數       timedata[1] :分計數       timedata[2] :小時計數
  9. uchar data ms50=0x00,con=0x00,con1=0x00,con2=0x00;
  10. //ms50:每過50ms加一    con按鍵按下計數 為1 改變分鐘  為2改變小時
  11. //con1   con2
  12. sbit key0=P1^0;
  13. sbit key1=P1^1;
  14. sbit key2=P1^2;
  15. void delay1ms(int t)   
  16. {
  17.     unsigned char a,b;
  18.         for(b=0;b<t;b++)
  19.             for(a=0;a<120;a++);
  20. }
  21. void keyscan()         //按鍵檢測函數
  22. {
  23. EA=0; //關閉總中斷
  24. if(key0==0) //判斷按鍵是否按下
  25. {
  26. delay1ms(10); //延時消抖
  27. while(key0==0); //等待按鍵釋放
  28. con++;  //計數值加
  29.         TR0=0; //關閉定時器0
  30.         ET0=0;  //關閉定時器0中斷
  31. if(con>=3)  //若按下3次
  32. {
  33.    con=0; //計數值清0
  34.          TR0=1; //開啟定時器
  35.          ET0=1; //開啟定時器中斷
  36. }
  37. }
  38.    if(con!=0) //若按鍵0按下一次
  39.      {
  40.           if(key1==0) //如果按鍵1按下
  41.        {
  42.               delay1ms(10); //延時消抖
  43.                           while(key1==0);     //等待按鍵釋放
  44.               timedata[con]++; //(分/時)自加
  45.                           if(con==2)             //若按下兩次
  46.                           con1=24;               
  47.                           else con1=60;
  48.                           if(timedata[con]>=con1) //若加到最大值則將0賦值給變量
  49.                           timedata[con]=0;
  50.          }  
  51.          }
  52.         if(con!=0)
  53.      {
  54.           if(key2==0)
  55.        {
  56.               delay1ms(10);
  57.                           while(key2==0);
  58.               timedata[con]--;
  59.                           if(con==2)
  60.                           con1=23;
  61.                           else con1=59;
  62.                           if(timedata[con]<=0)
  63.                           timedata[con]=con1; //若減到最小值0則將最大值付給變量
  64.          }  
  65.          }
  66.          EA=1;
  67. }
  68. void scan()
  69.    {
  70.       char k;
  71.           dis[0]=timedata[0]%10; //顯示秒個位數據
  72.           dis[1]=timedata[0]/10; //顯示秒十位數據
  73.           dis[3]=timedata[1]%10; //顯示分個位數據
  74.           dis[4]=timedata[1]/10; //顯示分十位數據
  75.           dis[6]=timedata[2]%10; //顯示時個位數據
  76.           dis[7]=timedata[2]/10; //顯示時十位數據
  77.           for(k=0;k<8;k++)
  78.             {
  79.                   P0=~dis_7[dis[k]]; //段選端
  80.                   P2=scan_con[k];   //位選端
  81.                    delay1ms(1);     
  82.                    P2=0xff;                                        //消影
  83.                 }
  84.    }
  85. void main(void)
  86. {
  87.   TMOD=0X01;     //開啟定時器0
  88.   TH0=0X3C;      //選擇工作方式2
  89.   TL0=0XB0;      //載入高位初值
  90.   TR0=1;         //載入低位初值
  91.   ET0=1;         //開啟定時器中斷0
  92.   EA=1;          //全局中斷使能
  93.   while(1)
  94.   {
  95.    scan();
  96.    keyscan();
  97.   }
  98. }
  99. void time_intt0(void) interrupt 1
  100. {
  101.      ET0=0;   //關閉定時器0中斷
  102.            TR0=0;                //
  103.      TH0=0X3C;
  104.      TL0=0XB0;
  105.          TR0=1;       //
  106.          ms50++;     //50毫秒計數
  107.          if(ms50==20)  //1秒
  108.            {
  109.              ms50=0x00;
  110.                  timedata[0]++;
  111.                   if(timedata[0]==60)
  112.                    {
  113.                      timedata[0]=0;
  114.                          timedata[1]++;
  115.                          if(timedata[1]==60)
  116.                       {
  117.                         timedata[1]=0;
  118.                             timedata[2]++;
  119.                           if(timedata[2]==24)
  120.                       {
  121.                         timedata[2]=0;
  122.                       }
  123.                    }
  124.            }
  125. }
  126. ET0=1;
  127. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线小视频 | 日韩视频一区在线观看 | 国产999精品久久久久久 | 在线亚洲免费视频 | 国产精品一区一区 | 日本xx视频免费观看 | 一区二区精品 | 伊人一区 | 欧美国产中文字幕 | 久久av一区二区 | 亚洲一区二区三区免费在线观看 | 国产成人午夜电影网 | 亚洲一区二区精品视频在线观看 | 91免费视频观看 | 一二三四在线视频观看社区 | 日韩在线观看中文字幕 | 亚洲黄色av | 国产成人精品a视频一区www | 狠狠色综合欧美激情 | 日本黄色不卡视频 | 亚洲欧美日韩系列 | 国产99热精品 | 国产色网| 国产一级在线观看 | 日本免费黄色 | 99久久99 | 天天躁日日躁xxxxaaaa | 高清欧美性猛交 | 欧美又大粗又爽又黄大片视频 | 成人a在线观看 | 一区二区精品 | 日韩一区二区三区在线看 | 中文视频在线 | 精品在线一区 | 欧美日韩a| 在线视频日韩 | 狠狠操狠狠干 | 中文字幕在线精品 | 毛片的网址 | 在线成人av | 欧美在线观看一区 |