欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
請(qǐng)問各位大佬這個(gè)籃球記分器程序有錯(cuò)嗎?為什么不能控制加分和蜂鳴器
[打印本頁(yè)]
作者:
dwadwad16
時(shí)間:
2021-12-6 19:47
標(biāo)題:
請(qǐng)問各位大佬這個(gè)籃球記分器程序有錯(cuò)嗎?為什么不能控制加分和蜂鳴器
/**************************************************************************************
籃球記分器的設(shè)計(jì)
/AT89C51單片機(jī)、數(shù)碼管若干、38譯碼器、矩陣按鍵、蜂鳴器
***************************************************************************************/
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
sbit LSA=P2^0; //38譯碼器控制
sbit LSB=P2^1;
sbit LSC=P2^2;
sbit LSD=P2^3; //蜂鳴器觸發(fā)口
sbit F1=P2^4; //倒計(jì)時(shí)數(shù)碼管控制口
sbit F2=P2^5;
sbit S1=P2^6;
sbit S2=P2^7;
u8 KeyValue; //用來(lái)存放讀取到的鍵值
u8 feng; //蜂鳴器
#define GPIO_DIG P0 //計(jì)分?jǐn)?shù)碼管輸出口
#define GPIO_KEY P1 //矩陣按鍵輸入口
#define GPIO_TIME P3 //倒計(jì)時(shí)數(shù)碼管輸出口
u8 code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9的值
unsigned char Show[8]={ 0,0,0,0,0,0,0,0,}; //數(shù)組存放向數(shù)碼管輸入的數(shù)
unsigned char TShow[4]={ 0,0,0,0,};
u16 Ascore,Bscore,Change; //分?jǐn)?shù)
u8 Period; //節(jié)數(shù)
u8 m=12,n,c; //定時(shí)器變量
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數(shù) 名 : KeyDown
* 函數(shù)功能 : 檢測(cè)有按鍵按下并讀取鍵值
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
KeyValue=20; //初始值
if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
{
delay(100);//延時(shí)10ms進(jìn)行消抖
if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤是否按下
{
//測(cè)試列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X0E): KeyValue=0;break;
case(0X0D): KeyValue=4;break;
case(0X0B): KeyValue=8;break;
case(0X07): KeyValue=12;break;
}
//測(cè)試行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0XB0): KeyValue=KeyValue+1;break;
case(0XD0): KeyValue=KeyValue+2;break;
case(0XE0): KeyValue=KeyValue+3;break;
}
while((a<500)&&(GPIO_KEY!=0xf0)) //檢測(cè)按鍵松手檢測(cè)
{
delay(1000);
a++;
}
}
}
}
/**********************************************************************
*函 數(shù) 名 : Score
*函數(shù)功能 : 加分程序,按鍵執(zhí)行程序
*************************************************************************/
void Score()
{
if(KeyValue!=20)
switch(KeyValue)//A隊(duì)的計(jì)分
{
case(0): Ascore=Ascore+1;KeyValue=20;break;
case(1): Ascore=Ascore+2;KeyValue=20;break;
case(2): Ascore=Ascore+3;KeyValue=20;break;
case(3): Ascore=Ascore-1;KeyValue=20;break;
}
switch(KeyValue)//B隊(duì)的計(jì)分
{
case(4): Bscore=Bscore+1;KeyValue=20;break;
case(5): Bscore=Bscore+2;KeyValue=20;break;
case(6): Bscore=Bscore+3;KeyValue=20;break;
case(7): Bscore=Bscore-1;KeyValue=20;break;
}
switch(KeyValue)
{
case(8): Period=Period+1;KeyValue=20;break; //每一節(jié)加一
case(9): Period=Period-1;KeyValue=20;break; //減一//
case(10): Change=Ascore;Ascore=Bscore;Bscore=Change;break; //交換場(chǎng)地
case(11): Ascore=0; Bscore=0;Period=0;KeyValue=20;break; //計(jì)分板復(fù)位
case(12): TR0 = 1; m=12; n=0; KeyValue=20;break; //定時(shí)50ms,20*50=1000msbreak;
case(13): TR0 = 1; break; //繼續(xù)比賽
case(14): feng=1;TR0 = 0; KeyValue=20;break; //暫停比賽
case(15): feng=0; KeyValue=20;break; //關(guān)閉蜂鳴器
}
}
/************************************************************
*函 數(shù) 名 : fengMQ
*函數(shù)功能 : 蜂鳴器觸發(fā)程序
**************************************************************/
void fengMQ(void)
{
if(feng==1)
{
LSD=~LSD;
}
}
/******************************************************************
*函 數(shù) 名 : Conut
*函數(shù)功能 : 分離開送給數(shù)碼管的數(shù)字
*******************************************************************/
void Conut(void)
{
Show[0]=Period%10;
Show[1]=Ascore/100;
Show[2]=Ascore/10%10;
Show[3]=Ascore%10;
Show[4]=0;
Show[5]=Bscore/100;
Show[6]=Bscore/10%10;
Show[7]=Bscore%10;
TShow[0]=m/10;
TShow[1]=m%10;
TShow[2]=n/10;
TShow[3]=n%10;
}
/*******************************************************************************
* 函 數(shù) 名 : DigDisplay
* 函數(shù)功能 : 數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描8個(gè)數(shù)碼管顯示
*******************************************************************************/
void DigDisplay()
{
u8 i,w;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,比分顯示
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//顯示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//顯示第7位
}
GPIO_DIG = DIG_CODE[Show[i]];//發(fā)送段碼
delay(10); //間隔一段時(shí)間掃描
P0=0x00;//消隱
}
for(w=0;w<4;w++) //倒計(jì)時(shí)顯示
{
switch(w) //位選,選擇點(diǎn)亮的數(shù)碼管,
{
case(0):
F1=0;F2=1;S1=1;S2=1; break;//顯示第1位
case(1):
F1=1;F2=0;S1=1;S2=1; break;//顯示第2位
case(2):
F1=1;F2=1;S1=0;S2=1; break;//顯示第3位
case(3):
F1=1;F2=1;S1=1;S2=0; break;//顯示第4位
}
GPIO_TIME = DIG_CODE[TShow[w]];
delay(10); //間隔一段時(shí)間掃描
P3=0x00; //消隱
}
}
/*******************************************************************************
* 函 數(shù) 名 : Timer0Init
* 函數(shù)功能 : 配置定時(shí)器0,定時(shí)50ms
*******************************************************************************/
void Timer0Init()
{
TMOD |= 0x01; //選擇工作方式1
TH0 = 0x3C; //設(shè)置初始值,定時(shí)50MS
TL0 = 0xB0;
EA = 1; //打開總中斷
ET0 = 1; //打開定時(shí)器0中斷
// TR0 = 1; //啟動(dòng)定時(shí)器0
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
*******************************************************************************/
void main()
{
Timer0Init();
while(1)
{
KeyDown();
Score();
Conut(); //分離出數(shù)
fengMQ(); //*蜂鳴器
DigDisplay(); //數(shù)碼管顯示函數(shù)
}
}
void Timer0() interrupt 1 //中斷程序
{
static u16 q; //定義變量q,1s=50ms*20
TH0 = 0x3C; //設(shè)置初始值,定時(shí)50MS
TL0 = 0xB0;
q++;
if(q==20) //計(jì)時(shí)20次時(shí)為1秒
{
q=0; //變量q置零
if(n==0) //當(dāng)?shù)褂?jì)時(shí)秒針為0時(shí),分針減一,秒針為59
{
n=60;
m=m-1;
}
n=n-1; //每秒減一
}
if(m==0&&n==0) //一節(jié)結(jié)束定時(shí)器停止,時(shí)間重置12:00;
{
TR0 =0;
}
}
復(fù)制代碼
正在重新握手 ... 成功 [0.594"]
當(dāng)前的波特率: 115200
正在擦除目標(biāo)區(qū)域 ... 完成 ! [0.313"]
芯片出廠序列號(hào) : F002C4B208E7AE
正在下載用戶代碼 ... 完成 ! [0.875"]
正在設(shè)置硬件選項(xiàng) ... 完成 ! [0.015"]
更新后的硬件選項(xiàng)為:
. 當(dāng)前的時(shí)鐘頻率: 11.088MHz
. 系統(tǒng)頻率為12T(單倍速)模式
. 振蕩器的放大增益不降低
. 當(dāng)看門狗啟動(dòng)后,任何復(fù)位都可停止看門狗
. MCU內(nèi)部的擴(kuò)展RAM可用
. ALE腳的功能選擇仍然為ALE功能腳
. P1.0和P1.1與下次下載無(wú)關(guān)
. 下次下載用戶程序時(shí),不擦除用戶EEPROM區(qū)
單片機(jī)型號(hào): STC89C52RC/LE52RC
固件版本號(hào): 6.6.4C
操作成功 !
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1