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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機AT89C51籃球計分器程序與Proteus仿真設計

[復制鏈接]
跳轉到指定樓層
樓主
可以完美仿真  含源碼以及原理圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

用KEILC51、Proteus仿真設計籃球記分牌
AT89C51單片機作為主控制器;
用數碼管高兩位和低兩位分別顯示甲隊、乙隊比分,中間用4位顯示“-**-”24秒倒計時;
具有加1減1的計分功能;
具有按鍵控制的啟動24秒倒計時,具有按鍵控制的暫停計時功能;
設計制作任務
擬定總體設計制作方案;
設計硬件仿真電路;
繪制軟件設計流程圖及編寫軟件控制程序;
仿真調試;
完成項目文檔;
總體設計思路
用AT89C51單片機作控制,系統時鐘為12MHz時鐘,AT98C51內的一個定時器/計數器作為定時器,50m中斷一次,中斷20次記1s實現計時功能。5只按鍵構成獨立鍵盤實現兩隊記分加減和倒計時啟動控制,8位數碼管顯示倒計時時間和隊員比分。
  • 硬件電路設計


  • C語言主控程序設計(程序設計思路及流程圖)

使用單片機內部定時計數器T0工作在定時狀態,T0每50ms中斷一次,中斷20次為1s,秒數初值24s,1s時間到秒數減1實現24s倒計時功能。


  • 仿真效果圖


  • 調試結果說明(若還存在問題,則說明清楚還有哪些存在的問題)

答:再打數字編碼的過程中未將橫桿的編碼打上,導致,沒有橫桿顯示,但將橫桿打上后仿真結果成功。


單片機源程序如下:


  1. #include<reg52.h>
  2. led_seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
  3. unsigned char dat_display[8];
  4. unsigned char bit_array[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  5. unsigned char count;
  6. unsigned char score_j,score_y;
  7. unsigned char sec_24=24;
  8. unsigned char sec;
  9. bit flag=0;
  10. void delay(unsigned int time)
  11. {
  12.         while(time--);        
  13. }
  14. void T0_init(void)
  15. {
  16.   TMOD=0x01;
  17.   TH0=(65536-50000)/256;
  18.   TL0=(65536-50000)%256;
  19.   TR0=0;
  20. }
  21. void int_init(void)
  22. {
  23.   EA=1;
  24.   ET0=1;
  25. }
  26. void dat_change(void)
  27. {
  28.         dat_display[3]=sec_24/10;
  29.         dat_display[4]=sec_24%10;
  30.         dat_display[2]=10;
  31.         dat_display[5]=10;
  32.         dat_display[0]=score_j/10;
  33.         dat_display[1]=score_j%10;
  34.         dat_display[6]=score_y/10;
  35.         dat_display[7]=score_y%10;
  36. }
  37. void display_1bit(unsigned char seg_code,unsigned char bit_code)
  38. {
  39.         P2=0xff;
  40.         P0=seg_code;
  41.         P2=bit_code;
  42.         delay(200);
  43. }
  44. void display()
  45. {
  46.         unsigned char i;
  47.         for(i=0;i<8;i++)
  48.         display_1bit(led_seg_code[dat_display[i]],bit_array[i]);
  49. }
  50. void count_down()
  51. {
  52.         if(count==20)
  53.         {
  54.                 count=0;
  55.                 if(sec_24>0)
  56.                         sec_24--;
  57.                 else
  58.                         sec_24=0;
  59.         }
  60. }
  61. unsigned char key_scane(void)
  62. {
  63.         unsigned char key_val;
  64.         P1=0xff;
  65.         key_val=P1;
  66.         if(key_val!=0xff)
  67.         {
  68.                 P1=0xff;
  69.                 key_val=P1;
  70.                 delay(10);
  71.                 if(key_val!=0xff)
  72.                         key_val=~P1;
  73.                 while(P1!=0xff);
  74.                 return key_val;
  75.         }
  76. }
  77. void key1(void)
  78. {
  79.         score_j++;
  80. }
  81. void key2(void)
  82. {
  83.         if(score_j>0)
  84.                 score_j--;
  85.         else
  86.                 score_j=0;
  87. }
  88. void key3(void)
  89. {
  90. score_y++;
  91. }
  92. void key4(void)
  93. {
  94.         if(score_y>0)
  95.                 score_y--;
  96.         else
  97.                 score_y=0;
  98. }
  99. void key5(void)
  100. {
  101.         flag=~flag;
  102.         if(flag==1)
  103.         TR0=1;
  104.         else
  105.                 TR0=0;
  106. }
  107. void key_change(unsigned char val)
  108. {
  109.         if(val==0x01)
  110.         {
  111.                 key1();
  112.         }
  113.         if(val==0x02)
  114.         {
  115.                 key2();
  116.         }
  117.         if(val==0x04)
  118.         {
  119.                 key3();
  120.         }
  121.         if(val==0x08)
  122.         {
  123.                 key4();
  124.         }
  125.         if(val==0x10)
  126.         {
  127.                 key5();
  128.         }
  129. }
  130. void main()
  131. {
  132.         T0_init();
  133.         int_init();
  134.         while(1)
  135.         {
  136.                 key_change(key_scane());
  137.                 dat_change();
  138.                 count_down();
  139.                 dat_change();
  140.                 display();
  141.         }
  142. }
  143. void time_t0() interrupt 1
  144. {
  145.         TH0=(65536-50000)/256;
  146.   TL0=(65536-50000)%256;
  147.         count++;
  148. }
復制代碼

所有資料51hei附件下載:

籃球積分牌.7z (596.5 KB, 下載次數: 79)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1086350 發表于 2023-6-28 15:16 | 只看該作者
請問您說的橫杠是什么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久草免费在线视频 | 高清一区二区三区 | 国产色在线 | 国产高清在线 | 久久精品视频亚洲 | 国产精品二区三区在线观看 | 欧美精品久久久久久久久久 | 亚洲视频精品 | 欧美一级二级视频 | 欧美精品日韩精品国产精品 | 国产精品99久久久久久宅男 | 天天色天天 | 国产激情在线看 | 亚洲欧洲一区二区 | 亚洲在线观看视频 | 国产精品久久久久久久久免费软件 | 亚洲免费成人av | 成人伊人| 国产日韩欧美一区二区在线播放 | 91精品国产一区二区三区香蕉 | 北条麻妃一区二区三区在线观看 | 国产一区亚洲二区三区 | 欧美aaaaa | 欧美a在线| 欧美电影免费观看高清 | 91国产在线视频在线 | 六月婷婷久久 | 精品久久久久久久 | 毛片在线免费播放 | 亚洲欧美在线观看 | 国产在线网址 | 熟女毛片 | h视频在线看 | 91免费在线播放 | 欧美一区二区免费视频 | 蜜桃特黄a∨片免费观看 | 国产亚洲一区精品 | 国产一区二区在线免费观看 | 日韩午夜电影在线观看 | 欧美日一区 | 在线欧美 |