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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機8位7段數碼管時鐘Proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
51單片機8位7段數碼管時鐘
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg52.h>
  2. #include"intrins.h"
  3. #define uint unsigned int
  4. #define uchar unsigned char  

  5. sbit fmq=P3^0; //蜂鳴器控制

  6. char  table[]={        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,  0xff,  0xc6,  0xc7,  0x88,};                //共陽極數碼管編碼 “0-9”
  7. //                0    1   2     3   4     5    6   7    8   9     不顯示   C       L      A
  8. uchar val[8]={0,0,0,0,0,0,11,12};          //數碼管顯示緩沖區

  9. uint count=0;   //                                                           
  10. char shi=0,fen=0,miao=0;   //時分秒變量
  11. char nzshi=0,nzfen=0,nzmiao=0;        //鬧鐘時分秒變量  
  12. uchar wei=0x01,duan=0;       // 控制數碼管段 和位顯示的變量

  13. void led() //數碼管掃描函數
  14. {            
  15.             P0=0Xff;
  16.                   P2=wei;               
  17.       if((duan==1)||(duan==3))  //這里是加小數點用的
  18.                         {
  19.          P0=(table[val[duan]]&0x7f);        
  20.       }                               
  21.                    else
  22.                         {
  23.        P0=table[val[duan]];
  24.       }       
  25.                        
  26.             duan++;
  27.             if(duan>7)
  28.                         duan=0;
  29.                   wei=_crol_(wei,1);
  30. }                                       

  31. void time0init()  //定時器0初始化
  32. {
  33.   TMOD=0X01;
  34.   TH0=(65536-2000)/256;
  35.   TL0=(65536-2000)%256;
  36.   ET0=1;
  37.   TR0=1;
  38.   EA=1;
  39. }

  40. uchar keytime=0;  //按鍵
  41. uint bjtime=0;  //報警計時變量
  42. bit  sjbs=0;  //按鍵A 控制時間走停的變量
  43. void time0() interrupt 1  // 定時器0中斷服務函數
  44. {
  45. TH0=(65536-2000)/256;
  46. TL0=(65536-2000)%256;
  47. if(sjbs)
  48. {
  49.   count++;
  50. }
  51.   bjtime++;
  52. keytime++;
  53. led();                //2ms掃描一次數碼管顯示
  54. }       


  55. uchar key()          //按鍵掃描程序
  56. {                          
  57.                 static  uchar kzt=0;
  58.                 uchar sb=25;       
  59.                 switch(kzt)
  60.                 {
  61.                  case 0:
  62.                  P1=0xff;
  63.                  if(P1!=0xff)
  64.                         {
  65.                          kzt=1;
  66.                          return 25;                       
  67.                         }
  68.                  break;
  69.                 case 1:
  70.                 P1=0xff;
  71.                         if(P1!=0xff)
  72.                          {
  73.                                 switch(P1)
  74.                                 {
  75.                                  case 0xfe:
  76.                                  sb=1;
  77.                                  break;
  78.                                  case 0xfd:
  79.                                  sb=2;
  80.                                  break;
  81.                                  case 0xfb:
  82.                                  sb=3;
  83.                                 break;                                 
  84.                                 case 0xf7:
  85.                                  sb=4;
  86.                                  break;       
  87.         case 0xef:
  88.                                  sb=5;
  89.                                  break;
  90.                                  case 0xdf:
  91.                                  sb=6;
  92.                                  break;
  93.                                  case 0xbf:
  94.                                  sb=7;
  95.                                 break;                                 
  96.                                 case 0x7f:
  97.                                  sb=8;
  98.                                  break;                                                               
  99.                                 }
  100.                          kzt=2;
  101.                         return sb;
  102.                         }
  103.                          else
  104.                         {
  105.                         kzt=0;
  106.                         return 25;                               
  107.                         }
  108.                         break;

  109.                         case 2:
  110.                         P1=0xff;
  111.                         if(P1==0xff)
  112.                         {
  113.                          kzt=0;
  114.                          return 25;
  115.                         }                         
  116.                         break;
  117.                         }                       
  118.                 return 25;       
  119. }
  120.        

  121. void sj()         //時分秒時間更新
  122. {
  123.          if(count>499)
  124.          {
  125.            count=0;
  126.                  miao++;
  127.                   if(miao>59)
  128.                         {
  129.                  miao=0;
  130.                                 fen++;
  131.                                  if(fen>59)
  132.                                  {
  133.                       fen=0;
  134.                                           shi++;
  135.                                           if(shi>23)
  136.                                                 {
  137.                     shi=0;
  138.                                           }  
  139.                                   }                                                
  140.              }                 
  141.                          
  142.          }

  143. }



  144. void  main()
  145. {
  146.    uchar keycode=25,zt=1;
  147.    bit bjbs=0;       
  148.         fmq=1;
  149.   time0init();         //初始化定時器0   
  150.   while(1)
  151.   {
  152.    if(keytime>9) //20ms 掃描一次按鍵
  153.          {
  154.     keytime=0;
  155.                 keycode=key();
  156.    }
  157.    
  158.          if(((fen==0)&&(miao==0))||((shi==nzshi)&&(fen==nzfen)&&(miao==nzmiao)))
  159.          { //  判斷整點                判斷是否到鬧鐘時間
  160.      bjbs=1;
  161.                  fmq=0;
  162.                  bjtime=0;
  163.    }

  164.          

  165.          
  166.          if(bjbs)   //報警處理
  167.          {
  168.      if(bjtime>30000)
  169.            {
  170.       fmq=1;
  171.                         bjbs=0;
  172.      }
  173.                  if((keycode>1)&&(keycode<5)) //只要在鳴叫時調節就停止鳴叫
  174.                  {
  175.        bjbs=0;
  176.                          fmq=1;
  177.      }
  178.    }
  179.        
  180.                  
  181.          
  182.    switch(zt)
  183.    {
  184.     case 1:   // 時鐘顯示
  185.                        
  186.          val[0]=shi/10;  //顯示數據更新
  187.          val[1]=shi%10;
  188.          
  189.          val[2]=fen/10;
  190.          val[3]=fen%10;
  191.          
  192.          val[4]=miao/10;
  193.          val[5]=miao%10;
  194.                          
  195.          val[6]=11;
  196.          val[7]=12;
  197.                
  198.                 if(keycode==1)  //A   時間運行與暫停
  199.          {
  200.     sjbs=!sjbs;
  201.                  keycode=25;
  202.    }       
  203.          sj();
  204.          
  205.                  if(keycode==2)  //B 秒加1
  206.          {
  207.      miao++;
  208.                  if(miao>59)
  209.                  {
  210.       miao=0;
  211.      }
  212.                  keycode=25;
  213.    }
  214.          
  215.                  if(keycode==3)//C分 加1
  216.          {
  217.     fen++;
  218.                  if(fen>59)
  219.                  {
  220.       fen=0;
  221.      }
  222.                  keycode=25;
  223.    }
  224.          
  225.                  if(keycode==4)//D 時加1
  226.          {
  227.     shi++;
  228.                  if(shi>23)
  229.                  {
  230.       shi=0;
  231.      }
  232.                  keycode=25;
  233.    }
  234.          
  235.                   if(keycode==5) //E 進入鬧鐘設置狀態
  236.          {
  237.       zt=2;
  238.                  keycode=25;
  239.    }
  240.          
  241.                 break;
  242.                        
  243.                
  244.                 case 2: //鬧鐘顯示與調節
  245.                        
  246.                 sj();        //時間更新
  247.          val[0]=nzshi/10; //顯示數據更新
  248.          val[1]=nzshi%10;
  249.          
  250.          val[2]=nzfen/10;
  251.          val[3]=nzfen%10;
  252.          
  253.          val[4]=nzmiao/10;
  254.          val[5]=nzmiao%10;
  255.                          
  256.          val[6]=13;
  257.          val[7]=12;       

  258.             if(keycode==2) //B 鬧鐘秒加1
  259.          {
  260.      nzmiao++;
  261.                  if(nzmiao>59)
  262.                  {
  263.       nzmiao=0;
  264.      }
  265.                  keycode=25;
  266.    }
  267.          
  268.                  if(keycode==3) //C  鬧鐘分加1
  269.          {
  270.     nzfen++;
  271.                  if(nzfen>59)
  272.                  {
  273.       nzfen=0;
  274.      }
  275.                  keycode=25;
  276.    }
  277.          
  278.                  if(keycode==4) //D 鬧鐘時加1
  279.          {
  280.     nzshi++;
  281.                  if(nzshi>23)
  282.                  {
  283.       nzshi=0;
  284.      }
  285.                  keycode=25;
  286.    }
  287.          
  288.                   if(keycode==5) //E 進入時鐘顯示狀態
  289.          {
  290.       zt=1;
  291.                  keycode=25;
  292.    }               
  293.                 break;
  294.                

  295.   }         


  296.   }

  297. }
復制代碼

所有資料51hei提供下載:
時鐘.rar (87.8 KB, 下載次數: 44)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩h | 欧美在线观看一区 | 国产精品嫩草影院精东 | 国产黄色大片 | 亚洲欧美激情精品一区二区 | 少妇久久久久 | 亚洲毛片一区二区 | 91免费观看国产 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 亚洲图片一区二区三区 | 国产一区二区三区www | 欧美日韩精品中文字幕 | 成人免费黄色 | 在线日韩欧美 | 亚洲视频在线一区 | 成人欧美一区二区三区黑人孕妇 | 日韩at| 欧美片网站免费 | 日韩欧美一区二区三区 | 国产真实精品久久二三区 | 欧美日韩国产中文 | 99re在线 | 国产精品久久久99 | 黄 色 毛片免费 | 无码国模国产在线观看 | 亚洲欧洲精品一区 | 狠狠操天天操 | 人人草天天草 | 国产成人精品一区二区三区视频 | 午夜网站视频 | 久久久黄色 | 欧洲视频一区二区 | 日韩精品免费视频 | 久久婷婷麻豆国产91天堂 | 天堂视频中文在线 | 亚洲看片网站 | 天天夜夜人人 | 欧美一区二区三区在线观看 | 国产最好的av国产大片 | 中文精品视频 | 日韩免费视频一区二区 |