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

標題: 單片機籃球計時器Proteus仿真程序 [打印本頁]

作者: safas    時間: 2020-1-2 09:30
標題: 單片機籃球計時器Proteus仿真程序
代碼加仿真


單片機源程序如下:
  1. #include<reg52.h>
  2. #include<absacc.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit A8=P2^0;  
  6. sbit A9=P2^1;
  7. sbit A10=P2^2;
  8. sbit A11=P2^3;
  9. sfr P00=0x80;


  10. uchar code wei_1[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
  11. uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00,0X40};

  12. uchar minute=12;  //分
  13. uchar second=0;   //秒
  14. uchar key_status=0;                //按鍵狀態值
  15. uchar scoreA=0;                //A隊得分
  16. uchar scoreB=0;                //B隊得分
  17. uchar count1=20;        //記錄定時器時間
  18. uchar match=1;                //比賽節數
  19. uchar rule_time=24;        //記錄24秒規則
  20. uchar rule_flag=0;                        //記錄24秒規則是否啟用


  21. /*
  22. 初始化IO口
  23. */
  24. void IO_init(){
  25.         A8=0;
  26.         A9=0;
  27. }
  28. /*
  29. 初始化時間
  30. */

  31. void time_init(){
  32.         TMOD = 0x01;
  33.         TH0 = (65536-50000)/256;
  34.         TL0 = (65536-50000)%256;
  35.         EA = 1;
  36.         ET0 = 1;
  37. }
  38. /*
  39. 延時函數
  40. */
  41. void delay_ms(uint z){
  42.   uint i;
  43.         uchar j;
  44.         for(i=0;i<z;i++){
  45.                
  46.                 for(j=0;j<100;j++);
  47.         }
  48. }

  49. /*
  50. 計時函數
  51. */
  52. void T0_Time() interrupt 1 using 1{
  53.         if (count1-- == 0)
  54.         {
  55.                 second--;
  56.                 rule_time--;
  57.                 count1 = 20;
  58.         }
  59.         TH0 = (65536-50000)/256;
  60.         TL0 = (65536-50000)%256;
  61. }

  62. /*
  63. 時間顯示函數
  64. */
  65. void time_display(uchar w2,uchar d2){
  66.         uchar shi1,ge1;
  67.         shi1=d2/10;
  68.         ge1=d2%10;
  69.         
  70.         P00=wei_1[w2];
  71.         A10=1;
  72.         A10=0;
  73.         P00=table[shi1];;
  74.         A8=1;
  75.         A8=0;
  76.         delay_ms(5);
  77.         P00=0;
  78.         A10=1;
  79.         A10=0;
  80.         A8=1;
  81.         A8=0;
  82.         
  83.         P00=wei_1[w2+1];
  84.         A10=1;
  85.         A10=0;
  86.         P00=table[ge1];
  87.         A8=1;
  88.         A8=0;
  89.         delay_ms(5);
  90.         P00=0;
  91.         A10=1;
  92.         A10=0;
  93.         A8=1;
  94.         A8=0;        
  95. }

  96. /*
  97. 分數顯示函數
  98. */
  99. void score_dispaly(uchar w2,uchar d2){
  100.         uchar qian2,shi2,ge2;
  101.         qian2=d2/100;
  102.         shi2=d2%100/10;
  103.         ge2=d2%100%10;
  104.         
  105.         P00=wei_1[w2];
  106.         A9=1;
  107.         A9=0;
  108.         P00=table[qian2];;
  109.         A8=1;
  110.         A8=0;
  111.         delay_ms(10);
  112.         P00=0;
  113.         A9=1;
  114.         A9=0;
  115.         A8=1;
  116.         A8=0;
  117.         
  118.         P00=wei_1[w2+1];
  119.         A9=1;
  120.         A9=0;
  121.         P00=table[shi2];
  122.         A8=1;
  123.         A8=0;
  124.         delay_ms(10);
  125.         P00=0;
  126.         A9=1;
  127.         A9=0;
  128.         A8=1;
  129.         A8=0;        
  130.         
  131.         P00=wei_1[w2+2];
  132.         A9=1;
  133.         A9=0;
  134.         P00=table[ge2];
  135.         A8=1;
  136.         A8=0;
  137.         delay_ms(10);
  138.         P00=0;
  139.         A9=1;
  140.         A9=0;
  141.         A8=1;
  142.         A8=0;
  143. }

  144. /*
  145. 鍵盤輸入函數
  146. */
  147. void key(){
  148.         static uchar key_new = 0, key_l,temp;
  149.         key_status = 0;                  
  150.         P1 = 0x0f;
  151.         if((P1 & 0x0f) != 0x0f)               
  152.         {
  153.                 delay_ms(1);                     
  154.                 if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
  155.                 {                                                
  156.                         key_new = 0;
  157.                         /*
  158.                         矩陣鍵盤掃描
  159.                         */
  160.                         key_l = (P1 | 0xf0);   
  161.                         P1 = key_l;
  162.                         switch(P1)
  163.                         {
  164.                                 /*
  165.                                 開始計時/比賽繼續        
  166.                                 */
  167.                                 case 0x7e:  
  168.                                         TR0=1;  
  169.                                         rule_flag=1;
  170.                                         time_display(6,rule_time);
  171.                                         break;         
  172.                                 /*
  173.                                 暫停比賽
  174.                                 */
  175.                                 case 0x7d:
  176.                                         TR0=0;
  177.                                         break;  
  178.                                 
  179.                                 /*
  180.                                 加分,同時24秒清零和總計時器停止計時
  181.                                 */
  182.                                 case 0xee:
  183.                                         TR0=0;
  184.                                         scoreA +=3;
  185.                                         rule_time=24;   
  186.                                         rule_flag=0;
  187.                                         break;
  188.                                 case 0xed:
  189.                                         TR0=0;                                         
  190.                                         scoreA +=2;
  191.                                         rule_time=24;   
  192.                                         rule_flag=0;
  193.                                         break;
  194.                                 case 0xeb:  
  195.                                         TR0=0;
  196.                                         scoreA +=1;
  197.                                         rule_time=24;   
  198.                                         rule_flag=0;
  199.                                         break;
  200.                                 case 0xde:  
  201.                                         TR0=0;
  202.                                         scoreB +=3;
  203.                                         rule_time=24;   
  204.                                         rule_flag=0;
  205.                                    break;
  206.                                 case 0xdd:  
  207.                                         TR0=0;
  208.                                         scoreB +=2;
  209.                                         rule_time=24;   
  210.                                         rule_flag=0;
  211.                                         break;
  212.                                 case 0xdb:  
  213.                                         TR0=0;
  214.                                         scoreB +=1;
  215.                                         rule_time=24;   
  216.                                         rule_flag=0;
  217.                                         break;
  218.                                 /*
  219.                                 增加比賽節數,同時24秒復位和總計時器復位
  220.                                 */
  221.                                 case 0xbd:
  222.                                         match++;
  223.                                         minute=12;
  224.                                         second=0;
  225.                                         TR0=0;
  226.                                         rule_time=24;   
  227.                                         rule_flag=0;
  228.                                         break;
  229.                                 /*
  230.                                 手動24秒復位
  231.                                 */
  232.                                 case 0xbe:
  233.                                         if(TR0==1){
  234.                                                         rule_time=0;   
  235.                                                         rule_flag=0;
  236.                                         }else{
  237.                                                         rule_flag=0;  
  238.                                         }
  239.                                         break;
  240.                         }        
  241.                 }                        
  242.         }
  243.         else
  244.         {
  245.                 key_new = 1;
  246.         }
  247. }

  248. void main()
  249. {
  250.         IO_init();
  251.         time_init();
  252.         while(1){
  253.                 key();
  254.                
  255.                 if(second==0){
  256.                         /*
  257.                                 判斷某節比賽是否結束
  258.                         */
  259.                         if(minute==0){
  260.                                 /*
  261.                                 判斷是否為最后一節比賽
  262.                                 */
  263.                                 if(match<4){
  264.                                         /*
  265.                                         計時系統恢復為默認值,比賽節數加一
  266.                                         */
  267.                                         second=60;
  268.                                         minute=11;
  269.                                         match++;
  270.                                         rule_time=24;   
  271.                                         rule_flag=0;
  272.                                 }        
  273.                                 TR0=0;
  274.                         }
  275.                         /*
  276.                         比賽分鐘數減一
  277.                         */
  278.                         else {        
  279.                                 second=60;
  280.                                 minute--;
  281.                         }                                
  282.                 }
  283.                 /*
  284.                 24秒結束,計時器暫停和24秒復位
  285.                 */
  286.                 if(rule_time<=0){
  287.                         TR0=0;
  288.                         rule_time=24;        
  289.                 }
  290.                
  291.                 /*
  292.                 顯示
  293.                 */
  294.                 time_display(0,minute);
  295.                 time_display(2,second);
  296.                 time_display(4,match);
  297.                 time_display(6,rule_time);
  298.                 score_dispaly(1,scoreA);
  299.                 score_dispaly(5,scoreB);
  300.         }
  301. }
復制代碼


所有資料51hei提供下載:
csdn.rar (67.88 KB, 下載次數: 112)


作者: aalone    時間: 2020-6-25 20:08
感謝技術大大的分享
作者: 730555336    時間: 2020-12-21 22:22
為什么我的仿真運行不了
作者: 51hei團團    時間: 2020-12-22 00:39
730555336 發表于 2020-12-21 22:22
為什么我的仿真運行不了

用Proteus7.8才能打開

作者: 小白單片機123    時間: 2020-12-24 15:09
8.9版本可以嗎?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天堂素人约啪 | 久久久久久国产精品免费免费男同 | 看亚洲a级一级毛片 | 久久久国产一区二区三区四区小说 | 久久一区精品 | 午夜免费网站 | 1204国产成人精品视频 | 99热热99| 天天躁日日躁狠狠的躁天龙影院 | 色综合色综合 | 91久久北条麻妃一区二区三区 | 亚洲精品国产电影 | 日本久草 | 久久久久国产一区二区三区四区 | www性色| 污污的网站在线观看 | 91久久久久久久久 | 日韩高清一区 | 精品欧美一区二区中文字幕视频 | 国产一区2区 | 久久精品国产v日韩v亚洲 | 欧美天堂在线观看 | 九九视频网 | 中文字幕视频在线观看 | 亚洲成人一区二区 | 免费黄色a视频 | 欧美综合一区 | 91视频免费黄 | 午夜看片网站 | 一区二区国产精品 | 成人午夜在线 | 国产免费一区二区 | 国产一极毛片 | 亚洲九色| 99视频免费播放 | 一级毛片在线看 | 中文天堂网 | 国产成人精品免费视频 | 综合一区二区三区 | 精品在线一区二区三区 | 激情久久网 |