這是我以前做的51單片機籃球計分器設計,
花了一個星期時間,
附件里面包括源代碼;PCB原理圖,
和proteus的仿真文件以及課程設計的相關文檔,
都是自己原創的,大家多多指教
制作出來的籃球計分器實物圖如下:
電路原理圖如下:
籃球計分器仿真原理圖如下
Altium Designer畫的籃球計分器原理圖和PCB圖如下:
單片機籃球計分器程序源碼:
#include typedef unsigned char uchar; typedef unsigned int uint; sbit K1=P3^2;//比賽倒計時開始/暫停 sbit K2=P3^3;//24s倒計時重新開始 sbit P20=P2^0;//乙隊+1按鍵 sbit P21=P2^1;//乙隊+2按鍵 sbit P22=P2^2;//甲隊+1按鍵 sbit P23=P2^3;//甲隊+2按鍵 sbit P24=P2^4;//甲隊+3按鍵 sbit P25=P2^5;//乙隊+3按鍵 sbit P26=P2^6;//預留按鍵 sbit P27=P2^7; sbit beep=P3^6;//蜂鳴器接口 sbit RS=P1^0; sbit RW=P1^1; sbit E=P1^2; char second,minute,num,time,aa; uchar dd,bb,cc; uchar code table1[]={"H.T 000:000 T.H "}; uchar code table2[]={"12:00 SEC-1 24"}; //延時子函數 void delay(uint z) { uint x; uchar y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //LCD1602液晶寫指令子函數 void write_com(uchar com) { RW=0; RS=0; P0=com; delay(5); E=1; delay(5); E=0; } //LCD1602液晶寫數據子函數 void write_date(uchar date) { RW=0; RS=1; P0=date; delay(5); E=1; delay(5); E=0; } //LCD1602液晶初始化子函數 void LCD1602_init() { uchar i; bb=0; //H.T分數初始化 cc=0; //T.H分數初始化 time=0; TMOD=0x10; //定時器1初始化 TL1=0x00; TH1=0x4c; EA=1; //開總中斷 ET1=1; //開定時器1 TR1=0; //開中斷0 EX1=1; //開中斷1 IT0=1; //中斷0為邊沿觸發 IT1=1; //中斷1為邊沿觸發 E=0; beep=0; second=0; minute=12; num=1; aa=24; write_com(0x38); //LCD設置初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); //LCD顯示初始化 for(i=0;i<16;i++) { write_date(table1[i]); } write_com(0x80+0x40); for(i=0;i<16;i++) { write_date(table2[i]); } } //分數更新子函數 void point_lcd(uchar add,uchar dat) { write_com(0x80+add); write_date(0x30+dat/100); write_date(0x30+(dat%100)/10); write_date(0x30+dat%10); write_com(0x80+add); } //按鍵掃描子函數 void keyscan() { P2=0xf0; if((P2&0xf0)!=0xf0) { delay(20); } if((P2&0xf0)!=0xf0) { P2=0xf7; if(P24==0) { while(P24==0); //P24按下H.T分數加1 bb++; point_lcd(0x04,bb); if(P24==0) { while(P24==0); delay(20); } } else if(P25==0) //P25按下H.T分數加2 { while(P25==0); bb=bb+2; point_lcd(0x04,bb); if(P25==0) { while(P25==0); delay(20); } } else if(P26==0) //P26按下H.T分數加3 { while(P26==0); bb=bb+3; point_lcd(0x04,bb); if(P26==0) { while(P26==0); delay(20); } else if(P27==0) //P27按下T.H分數加一 { while(P27==0); cc++; point_lcd(0x08,cc); if(P27==0) while(P27==0); delay(20); } } P2=0xfb; if(P24==0) //P24按下T.H分數加2 { while(P24==0); cc=cc+2; point_lcd(0x08,cc); if(P24==0) { while(P24==0); delay(20); } } else if(P25==0) //P25按下T.H分數加3
上一篇:基于51單片機的智能晾衣架設計
下一篇:單片機太陽能自動追光系統程序+電路+仿真
推薦閱讀最新更新時間:2025-04-23 21:07






設計資源 培訓 開發板 精華推薦
- 使用 ROHM Semiconductor 的 BD4829 的參考設計
- STM32F411 system1
- LED 照明用光電耦合器
- EVAL-RS485HDEBZ,用于 ADM483 半雙工 RS-485 收發器的評估板,采用 8 引腳 SOIC 封裝
- 用于儀表的 8/10/12/14 位、1 通道 DAC
- 耐用的5V、8位MC9S08PT60塔式系統模塊
- FRDM-34931S-EVB: 面向MC34931的Freedom擴展板 - 有刷直流電機驅動器, H橋, 20kHz
- AL8805EV1,基于 AL8805 LED 驅動器的評估板
- NCP45524受控負載電源開關的典型應用
- LT3763HFE 3.3A、六節 (36V) SLA 電池充電器的典型應用電路