/******************************************************
*ç¨åºï¼å´é´é¹°æ°åçµåéç设计
** è¿ä¸è®²ç主è¦å
容: æ°åçµåéç设计åçåç¨åº
** åè½æè¿°:
** è¾ãå
¥:
** å
容ï¼
** è¾ãåº:
**
** å
¨å±åé:
** è°ç¨æ¨¡å:
**
** ä½ãè
: å´é´é¹°
** æ¥ãæ: 14.02.17å¤æ³¨ï¼æä»ä¹é误çå°æ¹ï¼æ¬¢è¿å大ç§åææ£O(â©_â©)O~
*******************************************************/
//åéå®ä¹å头æ件çè°ç¨
//å®ä¹å¤´æ件åå个è¾å
¥ç®¡è以ååé声æ
#include<reg52.h>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char
/*å®ä¹åååä½å£*/
#define DIGPORT XBYTE [0X8000]
#define WORDPORT XBYTE [0X4000]/*å®ä¹P1å£å管è*/
sbit K0 = P1^0;
sbit K1 = P1^1;
sbit K2 = P1^2;
sbit BEEP = P1^3;
sbit L0 = P1^4;
sbit L1 = P1^5
sbit L2 = P1^6;
sbit L3 = P1^7;uchar data BUFFER[2] = {0,0}; //æ¾ç¤ºçç¼åæ°ç»ï¼ä¾æ¬¡ä¸ºä½ä½ãé«ä½
uchar data CLOCK[4] = {0,0,0,0};
uchar data SECOND[2] = {0,0};/*å®ä¹è¿è¡ç¶æ*/
uchar data STATE = 0;
/*STATE = 0;ç§è¡¨*/
/*STATE = 4ï¼æè
7ï¼æ¶éè¿è¡*/
/* STATE = 6,æ¶éæ¶è°æ´ */bit bdata SND = 0; /* ç§è¡¨STARTï¼å¼å§ï¼ */
bit bdata RST = 0; /*ç§è¡¨RESETï¼å¤ä½ï¼*//*æ°ç 管æ¾ç¤ºç¼ç â0â-â9â,"A","-"*/
uchar code TABLE[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X40};/******************************************************
*ç¨åºï¼ä¸»ç¨åº
** åè½æè¿°: 主干ç¨åº
** è¾ãå
¥:
** å
容ï¼
** è¾ãåº:
**
** å
¨å±åé:
** è°ç¨æ¨¡å:
**
** ä½ãè
: å´é´é¹°
** æ¥ãæ: 14.02.17å¤æ³¨ï¼æä»ä¹é误çå°æ¹ï¼æ¬¢è¿å大ç§åææ£O(â©_â©)O~
*******************************************************/
void main()
{
uchar stabak;
P1 = 0X0F;
EA = 1;
IT1 = 1;
ET0 = 1;
TMOD = 0X61;
TH0 = -5000/256;
TL0 = -5000%256;
TH1 = 0XFF;
TL1 = 0XFF;
T2CON = 0;
TH2 = -5000/256;
TL2 = -5000%256; K0 = 1;
K1 = 1;
K2 = 1;
STATE = P1&0X07;
stabak = STATE; for(;;)
{
switch(STATE)
{
case 0ï¼
{
EX1 = 0;
ET1 = 1;
ET2 = 1;
TR1 = 1;
SND = 1;
L1 = 1;
L0 = 0;
L2 = 0;
SECOND[0] = 0;
SECOND[1] = 0;
}break; case 5:
{
IE1 = 0;
EX1 = 1;
ET1 = 0;
ET2 = 0;
TR0 = 0;
L0 = 1;
L1 = 0;
L2 = 0;
}break; case 6:
{
IE1 = 0;
EX1 = 1;
ET1 = 0;
ET2 = 1;
TR0 = 0;
}break; default:
{
EX1 = 0;
ET1 = 0;
ET2 = 1;
L1 = 0;
L2 = 0;
} }
while(STATE == stabak)
{
switch(STATE)
{
case 0:
{
BUFFER[0] = SECOND[0];
BUFFER[1] = SECOND[1];
}break;
case 5:
{
BUFFER[0] = CLOCK[2];
BUFFER[1] = 101;/*A-*/
}break;
case 6:
{
BUFFER[0] = 110;/*A-*/
BUFFER[1] = CLOCK[3];
}break;
default:
{
BUFFER[0] = CLOCK[2];
BUFFER[1] = CLOCK[3];
}break;
default:
{
BUFFER[0] = CLOCK[2];
BUFFER[1] = CLOCK[3];
}
}
//æ¾ç¤ºå½æ°
display();
K0 = 1;
K1 = 1;
K2 = 1;
STATE = P1&0X07;
}
stabak = STATE;
}
}/******************************************************
*ç¨åºï¼åå½æ°ï¼1ï¼ï¼timer0(void)
** åè½æè¿°: ç¨å®æ¶å¨0å®ç°24å°æ¶çæ¶éæ¾ç¤º
** è¾ãå
¥:
** å
容ï¼
** è¾ãåº:
**
** å
¨å±åé:
** è°ç¨æ¨¡å:
**
** ä½ãè
: å´é´é¹°
** æ¥ãæ: 14.02.17å¤æ³¨ï¼æä»ä¹é误çå°æ¹ï¼æ¬¢è¿å大ç§åææ£O(â©_â©)O~
*******************************************************/
void timer0(void) interrupt 1 using 1
{
/*éç½®å®æ¶å¨åå¼*/
TH0 = -5000/256;
TL0 = -5000%256;
/*å®æ¶å¨å¤ç*/
CLOCK[0] = CLOCK[0]+1ï¼
if((CLOCK[0] == 50) && (STATE >= 4))
{
L0 = !L0;
}if(CLOCK[0] == 100)
{
if(STATE >= 4) L0 = !L0;
CLOCK[0] = 0;
CLOCK[1] = CLOCK[1] + 1;
if(CLOCK[1] == 60)
{
CLOCK[1] = 0;
CLOCK[2] = CLOCK[2] + 1;
if(CLOCK[2] == 60)
{
CLOCK[2] == 0;
CLOCK[3] == CLOCK[3] + 1;
if(CLOCK[3] == 24)
{
CLOCK[3] = 0;
}
}
}
}
}/******************************************************
*ç¨åºï¼åå½æ°ï¼2ï¼ï¼intsvr1(void)
** åè½æè¿°: 对å¤ä¸æ1çæé®èå²è¿è¡å¤æå计æ°ï¼å¹¶å®æ对åºçæ¶é´è°æ´åè½ã
** è¾ãå
¥:
** å
容ï¼
** è¾ãåº:
**
** å
¨å±åé:
** è°ç¨æ¨¡å:
**
** ä½ãè
: å´é´é¹°
** æ¥ãæ: 14.02.17å¤æ³¨ï¼æä»ä¹é误çå°æ¹ï¼æ¬¢è¿å大ç§åææ£O(â©_â©)O~
*******************************************************/
void intsvr1(void) interrupt 2 using 2
{
if(STATE == 5)
{
CLOCK[2] == CLOCK[2] + 1;
if(CLOCK[2] == 60) CLOCK[2] == 0;
}
if(STATE == 6)
{
CLOCK[3] == CLOCK[3] + 1;
if(CLOCK[3] == 24) CLOCK[3] = 0;
}
}/******************************************************
*ç¨åºï¼åå½æ°ï¼3ï¼:display(void)
** åè½æè¿°: ç¨å¨ææ¾ç¤ºçæ¹æ³ï¼å°å½åçæ¶é´æç§è¡¨å
容éè¿æ°ç 管æ¾ç¤ºã
** è¾ãå
¥:
** å
容ï¼
** è¾ãåº:
**
** å
¨å±åé:
** è°ç¨æ¨¡å:
**
** ä½ãè
: å´é´é¹°
** æ¥ãæ: 14.02.17å¤æ³¨ï¼æä»ä¹é误çå°æ¹ï¼æ¬¢è¿å大ç§åææ£O(â©_â©)O~
*******************************************************/
void diplay(void)
{
uchar i;
uchar delay;
uchar disp;
uchar digit;
digit = 0x08;
for(i = 0;i < 2; i++)
{
if(BUFFET> 100)
{
disp = BUFFER%10 + 10ï¼
}
else disp = BUFFER%10ï¼
DIGPORT = digit;
WORDPORT = TABLE[disp];
for(delay = 0;delay <= 200;delay ++);
digit = digit >> 1;
disp = BUFFER/10;
DIGPORT = digit;
WORDPORT = TABLE[disp];
for(delay = 0;delay <= 200;delay ++);
digit = digit >> 1;
}
}
温馨提示:答案为网友推荐,仅供参考