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

標題: 51單片機設計,計時器,計分器視頻教程與proteus仿真及源代碼 [打印本頁]

作者: 2371083669    時間: 2017-12-8 13:16
標題: 51單片機設計,計時器,計分器視頻教程與proteus仿真及源代碼
該項目基本滿足以下要求
1.一個四位一體數碼管顯示比賽時間,時間格式如:15:00,兩個三位一體數碼管顯示甲乙兩對的比分,比分格式如:008。
2.比賽時間采用倒計時方式,以一秒的頻率減時,上電時默認初值為15:00.
3.甲乙隊比分采用三位數,上電初值為000,最大值為999,滿足常理要求,未開始比賽以及比賽結束后比分無法加減,
4.比賽未開始之前,可以通過ADD1、DEC1鍵對比較時間的分鐘進調時,通過ADD2、DEC2鍵對比較時間的秒進行調時。
5.可隨時暫停/啟動比賽時間。
6.比賽進行時,可以通過ADD1、DEC1鍵對甲隊比分加、減,可以通過ADD2、DEC2對乙隊比分加、減。每按一次鍵,加/減1分。
7.當一節比賽完后,可以通過(EXCHANGE)換場鍵換場,換場后,比分交換顯示,交換后,下一節比賽開始時,相應的比分加減鍵也隨之交換。
8.當比賽結束時,發出報警。



視頻教程下載地址:http://www.zg4o1577.cn/bbs/dpj-100315-1.html

單片機源程序如下:
  1. /*
  2. 倒計時計算器,數碼管顯示 默認值15:00

  3. 共陽數碼管

  4. */
  5. #include <reg52.h>


  6. void delay(int ms);
  7. void dispaly(char min,char sec,int sco1,int sco2);
  8. void key_scan(void);


  9. /*共陽極數碼管的0-9數字編碼*/
  10. code unsigned char table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  11. sbit s8 = P3^6;
  12. sbit s9 = P3^7;
  13. sbit buz = P3^4;


  14. char m = 15;   //默認的分鐘
  15. char sec = 0;  //默認的秒鐘

  16. int sc1 = 0;   //默認甲方的比分
  17. int sc2 = 0;   //默認乙方的比分

  18. char buz_flag = 0; //默認報警標志為0,不報警
  19. char status = 0;  //狀態標志,0的時候表示非比賽狀態,1表示比賽狀態


  20. int main(void)
  21. {        
  22.         /*使用定時器進行計時*/
  23.         //初始化定時器0
  24.         TMOD=0xf1;  //設置T0為工作方式1    16位的定時器模式
  25.     TH0=(65535-50000)/256;     //50ms中斷一次  
  26.     TL0=(65535-50000)%256;      
  27.     /*Timer0工作在模式0下時為13位定時/計數器,
  28.     TL0只使用前5位,故對32進行求余/模    */  
  29.   
  30.      
  31.     ET0=1;      //開定時器0中斷  
  32.             
  33.         P3 = 0x3f;
  34.         
  35.         /*外部中斷0 的初始化*/
  36.         IT0 = 1;                           //設置為下降沿觸發
  37.     EX0 = 1;                           //外部中斷0中斷允許位
  38.         
  39.         
  40.         EA=1;       //開總中斷
  41. //        TR0=1;      //啟動定時器0

  42.         while(1)
  43.         {
  44.                 dispaly(m,sec,sc1,sc2);
  45.                 key_scan();
  46.                 if(buz_flag)
  47.                 {
  48.                         buz = 0;
  49.                 }
  50.         }

  51. }


  52. /*按鍵掃描*/
  53. void key_scan(void)
  54. {
  55.         static char key_flag = 0;  //按鍵按下標志 ,檢測到按下之后為1,否則為0
  56.         static char key_count = 0;
  57.         static unsigned char key_val = 0;   //檢測到按鍵之后保存的按鍵值
  58.         int t;
  59.         
  60.         P1  = 0xff;
  61.         
  62.         if(P1 != 0xff)   //有按鍵按下了
  63.         {
  64.                 if(key_flag == 1) //表示已經檢測到按鍵了
  65.                 {
  66.                         key_count++;
  67.                         if(key_count > 15)
  68.                         {
  69.                                 key_count = 0;
  70.                                 if(P1 == key_val)   //確實 有按鍵按下了
  71.                                 {
  72.                                         switch(key_val)  //進行按鍵處理
  73.                                         {
  74.                                                 case 0xfe:
  75.                                                         //add1
  76.                                                         if(status)
  77.                                                         {
  78.                                                                 sc1 += 1;
  79.                                                         }
  80.                                                         else
  81.                                                         {
  82.                                                                 m += 1;
  83.                                                         }
  84.                                                         break;
  85.                                                 case 0xfd:
  86.                                                         //dec1
  87.                                                         if(status)
  88.                                                         {        
  89.                                                                 if(sc1 > 0)
  90.                                                                 {
  91.                                                                         sc1 -= 1;
  92.                                                                 }
  93.                                                         }
  94.                                                         else
  95.                                                         {
  96.                                                                 if(m>0)
  97.                                                                 {
  98.                                                                         m -= 1;
  99.                                                                 }
  100.                                                         }
  101.                                                         break;
  102.                                                 case 0xfb:
  103.                                                         //add2
  104.                                                         if(status)
  105.                                                         {
  106.                                                                 sc2 += 1;
  107.                                                         }
  108.                                                         else
  109.                                                         {
  110.                                                                 if(sec<59)
  111.                                                                 {
  112.                                                                         sec += 1;                                                
  113.                                                                 }
  114.                                                         }
  115.                                                         break;
  116.                                                 case 0xf7:
  117.                                                         //dec2
  118.                                                         if(status)
  119.                                                         {        
  120.                                                                 if(sc2 > 0)
  121.                                                                 {
  122.                                                                         sc2 -= 1;
  123.                                                                 }
  124.                                                         }
  125.                                                         else
  126.                                                         {
  127.                                                                 if(sec>0)
  128.                                                                 {
  129.                                                                         sec -= 1;
  130.                                                                 }
  131.                                                         }
  132.                                                         break;
  133.                                                 case 0xef:
  134.                                                         //exchang
  135.                                                         t = sc1;
  136.                                                         sc1 = sc2;
  137.                                                         sc2 = t;
  138.                                                         break;
  139.                                         }
  140.                                 }
  141.                                 else
  142.                                 {
  143.                                         key_val = 0;  //還原默認值
  144.                                         key_flag = 0;  //還原默認值
  145.                                         key_count = 0;
  146.                                 }
  147.                         }
  148.                         
  149.                 }
  150.                 else
  151.                 {
  152.                         key_val = P1;  //保存按鍵的值
  153.                         key_flag = 1;  //檢測到了按鍵
  154.                 }
  155.         }
  156.         else
  157.         {
  158.                 key_val = 0;  //還原默認值
  159.                 key_flag = 0;  //還原默認值
  160.                 key_count = 0;
  161.         }
  162.         
  163. }



  164. void exint0() interrupt 0                //中斷服務函數的書寫格式
  165. {
  166. //    if(IE0 == 1)                      //產生了外部中斷,IE 自動置為1
  167.     {
  168.         if(status)
  169.                 {
  170.                         status = 0 ;  //切換到非比賽狀態
  171.                         TR0 = 0   ;   //關閉定時器0
  172.                 }        
  173.                 else
  174.                 {
  175.                         status = 1 ;  //切換到非比賽狀態
  176.                         TR0 = 1   ;   //啟動定時器1
  177.                 }
  178.     }
  179. }


  180. char counter = 0;

  181. /******T0中斷函數*******/  
  182. void Timer0()interrupt 1  
  183. {  
  184.     TH0=(65535-50000)/256;     //50ms中斷一次  
  185.     TL0=(65535-50000)%256;  
  186.     counter++;  
  187.     while(counter>=20)  
  188.     {  
  189.         counter=0;
  190.                 if(sec == 0)
  191.                 {
  192.                         m --;
  193.                         sec = 60;
  194.                         if(m == 0)
  195.                         {
  196.                                 buz_flag = 1;    //報警標志設置
  197.                         }
  198.                 }
  199.         sec--;  
  200.     }  
  201. }  



  202. //led數碼管顯示,4個參數分別表示分鐘秒鐘,分數1和分數2
  203. void dispaly(char min,char sec,int sco1,int sco2)
  204. {
  205.         char buf[10];
  206.         char i;
  207.         
  208.         buf[0] = min/10%10;  //分鐘的十位
  209.         buf[1] = min%10;     //分鐘的各位
  210.         buf[2] = sec/10%10;  //秒鐘的十位
  211.         buf[3] = sec%10;     //秒鐘的各位        
  212.         buf[4] = sco1/100%10;  //分數1的百位
  213.         buf[5] = sco1/10%10;     //分數1的十位        
  214.         buf[6] = sco1%10;      //分數1的個位
  215.         buf[7] = sco2/100%10;  //分數2的百位
  216.         buf[8] = sco2/10%10;     //分數2的十位        
  217.         buf[9] = sco2%10;      //分數2的個位        
  218.         
  219.         for(i=0;i<8;i++)
  220.         {
  221.                 P0 = table[buf[i]];
  222.                 P2 = 1<<i;
  223.                 delay(1);
  224.                 P2 = 0;               
  225.         }
  226. ……………………

  227. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
4.bisaijifenqi.rar (31.68 KB, 下載次數: 23)
4.bisaijifenqi-1208.rar (25.22 KB, 下載次數: 19)
在單片機視頻中的項目二部分,有源代碼及完整的視頻,謝謝大家,希望大家共同進步





作者: a756312364    時間: 2017-12-9 16:48
親,你的工程文件用什么打開啊
作者: a756312364    時間: 2017-12-9 22:35
打開就彈出這個窗口,百度不出來哪的問題

1.png (29.9 KB, 下載次數: 42)

1.png





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久国产视频网 | 欧美综合一区 | 精品视频一区二区三区在线观看 | 国产精品久久久久久婷婷天堂 | 成人在线免费观看 | 欧美精品一区在线 | 亚洲久草视频 | 在线看91| 天天爱综合 | 国产黄色网 | 不用播放器看的av | 刘亦菲国产毛片bd | 中文字幕av一区 | 波多野吉衣在线播放 | 黄色欧美 | 国产一级视频免费播放 | 亚洲91 | 99色在线视频 | 农村妇女毛片精品久久久 | 久久精品一区二区三区四区 | 青青草原综合久久大伊人精品 | 国产精品精品视频一区二区三区 | 日韩有码在线观看 | 国产一区二区久久 | 国产精品一区二 | 日韩精品一区二区三区中文字幕 | 国产91网址 | 国产成人精品a视频一区www | 国产欧美一区二区三区在线看蜜臀 | 亚洲视频免费观看 | 午夜视频在线 | 日本啊v在线| 一区二区三区免费在线观看 | 99re99| 国产成人精品一区二区三区网站观看 | 97天天干| 国产成人久久av免费高清密臂 | 日本一区二区三区在线观看 | 成人欧美一区二区三区黑人孕妇 | 国产在线不卡视频 | 久久伊人在 |