可以完美仿真 含源碼以及原理圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (273.37 KB, 下載次數(shù): 69)
下載附件
2021-12-20 19:41 上傳
用KEILC51、Proteus仿真設(shè)計(jì)籃球記分牌
AT89C51單片機(jī)作為主控制器;
用數(shù)碼管高兩位和低兩位分別顯示甲隊(duì)、乙隊(duì)比分,中間用4位顯示“-**-”24秒倒計(jì)時(shí);
具有加1減1的計(jì)分功能;
具有按鍵控制的啟動(dòng)24秒倒計(jì)時(shí),具有按鍵控制的暫停計(jì)時(shí)功能;
設(shè)計(jì)制作任務(wù)
擬定總體設(shè)計(jì)制作方案;
設(shè)計(jì)硬件仿真電路;
繪制軟件設(shè)計(jì)流程圖及編寫軟件控制程序;
仿真調(diào)試;
完成項(xiàng)目文檔;
總體設(shè)計(jì)思路
用AT89C51單片機(jī)作控制,系統(tǒng)時(shí)鐘為12MHz時(shí)鐘,AT98C51內(nèi)的一個(gè)定時(shí)器/計(jì)數(shù)器作為定時(shí)器,50m中斷一次,中斷20次記1s實(shí)現(xiàn)計(jì)時(shí)功能。5只按鍵構(gòu)成獨(dú)立鍵盤實(shí)現(xiàn)兩隊(duì)記分加減和倒計(jì)時(shí)啟動(dòng)控制,8位數(shù)碼管顯示倒計(jì)時(shí)時(shí)間和隊(duì)員比分。

- C語(yǔ)言主控程序設(shè)計(jì)(程序設(shè)計(jì)思路及流程圖)
使用單片機(jī)內(nèi)部定時(shí)計(jì)數(shù)器T0工作在定時(shí)狀態(tài),T0每50ms中斷一次,中斷20次為1s,秒數(shù)初值24s,1s時(shí)間到秒數(shù)減1實(shí)現(xiàn)24s倒計(jì)時(shí)功能。 

- 調(diào)試結(jié)果說(shuō)明(若還存在問題,則說(shuō)明清楚還有哪些存在的問題)
答:再打數(shù)字編碼的過程中未將橫桿的編碼打上,導(dǎo)致,沒有橫桿顯示,但將橫桿打上后仿真結(jié)果成功。
單片機(jī)源程序如下:
- #include<reg52.h>
- led_seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
- unsigned char dat_display[8];
- unsigned char bit_array[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned char count;
- unsigned char score_j,score_y;
- unsigned char sec_24=24;
- unsigned char sec;
- bit flag=0;
- void delay(unsigned int time)
- {
- while(time--);
- }
- void T0_init(void)
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=0;
- }
- void int_init(void)
- {
- EA=1;
- ET0=1;
- }
- void dat_change(void)
- {
- dat_display[3]=sec_24/10;
- dat_display[4]=sec_24%10;
- dat_display[2]=10;
- dat_display[5]=10;
- dat_display[0]=score_j/10;
- dat_display[1]=score_j%10;
- dat_display[6]=score_y/10;
- dat_display[7]=score_y%10;
- }
- void display_1bit(unsigned char seg_code,unsigned char bit_code)
- {
- P2=0xff;
- P0=seg_code;
- P2=bit_code;
- delay(200);
- }
- void display()
- {
- unsigned char i;
- for(i=0;i<8;i++)
- display_1bit(led_seg_code[dat_display[i]],bit_array[i]);
- }
- void count_down()
- {
- if(count==20)
- {
- count=0;
- if(sec_24>0)
- sec_24--;
- else
- sec_24=0;
- }
- }
- unsigned char key_scane(void)
- {
- unsigned char key_val;
- P1=0xff;
- key_val=P1;
- if(key_val!=0xff)
- {
- P1=0xff;
- key_val=P1;
- delay(10);
- if(key_val!=0xff)
- key_val=~P1;
- while(P1!=0xff);
- return key_val;
- }
- }
- void key1(void)
- {
- score_j++;
- }
- void key2(void)
- {
- if(score_j>0)
- score_j--;
- else
- score_j=0;
- }
- void key3(void)
- {
- score_y++;
- }
- void key4(void)
- {
- if(score_y>0)
- score_y--;
- else
- score_y=0;
- }
- void key5(void)
- {
- flag=~flag;
- if(flag==1)
- TR0=1;
- else
- TR0=0;
- }
- void key_change(unsigned char val)
- {
- if(val==0x01)
- {
- key1();
- }
- if(val==0x02)
- {
- key2();
- }
- if(val==0x04)
- {
- key3();
- }
- if(val==0x08)
- {
- key4();
- }
- if(val==0x10)
- {
- key5();
- }
- }
- void main()
- {
- T0_init();
- int_init();
- while(1)
- {
- key_change(key_scane());
- dat_change();
- count_down();
- dat_change();
- display();
- }
- }
- void time_t0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- }
復(fù)制代碼
51hei.png (9.49 KB, 下載次數(shù): 76)
下載附件
2021-12-20 19:29 上傳
所有資料51hei附件下載:
籃球積分牌.7z
(596.5 KB, 下載次數(shù): 79)
2021-12-20 19:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|