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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10678|回復: 3
打印 上一主題 下一主題
收起左側

單片機籃球計分器設計仿真及程序

[復制鏈接]
跳轉到指定樓層
樓主
可以實現A、B兩隊的分數記錄,12分鐘倒計時、和場地互換功能。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}/*1~9、空格和-的字型碼*/
  4.                         ,display[8]={1,2,4,8,16,32,64,128};//動態顯示數碼管
  5. uchar score[2]={0,0},time[2]={12,0},byte[8]={0},j=0,h=0;//score數組記錄A、B兩隊份數time
  6. //數組記錄倒計時分、秒時間,byte
  7. //數組記錄八個數碼管的顯示字,j記
  8. //錄按鍵s0按下的次數,h記錄時間
  9. //中斷1的次數;
  10. bit start=0;                                                                //start為12分倒計時是否開始時的標志位;
  11. sbit alrm=P3^0;                                                        //alrm為響鈴脈沖輸出端
  12. unsigned int t=0;                                                        //響鈴脈沖個數
  13. void delay1(uchar t)                                                //延時程序,最短5ms
  14. {
  15.         unsigned char m,n,k;
  16.         for(m=t;m>0;m--)
  17.         for(n=10;n>0;n--)
  18.         for(k=250;k>0;k--);
  19. }

  20. void jishi()                                        //倒計時程序
  21. {
  22.   if(start==1)                                                //如果倒計時標志有效,則開始倒計時
  23.   {
  24.   if(time[1]==0)                                       
  25.   {
  26.   if(time[0]==0)                        //如果分秒位都為0時,開啟時間中斷0,輸出響鈴脈沖
  27.   {
  28.   start=0;
  29.   ET0=1;
  30.   TR0=1;
  31.   }
  32.   else                                        //如果秒位為0,分位不為0,則秒位跳為59,分位減1
  33.   {
  34.   time[0]--;
  35.   time[1]=59;
  36.   }
  37.   }
  38.   else time[1]--;                        //如果分秒位都不為0,則秒位減1
  39.   }
  40. }
  41. void TIMER0() interrupt 1 using 0                        //時間中斷0;用于產生響鈴脈沖
  42. {        
  43.         TH0=0xfc;                                                //1ms的計數初始狀態
  44.         TL0=0x18;
  45.         t++;
  46.         alrm=!alrm;
  47.         if(t==5000)                                                //如果輸出5000個脈沖,則停止響鈴
  48.         {
  49.         t=0;
  50.         ET0=0;
  51.         TR0=0;
  52.         }
  53. }
  54. void TIMER1() interrupt 3 using 1
  55. {
  56.         TH1=0x63;
  57.         TL1=0xc0;                        //50ms初始值;
  58.         if((h++)==20)
  59.         {                            // 一秒是否到,如果到,則進行倒計時程序
  60.         h=0;
  61.         jishi();
  62.         }
  63. }
  64. void INT_0() interrupt 0 using 2                //外部中斷0,記錄按鍵按下次數
  65. {       
  66.         ET0=0;
  67.         delay1(1);                        //延時消抖
  68.         j++;
  69.         if(j==5)                                //如果按鍵s0按下五次,則歸零
  70.         j=0;
  71.         ET0=1;
  72. }

  73. void jiaohuan()                        //分數交換,AB兩隊換場程序
  74. {
  75.         uchar temp;
  76.         temp=score[0];
  77.         score[0]=score[1];
  78.         score[1]=temp;
  79. }

  80. void INT_1() interrupt 2 using 3                //外部中斷1
  81. {       
  82.         ET1=0;                                                //延時消抖
  83.         delay1(1);
  84.         if(j==1)                                                //如果s0按下的次數為1次,則score[1]加1
  85.         {
  86.                 score[1]++;
  87.                 if(score[1]==100)                        //分數到100后歸零
  88.                 score[1]=0;
  89.         }
  90.         else if(j==2)
  91.                 {
  92.                 score[0]++;                                //如果s0按下的次數為2次,則score[0]加1
  93.                 if(score[0]==100)                        //分數到100后歸零
  94.                 score[0]=0;
  95.                 }
  96.         else if(j==3)                                //如果s0按下的次數為3次,則兩隊分數交換
  97.                 jiaohuan();
  98.         else  if(j==4)                 //如果s0按下的次數為4次        ,則打開倒計時或關閉倒計時       
  99. start=!start;
  100.         else;
  101.         ET1=1;       
  102.        
  103. }
  104. void by(void)
  105. {       
  106.                 byte[5]=11;                        //第五個數碼管一直顯示為"-"
  107.                 if(j==4)                                //如果s0按下的次數為4,則顯示倒計時
  108.                 {
  109.                          byte[3]=time[0]/10;
  110.                         byte[4]=time[0]%10;
  111.                         byte[6]=time[1]/10;
  112.                         byte[7]=time[1]%10;

  113.                 }
  114.                 else                         //否則顯示比分
  115.                 {       
  116.                         byte[3]=score[0]/10;
  117.                         byte[4]=score[0]%10;
  118.                         byte[6]=score[1]/10;
  119.                         byte[7]=score[1]%10;       
  120.                 }

  121. }
  122. void blank()
  123. {
  124.         if(j==1)                //如果s0按下1次;第7、8個數碼管閃爍跳動
  125.         {
  126.                 byte[7]=10,byte[6]=10;
  127.         }
  128.         else if(j==2)        //如果s0按下2次;第4、5個數碼管閃爍跳動
  129.         {
  130.                 byte[3]=10,byte[4]=10;
  131.         }
  132.         else if(j==3)        //如果s0按下3次;第4、5、7、8個數碼管閃爍跳動
  133.         {
  134.         byte[7]=10,byte[6]=10;
  135.         byte[4]=10,byte[3]=10;
  136.         }
  137.         else;
  138.        
  139. }
  140. void bitshow()
  141. {        if(h<=10)                //前半秒正常顯示,后半秒根據s0按下的次數相應的數碼管閃爍
  142.                 by();       
  143.         else
  144.                 blank();
  145. }
  146. void dis()
  147. {        uchar  i;
  148.            while(1)                        //        死循環顯示
  149.         {       
  150.                 bitshow();                        //求每一位的顯示
  151.                 for(i=3;i<=7;i++)
  152.                 {
  153.                 P0=~display[i];                //P0口控制掃描顯示的數碼管
  154.                 P1=tab[byte[i]];                //P1口輸出字型碼
  155.                 delay1(1);                        //延時5ms,增加顯示亮度
  156.                 }
  157.         }

  158. }       
  159. void main(void)
  160. {       
  161.         TMOD=0x11;
  162.         EA=1;
  163.         EX0=1;
  164.         EX1=1;
  165.         ET1=1;
  166.         IT1=1;
  167.         IT0=1;
  168.         TR1=1;                                        //開啟時間中斷1,兩個外部中斷
  169.         IP=5;                                        //中斷優先級控制
  170.         dis();                                        //顯示子程序
  171.        
  172. }

復制代碼

所有資料51hei提供下載:
籃球計分器設計仿真及程序.zip (99.46 KB, 下載次數: 94)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:450734 發表于 2018-12-20 14:54 | 只看該作者
咱們這個數碼管型號是cc還是ca啊,共陽極還是公陰極啊
回復

使用道具 舉報

板凳
ID:550827 發表于 2019-5-30 10:21 | 只看該作者
應該是ca呢
回復

使用道具 舉報

地板
ID:652786 發表于 2019-12-4 13:35 | 只看該作者
你實物怎么連接啊?那個NOT那個地方
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久噜噜噜精品国产亚洲综合 | 91在线色视频 | 荷兰欧美一级毛片 | 日韩激情在线 | 亚洲成人av一区二区 | 欧美1区2区 | 久久午夜视频 | 伊人网伊人网 | 欧美日韩中文字幕在线播放 | 久久69精品久久久久久久电影好 | 天堂成人国产精品一区 | 美女在线一区二区 | 亚洲 欧美 另类 综合 偷拍 | 欧美精品乱码久久久久久按摩 | 国产日韩精品在线 | 美女爽到呻吟久久久久 | 精品国产综合 | 国产成人精品a视频 | 精品久久网 | 欧美黄a | 日韩欧美在线免费观看视频 | 国产免费观看一区 | 成人欧美一区二区三区1314 | 午夜欧美一区二区三区在线播放 | 欧美中文一区 | 国产极品车模吞精高潮呻吟 | 激情亚洲 | 欧美精品一区二区三区四区五区 | 人人看人人射 | 欧美 视频 | 欧美一区二区免费 | 嫩草视频入口 | www.黄色在线观看 | av在线视 | 欧美极品一区二区 | 日韩靠逼 | 在线一级片 | 欧美国产日韩一区二区三区 | 久在线视频播放免费视频 | 九九久久在线看 | 日韩在线精品视频 |