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

標題: 基于51單片機的籃球計分器設計(實物+仿真+PCB+源程序) [打印本頁]

作者: zfdj337    時間: 2018-7-21 15:49
標題: 基于51單片機的籃球計分器設計(實物+仿真+PCB+源程序)
這是我以前做的51單片機籃球計分器設計,
花了一個星期時間,
附件里面包括源代碼;PCB原理圖,
和proteus的仿真文件
都是自己原創的,大家多多指教

制作出來的籃球計分器實物圖如下:


電路原理圖如下:


籃球計分器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


Altium Designer畫的籃球計分器原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機籃球計分器程序源碼:
  1. #include<reg51.h>//51單片機頭文件
  2. typedef unsigned char uchar;
  3. typedef unsigned int  uint;
  4. sbit K1=P3^2;//比賽倒計時開始/暫停
  5. sbit K2=P3^3;//24s倒計時重新開始
  6. sbit P20=P2^0;//乙隊+1按鍵
  7. sbit P21=P2^1;//乙隊+2按鍵
  8. sbit P22=P2^2;//甲隊+1按鍵
  9. sbit P23=P2^3;//甲隊+2按鍵
  10. sbit P24=P2^4;//甲隊+3按鍵
  11. sbit P25=P2^5;//乙隊+3按鍵
  12. sbit P26=P2^6;//預留按鍵
  13. sbit P27=P2^7;
  14. sbit beep=P3^6;//蜂鳴器接口  
  15. sbit RS=P1^0;
  16. sbit RW=P1^1;
  17. sbit E=P1^2;
  18. char second,minute,num,time,aa;
  19. uchar dd,bb,cc;
  20. uchar code table1[]={"H.T 000:000 T.H "};
  21. uchar code table2[]={"12:00  SEC-1  24"};

  22. //延時子函數
  23. void delay(uint z)  
  24. {
  25.         uint x;
  26.         uchar y;
  27.         for(x=z;x>0;x--)
  28.                   for(y=110;y>0;y--);
  29. }
  30. //LCD1602液晶寫指令子函數
  31. void write_com(uchar com)
  32. {        
  33.     RW=0;
  34.     RS=0;
  35.         P0=com;
  36.         delay(5);
  37.         E=1;
  38.         delay(5);
  39.         E=0;
  40. }
  41. //LCD1602液晶寫數據子函數
  42. void write_date(uchar date)
  43. {
  44.         RW=0;
  45.         RS=1;
  46.         P0=date;
  47.         delay(5);
  48.         E=1;
  49.         delay(5);
  50.         E=0;
  51. }
  52. //LCD1602液晶初始化子函數
  53. void LCD1602_init()
  54. {
  55.         uchar i;
  56.         bb=0;         //H.T分數初始化
  57.         cc=0;         //T.H分數初始化
  58.         time=0;
  59.         TMOD=0x10;    //定時器1初始化
  60.         TL1=0x00;
  61.         TH1=0x4c;
  62.         EA=1;         //開總中斷
  63.         ET1=1;        //開定時器1
  64.         TR1=0;        //開中斷0
  65.         EX1=1;        //開中斷1
  66.         IT0=1;        //中斷0為邊沿觸發
  67.         IT1=1;        //中斷1為邊沿觸發
  68.         E=0;
  69.         beep=0;
  70.         second=0;
  71.         minute=12;
  72.         num=1;
  73.         aa=24;
  74.         write_com(0x38);  //LCD設置初始化
  75.         write_com(0x0c);
  76.         write_com(0x06);
  77.         write_com(0x01);
  78.         write_com(0x80);  //LCD顯示初始化
  79.         for(i=0;i<16;i++)
  80.         {
  81.                   write_date(table1[i]);
  82.         }
  83.         write_com(0x80+0x40);
  84.         for(i=0;i<16;i++)
  85.         {
  86.                   write_date(table2[i]);
  87.         }
  88. }
  89. //分數更新子函數
  90. void point_lcd(uchar add,uchar dat)
  91. {
  92.         write_com(0x80+add);
  93.         write_date(0x30+dat/100);
  94.         write_date(0x30+(dat%100)/10);
  95.         write_date(0x30+dat%10);
  96.         write_com(0x80+add);
  97. }
  98. //按鍵掃描子函數
  99. void keyscan()
  100. {
  101.         P2=0xf0;
  102.         if((P2&0xf0)!=0xf0)
  103.         {
  104.                 delay(20);
  105.         }
  106.         if((P2&0xf0)!=0xf0)
  107.         {
  108.                 P2=0xf7;
  109.                         if(P24==0)
  110.                         {
  111.                                 while(P24==0);         //P24按下H.T分數加1
  112.                         bb++;
  113.                           point_lcd(0x04,bb);  
  114.                           if(P24==0)        
  115.                                 {
  116.                                    while(P24==0);
  117.                                     delay(20);
  118.                                 }
  119.                         }
  120.                         else if(P25==0)           //P25按下H.T分數加2
  121.                         {
  122.                                 while(P25==0);
  123.                                 bb=bb+2;
  124.                           point_lcd(0x04,bb);
  125.                           if(P25==0)
  126.                                 {
  127.                                  while(P25==0);
  128.                                  delay(20);
  129.                                 }
  130.                         }
  131.                         else if(P26==0)       //P26按下H.T分數加3
  132.                         {
  133.                           while(P26==0);
  134.                         bb=bb+3;
  135.                           point_lcd(0x04,bb);
  136.                            if(P26==0)
  137.                                 {
  138.                                    while(P26==0);
  139.                                    delay(20);
  140.                                 }

  141.                         else if(P27==0)         //P27按下T.H分數加一
  142.                         {
  143.                          while(P27==0);
  144.                        cc++;
  145.                          point_lcd(0x08,cc);
  146.                          if(P27==0)
  147.                                  while(P27==0);
  148.                                  delay(20);
  149.                            }
  150.                         }
  151.                 P2=0xfb;
  152.               if(P24==0)           //P24按下T.H分數加2
  153.                           {
  154.                          while(P24==0);
  155.                    cc=cc+2;
  156.                          point_lcd(0x08,cc);
  157.                          if(P24==0)
  158.                            {
  159.                                 while(P24==0);
  160.                                 delay(20);
  161.                            }
  162.                          }
  163.                           else if(P25==0)      //P25按下T.H分數加3
  164.                           {
  165.                             while(P25==0);
  166.                         cc=cc+3;
  167.                           point_lcd(0x08,cc);
  168.                            if(P25==0)
  169.                                 {
  170.                                   while(P25==0);
  171.                                   delay(20);
  172.                                 }
  173.                           }
  174.                           else if(P26==0)       //P26按下交換比分
  175.                           {
  176.                                   while(P26==0);
  177.                                   dd=bb;
  178.                                   bb=cc;
  179.                                   cc=dd;
  180.                                   point_lcd(0x08,cc);
  181.                                   point_lcd(0x04,bb);
  182.                                   if(P26==0)
  183.                                 {
  184.                                   while(P26==0);
  185.                                   delay(20);
  186.                                 }
  187.                           }


  188.         }
  189. //比賽倒計時/24s倒計時
  190. void counter_down()
  191. {         
  192.         uchar i;
  193.         if(time>=20)     //每1s倒計時做減一操作
  194.         {
  195.                   second--;
  196.                   aa--;
  197.                   write_com(0x80+0x4e);  //24s倒計時顯示
  198.                   write_date(0x30+aa/10);
  199.                   write_date(0x30+aa%10);
  200.                 write_com(0x80+0x4e);
  201.                 beep=1;
  202.                   if(aa==0)    //24s結束發出連續報警
  203.                   {
  204.                            beep=0;
  205.                            delay(3000);
  206.                            beep=1;
  207.                            aa=24;
  208.                   }
  209.                   if((second==0)&&(minute==0))  //檢測一節比賽是否結束
  210.                   {
  211.                            TR1=0;     //定時器1暫停
  212.                            write_com(0x80+0x44);
  213.                            write_date(0x30);
  214.                            num++;
  215.                            aa=24;    //24s計時復位
  216.                            write_com(0x80+0x4e);  //24s倒計時顯示
  217.                            write_date(0x30+aa/10);
  218.                            write_date(0x30+aa%10);
  219.                         write_com(0x80+0x4e);
  220.                            if(num<5)    //每節結束蜂鳴器發出間斷報警
  221.                            {
  222.                             for(i=80;i>0;i--)
  223.                             {
  224.                                      beep=0;
  225.                                      delay(500);
  226.                                      beep=1;
  227.                                      delay(500);
  228.                             }
  229.                            }
  230.                            if(num==5)    //終場結束,蜂鳴器發出連續警報聲
  231.                            {
  232.                              beep=0;
  233.                              delay(10000);
  234.                              num=0;
  235.                            }        
  236.                            beep=1;     //蜂鳴器關閉
  237.                         write_com(0x80+0x4b); //更新"SEC-?"
  238.                         write_date(0x30+num);
  239.                         write_com(0x80+0x4b);
  240.                         second=0;     //倒計時復位
  241.                         minute=12;
  242.                   }
  243.                   if(second==-1)
  244.                   {
  245.                            second=59;
  246.                            minute--;
  247.                   }
  248.                   write_com(0x80+0x40);  //更新倒計時顯示
  249.                   write_date(0x30+minute/10);
  250.                   write_date(0x30+minute%10);
  251.                   write_com(0x80+0x43);
  252.                   write_date(0x30+second/10);
  253.                   write_date(0x30+second%10);
  254.                 write_com(0x80+0x43);
  255.                   time=0;
  256.         }
  257. }
復制代碼



全部資料51hei下載地址:
源程序和原理圖.rar (299.14 KB, 下載次數: 895)




作者: travei    時間: 2018-8-24 17:37
厲害了
作者: qingxiu    時間: 2018-11-14 12:24
樓主,按鍵那里的功能怎么實現不了,程序都是對的嗎
作者: qqq364587244    時間: 2018-11-15 12:42
厲害了 怎么用
作者: JANVIN329    時間: 2018-11-15 12:45
好東西怎么下載
作者: zbwwbz    時間: 2018-11-27 10:28
樓主proteus仿真原理圖最上面的那個RP1是什么
作者: mcikou    時間: 2018-11-27 15:42
作者,可否給個QQ,借一步說話
作者: vae7758521    時間: 2018-11-29 16:50
我想把1602改成12864怎么改,請教大神啊
作者: 1476928506    時間: 2018-12-3 09:47
怎么將液晶顯示屏改成共陰極數碼管
作者: yyyyye    時間: 2018-12-5 23:16
有沒有組成的電子元器件清單
作者: 17361608945    時間: 2018-12-6 22:06
下載了這個,源程序打不開,仿真圖也有錯誤
作者: 夢里見回復    時間: 2018-12-17 21:57
想問改成12864要怎么改
作者: 12345555900000    時間: 2018-12-24 11:15
樓主 我這兩天在實訓  你這個源程序沒有問題  但是仿真出來液晶顯示屏沒有東西是怎么回事啊   能告訴我嗎 謝謝啦
作者: zhaoy    時間: 2019-3-6 17:52
非常好,感謝樓主分享
作者: 275474557    時間: 2019-3-25 12:27
不錯,很實用了
作者: hdh151    時間: 2019-5-6 07:05
可以可以,厲害厲害
作者: 763900682    時間: 2019-5-11 15:23

樓主,按鍵那里的功能怎么實現不了,程序都是對的嗎
作者: 763900682    時間: 2019-5-11 15:34
zbwwbz 發表于 2018-11-27 10:28
樓主proteus仿真原理圖最上面的那個RP1是什么

上拉電阻
作者: Ming305    時間: 2019-5-26 14:22
謝謝分享,受益匪淺吶
作者: userkang    時間: 2019-5-28 14:51
17361608945 發表于 2018-12-6 22:06
下載了這個,源程序打不開,仿真圖也有錯誤

真的程序也打不開,仿真圖也有錯嗎

作者: zhaoyeyun    時間: 2019-5-29 11:00
仿真圖里C51的引腳和芯片實際引腳不一樣,代碼會有影響嗎
作者: zhaoyeyun    時間: 2019-5-29 11:00
代碼下載到芯片里,顯示屏沒有顯示是什么原因啊
作者: emmmhhh    時間: 2019-6-7 15:40
您好,樓主,我試了一下,按鍵換比分位置不行啊,而且24s一直倒,這倆問題如何解決,求指教。
作者: asdasdas222    時間: 2019-6-11 11:10
樓主 P26互換比分如何實現啊?要修改程序嗎?
作者: 13433104076    時間: 2019-6-11 20:46
樓主我們有黑幣,可以分享到百度云嗎

作者: 王紫淇    時間: 2019-6-12 14:55
樓主,今天剛注冊,沒有黑幣,過幾天領登陸獎勵補行嗎?現在急著用
作者: 網蟲蟲    時間: 2019-6-16 16:27
正好解了我的燃眉之急哈哈i謝謝了
作者: ligangyi    時間: 2019-6-16 17:39
謝謝樓主分享,受益匪淺啊
作者: zczxxz    時間: 2019-6-17 16:35
12345555900000 發表于 2018-12-24 11:15
樓主 我這兩天在實訓  你這個源程序沒有問題  但是仿真出來液晶顯示屏沒有東西是怎么回事啊   能告訴我嗎  ...

我是也是 LCD就只是亮了而已 不關按什么都沒什么反應 樓主能解決一下嗎?


作者: Richer520    時間: 2019-7-1 23:39
如何交換場地,程序你好像有交換場地,但是仿真圖你怎么沒有交換場地按鈕
作者: Richer520    時間: 2019-7-2 14:02
qingxiu 發表于 2018-11-14 12:24
樓主,按鍵那里的功能怎么實現不了,程序都是對的嗎

都是對的,程序重新裝入單片機
作者: lxzzz    時間: 2019-7-8 11:26
樓主 能否發一份呀謝謝了1257594783@qq.com
作者: zgchen    時間: 2019-10-18 22:25
建議時間顯示還是用LED顯示啊!!這樣可以做大點場上隊員才看得見啊!!
作者: vvyu    時間: 2019-10-30 09:29
LCD 顯示屏沒有反應啊

作者: 諸葛末全    時間: 2019-11-12 15:28
好強啊,樓主
作者: 曾卓瑀    時間: 2019-11-20 21:03
很好 謝謝
作者: liuyuanxin    時間: 2019-11-29 16:53
沒黑幣的我,自己畫仿真圖好難啊,元件都找不到啊嗚嗚
作者: liuyuanxin    時間: 2019-11-30 10:04
vvyu 發表于 2019-10-30 09:29
LCD 顯示屏沒有反應啊

我的也沒有反應.....
作者: fxdwhy    時間: 2019-12-2 16:12
能不能請教下怎么插線 謝謝qq1004189543
作者: a_lin    時間: 2019-12-3 21:08
樓主可以發一份給我嗎?剛剛注冊的號碼,沒有黑幣。麻煩了。2920137008@qq.com
作者: windfish    時間: 2019-12-9 23:08
感謝樓主的分享!看了樓主的設計,我明白了不少。感謝!
作者: windfish    時間: 2019-12-9 23:09
感謝樓主的分享
作者: kneken    時間: 2019-12-18 00:27
不錯,很實用!!
作者: jick345678b    時間: 2019-12-18 03:41
194行程序怎么顯示錯誤?
作者: xsz2026246    時間: 2019-12-22 09:22
大佬我參考下做我的期末項目了
作者: JCC-520    時間: 2019-12-23 10:21
復制程序之后,為啥我的顯示有錯誤
作者: safas    時間: 2020-1-2 09:25
仿真圖用哪些小器件
作者: Jspower    時間: 2020-2-27 11:05
為什么下載到單片機就顯示不出來?

作者: s17336380743    時間: 2020-6-19 07:49
能將倒計時改成計時嗎
作者: WJY111    時間: 2020-7-5 19:19
謝謝樓主,給了我學習單片機的參考。
作者: WJY111    時間: 2020-7-7 19:38
源程序和仿真圖好像對不上號,交換鍵好像沒有。初學者求解惑。
作者: 1120924138    時間: 2020-12-1 16:52
圖很好,就是不知道我為什么數碼管沒有顯示。
作者: 814    時間: 2021-3-5 16:26
17361608945 發表于 2018-12-6 22:06
下載了這個,源程序打不開,仿真圖也有錯誤

確實,運行顯示5個警告
作者: 松鼠杭    時間: 2023-6-17 08:52
樓主還在不,出現了這個錯誤在第194行
作者: 松鼠杭    時間: 2023-6-17 09:03
松鼠杭 發表于 2023-6-17 08:52
樓主還在不,出現了這個錯誤在第194行

lan.c(194): error C141: syntax error near 'void', expected '__asm'
作者: hh434    時間: 2023-11-14 14:11
void counter_down()這個函數有點不懂啊
作者: linshaoheng    時間: 2023-12-22 22:33
可以呀,厲害,感謝分享!




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产免费黄色片 | 免费毛片基地 | 成人羞羞国产免费动态 | 中文天堂在线观看 | 国产盗摄视频 | 久久视频免费观看 | 视频一二区 | 精品一区二区在线视频 | 日韩欧美一区在线 | 黄色一级大片在线免费看产 | 一级做a视频 | 欧美在线观看一区二区 | 亚洲国产精品久久久久久久 | 久久久久久综合 | 国产精品欧美在线 | 日本在线视频一区 | 成人黄色小视频 | 久久精品久久久 | 伊人春色在线 | 国产一级18片视频 | 在线日韩欧美 | 天天操天天操 | 日韩欧美专区 | 亚洲天堂影院 | 亚洲视频在线播放 | 免费在线观看黄 | 国产黄色一区 | 欧美伦理一区二区 | 精品一区av | 成年人毛片 | 欧美日韩不卡 | 日本高潮视频 | 免费一级全黄少妇性色生活片 | 中国一级毛片免费看 | 成年人视频网站 | av网站免费在线观看 | av在线资源| 精品无人国产偷自产在线 | 天天草天天 | 成人网页| 成人一级黄色片 |