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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)8位7段數(shù)碼管時(shí)鐘Proteus仿真程序

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


單片機(jī)源程序如下:
  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,};                //共陽極數(shù)碼管編碼 “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};          //數(shù)碼管顯示緩沖區(qū)

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

  13. void led() //數(shù)碼管掃描函數(shù)
  14. {            
  15.             P0=0Xff;
  16.                   P2=wei;               
  17.       if((duan==1)||(duan==3))  //這里是加小數(shù)點(diǎn)用的
  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()  //定時(shí)器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;  //報(bào)警計(jì)時(shí)變量
  42. bit  sjbs=0;  //按鍵A 控制時(shí)間走停的變量
  43. void time0() interrupt 1  // 定時(shí)器0中斷服務(wù)函數(shù)
  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掃描一次數(shù)碼管顯示
  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()         //時(shí)分秒時(shí)間更新
  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();         //初始化定時(shí)器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.          { //  判斷整點(diǎn)                判斷是否到鬧鐘時(shí)間
  160.      bjbs=1;
  161.                  fmq=0;
  162.                  bjtime=0;
  163.    }

  164.          

  165.          
  166.          if(bjbs)   //報(bào)警處理
  167.          {
  168.      if(bjtime>30000)
  169.            {
  170.       fmq=1;
  171.                         bjbs=0;
  172.      }
  173.                  if((keycode>1)&&(keycode<5)) //只要在鳴叫時(shí)調(diào)節(jié)就停止鳴叫
  174.                  {
  175.        bjbs=0;
  176.                          fmq=1;
  177.      }
  178.    }
  179.        
  180.                  
  181.          
  182.    switch(zt)
  183.    {
  184.     case 1:   // 時(shí)鐘顯示
  185.                        
  186.          val[0]=shi/10;  //顯示數(shù)據(jù)更新
  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   時(shí)間運(yùn)行與暫停
  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 時(shí)加1
  226.          {
  227.     shi++;
  228.                  if(shi>23)
  229.                  {
  230.       shi=0;
  231.      }
  232.                  keycode=25;
  233.    }
  234.          
  235.                   if(keycode==5) //E 進(jìn)入鬧鐘設(shè)置狀態(tài)
  236.          {
  237.       zt=2;
  238.                  keycode=25;
  239.    }
  240.          
  241.                 break;
  242.                        
  243.                
  244.                 case 2: //鬧鐘顯示與調(diào)節(jié)
  245.                        
  246.                 sj();        //時(shí)間更新
  247.          val[0]=nzshi/10; //顯示數(shù)據(jù)更新
  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 鬧鐘時(shí)加1
  279.          {
  280.     nzshi++;
  281.                  if(nzshi>23)
  282.                  {
  283.       nzshi=0;
  284.      }
  285.                  keycode=25;
  286.    }
  287.          
  288.                   if(keycode==5) //E 進(jìn)入時(shí)鐘顯示狀態(tài)
  289.          {
  290.       zt=1;
  291.                  keycode=25;
  292.    }               
  293.                 break;
  294.                

  295.   }         


  296.   }

  297. }
復(fù)制代碼

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


評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线观看国产精品视频 | 狠狠躁18三区二区一区 | 伊人网在线综合 | 精品日韩一区二区三区 | 精品一区二区三区视频在线观看 | 狠狠狠干| 国产精品99一区二区 | 综合五月 | 国产乱精品一区二区三区 | 91一区 | 国产乱码精品1区2区3区 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 国产精品1区2区 | 成人在线a| 男人av网 | 久久精品国产99国产精品 | 涩涩视频在线播放 | 色伊人久久 | 91人人看| 国产欧美日韩一区二区三区在线 | 国产一区二区观看 | a在线免费观看 | 天堂亚洲网 | 精品视频久久久 | 91中文字幕在线 | 亚洲精品久久久蜜桃 | 久久久av中文字幕 | www.日本三级| 91高清免费 | 国产精品久久久久久模特 | av电影一区 | 粉色午夜视频 | 一区二区三区精品在线视频 | 成人动漫一区二区 | 欧美一级免费看 | 五月婷婷 六月丁香 | 一区二区三区免费观看 | 精品久久久久久久久久久院品网 | 亚洲高清在线观看 | 国产999精品久久久影片官网 | 中文字幕av一区 |