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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3673|回復: 8
收起左側

單片機籃球計分器keil源代碼Proteus仿真

[復制鏈接]
ID:1029353 發表于 2022-5-25 13:40 | 顯示全部樓層 |閱讀模式
可以實現籃球計分基本功能
仿真原理圖如下(大家自行畫一下圖)
運行圖片.png

單片機源程序如下:
  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. }
復制代碼


評分

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

查看全部評分

回復

使用道具 舉報

ID:1034506 發表于 2022-6-14 13:55 | 顯示全部樓層
這 代碼分別什么意思可以講一下嗎
回復

使用道具 舉報

ID:997874 發表于 2022-6-29 20:48 | 顯示全部樓層
這個代碼運行成功后功能都能運行,但是數字一直閃,怎么修改讓數字不閃呢
回復

使用道具 舉報

ID:1055989 發表于 2022-12-16 22:12 | 顯示全部樓層
有哪些模塊可以說說嗎
回復

使用道具 舉報

ID:579397 發表于 2022-12-17 01:19 | 顯示全部樓層
spider1 發表于 2022-6-29 20:48
這個代碼運行成功后功能都能運行,但是數字一直閃,怎么修改讓數字不閃呢

Proteus里面單片機的頻率改大一點
回復

使用道具 舉報

ID:579397 發表于 2022-12-17 01:19 | 顯示全部樓層
fuckpose 發表于 2022-12-16 22:12
有哪些模塊可以說說嗎

單片機,573,數碼管
回復

使用道具 舉報

ID:579397 發表于 2022-12-17 01:46 | 顯示全部樓層
程序有問題,table的是共陰的,但wei的是共陽的,需要修改

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

使用道具 舉報

ID:1058273 發表于 2022-12-19 14:54 來自手機 | 顯示全部樓層
代碼打進去,但只有比賽開始和暫停比賽和增加比賽節數有用,得分加分都加不上
回復

使用道具 舉報

ID:1068458 發表于 2023-5-2 23:28 | 顯示全部樓層
不設計減分功能嗎,加錯分了還能減
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91 中文字幕 | 国产做a爱片久久毛片 | 蜜桃黄网 | 久久亚洲一区二区 | 国产黄色在线观看 | 国产午夜三级一区二区三 | 羞羞网站免费 | 国产91综合 | 涩在线| heyzo在线| 欧美视频一区二区三区 | 91超碰在线| 一区二区三区国产精品 | 日韩av高清| 天天色av| 国产综合第一页 | 自拍偷拍中文字幕 | www.青青草 | 亚洲一区二区三区免费观看 | 久久久久国产一区二区三区四区 | 黄色大片网站 | 成人在线免费 | 中国免费黄色片 | 亚洲成人av | 国产一极毛片 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲精品日韩精品 | 亚洲一区视频在线 | 中文久久 | 麻豆精品一区二区三区在线观看 | 性天堂网 | 欧美日韩综合精品 | 国产成人福利视频在线观看 | 亚洲字幕在线观看 | 精品网 | 亚洲人成在线观看 | 中文日韩字幕 | 天天干天天玩天天操 | 免费看一区二区三区 | 国产成在线观看免费视频 | 天天插天天舔 |