欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關(guān)于51單片機的電子秒表按鍵失效的問題求大家分析程序
[打印本頁]
作者:
Glimmer1
時間:
2019-1-7 17:10
標題:
關(guān)于51單片機的電子秒表按鍵失效的問題求大家分析程序
求助,本萌新想設(shè)計一個在普通開始,暫停,清零三個功能鍵上擴展存儲和讀取功能的電子秒表,無奈遇到了一點問題,讀取第一個數(shù)據(jù)之后無法讀下一個數(shù)據(jù),并且清零,開始按鍵都開始失效,只能重新啟動。
想了半天都沒有想出問題出在哪,希望大佬們能幫忙給點意見,謝謝!
下面是我的C語言程序:
#include <reg52.h> //包含頭文件
char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //數(shù)字對應(yīng)顯示碼表
char code tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//小數(shù)點
char code index[]={0xef,0xdf,0xbf,0x7f}; //每位數(shù)字對應(yīng)數(shù)碼管顯示位置
unsigned char num[4]; //定義數(shù)組用于顯示
int sec_fei=0; //飛秒變量
int debate[5];
int datainfor;
int readinfor;
sbit key1=P3^0; //開始
sbit key2=P3^1; //停止
sbit key3=P3^2; //清零
sbit store=P3^3;
sbit read=P3^4;
sbit restart=P3^5;
void delay(unsigned int z) //延時函數(shù),大約延時1ms,不精確
{
unsigned int i,j;
for(i=0;i<z;i++)
for(j=0;j<121;j++);
}
void debateread()
{ switch(readinfor)
{
case 1:sec_fei=debate[0];break;
case 2:sec_fei=debate[1];break;
case 3:sec_fei=debate[2];break;
case 4:sec_fei=debate[3];break;
case 5:sec_fei=debate[4];break;
}
}
void debatestore()
{ switch(datainfor)
{
case 1:debate[0]=sec_fei;break;
case 2:debate[1]=sec_fei;break;
case 3:debate[2]=sec_fei;break;
case 4:debate[3]=sec_fei;break;
case 5:debate[4]=sec_fei;break;
}
}
void init() //定時器初始化函數(shù)
{ readinfor=0;
sec_fei=0;
datainfor=0;
TMOD=0x01; //定時器0
TH0=0xd8; //初值高8位
TL0=0xf0; //定時10ms
ET0=1; //打開中斷允許開關(guān)
TR0=0; //關(guān)閉定時器
EA=1; //打開中斷總開關(guān)
}
void display() //顯示函數(shù)
{
unsigned char i; //定義循環(huán)變量,循環(huán)4次,掃描4位數(shù)碼管
num[0]=sec_fei%10; //飛秒取余10,就是除以10之后的余數(shù)
num[1]=sec_fei%100/10; //飛秒取余100再除以10
num[2]=sec_fei%1000/100;
num[3]=sec_fei/1000;
for(i=0;i<4;i++) //循環(huán)4次掃描數(shù)碼管
{
P2=index[i]; //位選
if(i==2) //如果是第二位
P0=tab1[num[i]]; //顯示數(shù)字加小數(shù)點
else //不是第二位
P0=tab[num[i]]; //正常顯示數(shù)字
delay(1); //修改此參數(shù)可修改刷新頻率
P0=0x00; //關(guān)閉顯示
}
}
void main() //主函數(shù)
{
init(); //調(diào)用定時器初始化
while(1) //進入循環(huán)
{
display(); //刷屏顯示數(shù)碼管
if(restart==0)
{
init();
}
if(key1==0) //開始按鈕
{
TR0=1;
} //打開定時器開始定時
if(key2==0) //停止按鈕
{
TR0=0;
} //關(guān)閉定時器
if(key3==0) //復(fù)位按鈕,需要停止定時時有效
{
sec_fei=0;
} //秒清零
if(store==0)
{
delay(1);
while(store==0)
{
datainfor ++;
debatestore();
if(datainfor==5)
{
datainfor=0;
}
while(store==0)
{
display();
}
}
}
if(TR0==0&&read==0)
{
delay(1);
while(read==0)
{
readinfor++;
debateread();
if(readinfor==5)
{
readinfor=0;
}
while(read==0)
{
display() ;
}
}
}
}
}
void T0_time() interrupt 1
{
TH0=0xd8; //定時器定時時間為10ms
TL0=0xf0;
sec_fei++; //飛秒加1
if(sec_fei>=10000) //加10000次
sec_fei=0; //清零
}
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1