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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5004|回復(fù): 3
收起左側(cè)

單片機(jī)乒乓球比賽Proteus仿真+PCB原理圖+源程序

[復(fù)制鏈接]
ID:495792 發(fā)表于 2019-6-11 09:15 | 顯示全部樓層 |閱讀模式
這是一個(gè)乒乓球的程序,分享一下。
用protues畫(huà)的仿真圖,keil5編的程序,有很多不足的地方望大家指出。

Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png 0.png

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
0.png
單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define SEG P2
  5. sbit KEY_A_START = P1^4;
  6. sbit KEY_A_HIT = P1^5;
  7. sbit KEY_B_START = P1^6;
  8. sbit KEY_B_HIT = P1^7;
  9. sbit SCAN1 = P3^4;
  10. sbit SCAN2 = P3^5;
  11. sbit SCAN3 = P3^6;
  12. sbit SCAN4 = P3^7;
  13. sbit LED1 = P0^0;
  14. sbit LED2 = P0^1;
  15. sbit LED3 = P0^2;
  16. sbit LED4 = P0^3;
  17. sbit LED5 = P0^4;
  18. sbit LED6 = P0^5;
  19. sbit LED7 = P0^6;
  20. sbit LED8 = P0^7;
  21. sbit LED9 = P1^0;
  22. sbit LED10 = P1^1;
  23. sbit LED11 = P1^2;
  24. sbit LED12 = P1^3;

  25. uchar A_num = 0;
  26. uchar B_num = 0;
  27. uchar number=0;
  28. uchar display=0;//數(shù)碼管刷新
  29. uchar ball_time = 300;
  30. uchar ball_num = 0;
  31. uchar flag_ball = 0;
  32. uchar ball_state = 0;
  33. uchar flag_A_B = 0;
  34. uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  35. void scan_ball();
  36. void delay(uint j) //1ms
  37. {
  38.         uchar i=250;
  39.         for(;j>0;j--)
  40. {
  41.                 while(--i);
  42.                 i=249;
  43.                 while(--i);
  44.                 i=250;
  45.         }
  46. }

  47. void None_LED()
  48. {
  49.           LED1=1;
  50.                 LED2=1;
  51.           LED3=1;
  52.                 LED4=1;
  53.                 LED5=1;
  54.                 LED6=1;
  55.                 LED7=1;
  56.                 LED8=1;
  57.                 LED9=1;
  58.                 LED10=1;
  59.                 LED11=1;
  60.                 LED12=1;               
  61.         
  62. }
  63. void Key_scan()
  64. {
  65.         if(KEY_A_START==0)//按下甲開(kāi)始按鍵
  66.         {
  67.                 delay(10);
  68.                 if(KEY_A_START==0)
  69.                 {
  70.                         while(KEY_A_START==0);
  71.      flag_A_B=1;
  72.                  flag_ball=1;
  73.                         
  74.                 }
  75.                
  76.         }else if(KEY_A_HIT==0)//按下甲擊球按鍵
  77.         {
  78.           delay(10);
  79.                 if(KEY_A_HIT==0)
  80.                 {
  81.                         flag_A_B=0;
  82.                         scan_ball();
  83.                         while(KEY_A_HIT==0);
  84.                   if(ball_state==2)
  85.                         {
  86.                                 A_num++;
  87.                                 None_LED();
  88.                                 flag_ball=0;
  89.                         }else
  90.                         {
  91.                                 flag_A_B=1;
  92.                         }
  93.                         
  94.                 }
  95.   }else if(KEY_B_START==0)//按下乙開(kāi)始按鍵
  96.         {
  97.           delay(10);
  98.                 if(KEY_B_START==0)
  99.                 {
  100.                         while(KEY_B_START==0);
  101.      flag_A_B=2;
  102.                  flag_ball=12;
  103.                 }
  104.   }else if(KEY_B_HIT==0)//按下乙擊球按鍵
  105.         {
  106.           delay(10);
  107.                 if(KEY_B_HIT==0)
  108.                 {
  109.                         flag_A_B=0;
  110.                         scan_ball();
  111.                         while(KEY_B_HIT==0);
  112.                   if(ball_state==1)
  113.                         {
  114.                                 B_num++;
  115.                                 None_LED();
  116.                                 flag_ball=0;
  117.                         }else
  118.                         {
  119.                                 flag_A_B=2;
  120.                         }

  121.                 }
  122.   }
  123.         
  124. }

  125. void scan_ball()//返回當(dāng)前球的位置 0 未發(fā)球   1在A(yíng)球區(qū)   2 在B球區(qū)
  126. {
  127.         if((LED9 & LED10 & LED11 & LED12)==1)
  128.         {
  129.                 ball_state=1;
  130.         }else
  131.         {
  132.         ball_state=2;
  133.         }
  134. }


  135. void main()
  136. {
  137.         TMOD |= 0x01;
  138.         TH0=0XFC;
  139.         TL0=0X18;
  140.         TR0=1;
  141.         ET0=1;
  142.         EA=1;         
  143.         while(1)
  144.         {
  145.                
  146.                  Key_scan();
  147.         }
  148.         
  149. }



  150. void t0isr() interrupt 1//定時(shí)器0函數(shù)
  151. {
  152.         TH0=0XFC;
  153.         TL0=0X18;
  154.   display++;                  
  155.         ball_num++;
  156.         if(display==2)
  157.         {
  158.                 display=0;
  159.                 SEG=0xff;

  160.                         switch(number)
  161.                 {

  162.      case 0:SCAN4=1;SCAN3=0;SCAN2=0;SCAN1=0;SEG=distab[A_num%10];break;
  163.         
  164.      case 1:SCAN4=0;SCAN3=1;SCAN2=0;SCAN1=0;;SEG=distab[A_num/10];break;

  165.      case 2:SCAN4=0;SCAN3=0;SCAN2=1;SCAN1=0;SEG=distab[B_num%10];break;

  166.      case 3:SCAN4=0;SCAN3=0;SCAN2=0;SCAN1=1;;SEG=distab[B_num/10];break;

  167.      default:break;
  168.                         
  169.     }
  170.                 number++;
  171.     if(number>3)number=0;
  172.         }
  173.         
  174.         
  175.                 if(ball_num==ball_time)
  176.                 {
  177.                         ball_num=0;

  178.                         None_LED();
  179.                         switch(flag_ball)
  180.                         {
  181.                                 case 1:LED1=0;break;
  182.                                 case 2:LED2=0;break;
  183.                                 case 3:LED3=0;break;
  184.                                 case 4:LED4=0;break;
  185.                                 case 5:LED5=0;break;
  186.                                 case 6:LED6=0;break;
  187.                                 case 7:LED7=0;break;
  188.                                 case 8:LED8=0;break;
  189.                                 case 9:LED9=0;break;
  190.                                 case 10:LED10=0;break;
  191.                                 case 11:LED11=0;break;
  192.                                 case 12:LED12=0;break;                                
  193.                         }
  194.                                 if(flag_A_B==1)
  195.                         {
  196.                                 flag_ball++;
  197.                         }else if(flag_A_B==2)
  198.                         {
  199.                                 flag_ball--;
  200.                         }
  201.                         if(flag_ball==13 && flag_A_B==1)
  202.                         {
  203.                                 if(B_num!=20)
  204.                                 {
  205.                                 B_num++;
  206.                                 flag_A_B=0;
  207.                                 }
  208.                                 else if(B_num==20)
  209.                                 {
  210.                                         flag_A_B=0;
  211.                                         A_num=0;
  212.                                         B_num=0;
  213.                                 }
  214.                                 None_LED();
  215.                                 flag_ball=0;
  216.                         }else if(flag_ball==0 && flag_A_B==2)
  217.                         {
  218.                                 if(A_num!=20)
  219.                                 {
  220.                                 A_num++;
  221.                                 flag_A_B=0;
  222.                                 }
  223.                                 else if(A_num==20)
  224.                                 {
  225.                                         flag_A_B=0;
  226.                                         A_num=0;
  227.                                         B_num=0;
  228.                                 }
  229.                                                 None_LED();
  230.                                                 flag_ball=0;
  231.                         }
  232.                         
  233.                 }
  234.         

  235.         
  236.         
  237. }
復(fù)制代碼
0.png
所有資料51hei提供下載:
資料.7z (15.05 MB, 下載次數(shù): 101)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:755651 發(fā)表于 2020-5-19 14:03 | 顯示全部樓層
你這個(gè)題目要求是啥?
回復(fù)

使用道具 舉報(bào)

ID:964648 發(fā)表于 2021-10-13 13:35 | 顯示全部樓層
左下角的三個(gè)孔的方塊是什么錒
回復(fù)

使用道具 舉報(bào)

ID:972523 發(fā)表于 2021-10-16 13:52 | 顯示全部樓層
下角的兩個(gè)孔的方塊是什么錒
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品久久 | 精品欧美乱码久久久久久1区2区 | 欧美成年黄网站色视频 | 一级国产精品一级国产精品片 | 一区二区三区av夏目彩春 | 黄色三级免费 | 日本午夜视频 | 午夜影院普通用户体验区 | 亚洲精品久久久久中文字幕二区 | 天天射中文 | 亚洲天堂色 | 福利国产 | 中文字幕一区在线 | 日韩精品免费在线观看 | 久久99精品国产自在现线小黄鸭 | 欧美精品一区二区三区四区五区 | 成人av免费在线观看 | 中文天堂在线一区 | 99视频网站| 蜜桃免费一区二区三区 | 91精品国产色综合久久不卡蜜臀 | 一区二区三区在线看 | 日韩国产高清在线观看 | 毛片a级 | 日本网站免费在线观看 | 黄色大片免费看 | 在线伊人网 | 成人av一区二区亚洲精 | 在线视频中文字幕 | 奇米av| 成人深夜福利 | 免费观看一级毛片 | 久久精品国产一区二区电影 | 精品一区二区三区四区 | 北条麻妃一区二区三区在线视频 | 久久国色| 国产精品视频一二三区 | 中文字幕免费在线 | 国产高清在线 | 久久成人综合 | 亚洲www |