標(biāo)題:
郭天祥單片機(jī)學(xué)習(xí)版,怎么做延時(shí)退出。
[打印本頁(yè)]
作者:
無(wú)敵是多么寂寞
時(shí)間:
2017-12-7 14:36
標(biāo)題:
郭天祥單片機(jī)學(xué)習(xí)版,怎么做延時(shí)退出。
k1是調(diào)試小時(shí)位。按下k1后延時(shí)10s內(nèi)沒(méi)按下k1的話。則這次調(diào)試不合格。時(shí)間回到調(diào)試前。
具體該怎么寫(xiě)。
作者:
無(wú)敵是多么寂寞
時(shí)間:
2017-12-7 14:37
#include<reg52.h>
//#include<intrin s.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;//定義鎖存器鎖存端
sbit wela=P2^7;//定義鎖存器鎖存端
bit bSystemRunFlag;//定義一個(gè)量
bit bKeyLongPrFlag;
bit bIconFlashFlag;
bit bFlashHourFlag;
bit bFlashMinTFlag;
uchar usec,msec,sec,min,hour;//表示定義了 微秒,毫秒,秒,分,小時(shí)。
uchar displayBuf[6];//顯示寄存器
uchar keyDecTime;
uchar keyDataBuf;
uchar keypressBuf;
uchar keyLongTime;
uint tt;//定義。
uchar code table[]={0x3f,
0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,};//表示數(shù)碼管0~f.
uchar code tablecom[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf} ;//6個(gè)數(shù)碼管全亮
void keyscan();
void keydo();
void main()
{
tt=0;
TMOD=0x01;//設(shè)置計(jì)時(shí)器工作方式1
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;//開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器0中斷
TR0=1;//啟動(dòng)定時(shí)
wela=1;//11101010
P0=0xff;//表示燈全亮
wela=1;
dula=0;
P0=0x00;
dula=1;
dula=0;
while(1)
{
if(usec==250)//表示0.5s。
{
usec=0;
bIconFlashFlag =~ bIconFlashFlag;
if(++msec>=2)//如果大于等于2。就進(jìn)去。
{
msec=0;//毫秒歸零;
if(++sec>=60)//如果秒大于等于60.就進(jìn)去。
{
sec=0;//先歸零
if(++min>=60)//如果分大于等于60.就進(jìn)去。
{ min=0;//先歸零
if(++hour>=24)//如果小時(shí)大于等于24,就進(jìn)去。
hour=0;//小時(shí)歸零
}
}
}
}
if(bSystemRunFlag==1)
{
bSystemRunFlag=0;
keydo();
keyscan();
tt++;
if(tt>=6)
tt=0;
displayBuf[0]=hour/10;//小時(shí)取十位的數(shù)值
displayBuf[1]=hour%10;//小時(shí)取個(gè)位的數(shù)值
displayBuf[2]=min/10;//分鐘取十位的數(shù)值
displayBuf[3]=min%10;//分鐘取個(gè)位的數(shù)值
displayBuf[4]=sec/10;//秒取十位的數(shù)值
displayBuf[5]=sec%10;//秒取個(gè)位的數(shù)值
P0=0xff;//11111111
wela=1;//11101010
wela=0;
P0=table[displayBuf[tt]];
if(tt==1||tt==3)//如果在1位或3位
{
if(msec==1)//每過(guò)0.5秒
P0|=0x80;//則0x80這燈亮。
}
if(bFlashHourFlag&&!bIconFlashFlag)
{
if(tt<2)
P0 = 0;
}
if(bFlashMinTFlag&&!bIconFlashFlag)
{
if(tt==2||tt==3)
P0 = 0;
}
dula=1;
dula=0;
P0=tablecom[tt];
wela=1;
wela=1;
wela=1;
wela=0;
}
}
}
void exter0()interrupt 1
{
TH0=(65536-1872)/256;//定時(shí)器輸入20毫秒。
TL0=(65536-1872)%256;//求余
usec++;bSystemRunFlag=1;//毫秒加加,flag=1;
}
void keydo()
{
P3 = 0xf0;
if((P3&0xf0)==keyDataBuf)
{
if(keyDecTime<200)keyDecTime++;
if(keyDecTime==40||keyDecTime==100)
{
if(keyDecTime==100)bKeyLongPrFlag=1;
keyDecTime=50;
keypressBuf=keyDataBuf;
}
}
else
{
keyDataBuf=P3&0xf0;
keypressBuf=0;
keyDecTime=0;
bKeyLongPrFlag=0;
}
}
void keyscan()
{
if(keypressBuf!=0xf0)
{
if(keypressBuf==0xe0&&!bKeyLongPrFlag)call;
{
bFlashMinTFlag=0;
bFlashHourFlag =~bFlashHourFlag;
if(bFlashHourFlag)
{
if(msec==20)
RET;
}
}
if(keypressBuf==0xd0&&!bKeyLongPrFlag)
{
bFlashHourFlag=0;
bFlashMinTFlag =~bFlashMinTFlag;
}
if(keypressBuf==0xb0)
{
if(bFlashHourFlag)
{
hour++;
if(hour>23)
hour=0;
}
if(bFlashMinTFlag)
{
min++;
if(min>59)
min=0;
}
}
else if(keypressBuf==0x70)
{
if( bFlashHourFlag)
{
hour--;
if(hour>=24)
hour=23;
}
if(bFlashMinTFlag)
{
min--;
if(min>=60)
min=59;
}
}
}
keypressBuf=0;
}
這是寫(xiě)的程序。在這上面加延時(shí)退出。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1