è¿ä¸ªå¯ä»¥åï¼è¯å®è¦æ¹ä¸
/*****************************************************/
//å®éªå
ãæ°ç 管çµåé
//by é¿æ±
[email protected] 转载请注ææ¥æº
//éçµåï¼æ°ç 管çµåéä¸ç´å¤äºç§è¡¨ç¶æï¼è鸣5ç§åä¸æ¬¡ï¼è¦æ±ä½¿ç¨T0,T1ä¸æ
//ä¸ä¸è¬çåºç¨ä¸åï¼æ¬å®éªå¨æ°ç 管åé¢æªä½¿ç¨è¯ç å¨
//æè·¯:å®æ¶å¨ä¸æç使ç¨:
//1ãåå§å
//注æï¼P0å£çP0.4æ¥è鸣
/*****************************************************/
/*****************************************************/
//æ°ç 管æ°æ® p2å£ï¼é«çµå¹³ææ
//æ°ç 管æ§å¶p0.0~P0.3,ä½çµå¹³ææ
//P0.4è¾åº,æ¥è鸣å¨
//P1è¾å
¥ï¼æ¥ç©éµé®ç ç©éµé®çå®ä¹ï¼ P1.0-P1.3为å线,P1.4-P1.7为è¡çº¿
/*****************************************************/
/*****************************************************/
//æ¬èç¥è¯è¦ç¹ï¼
//ä¸æ
/*****************************************************/
#include <AT89X52.H>
//å®å®ä¹
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
/*****************************************************************************
* TH0åTL0æ¯è®¡æ°å¨0çé«8ä½åä½8ä½è®¡æ°å¨ï¼è®¡ç®åæ³:TL0=(65536-C)%256; *
* TH0=(65536-C)/256,å
¶ä¸C为æè¦è®¡æ°ç次æ°å³å¤é¿æ¶é´äº§çä¸æ¬¡ä¸æï¼TMODæ¯è®¡æ°å¨*
* å·¥ä½æ¨¡å¼éæ©ï¼0X01表示éç¨æ¨¡å¼1,å®æ16ä½è®¡æ°å¨ï¼æ大计æ°èå²ä¸º65536,æé¿æ¶ *
* é´ä¸º1ms*65536=65.536ms *
******************************************************************************/
#define V_TMOD 0x01 //å·¥ä½æ¹å¼1
#define V_TH0 0x3C //50ms延æ¶å¸¸æ° C=50000 //0XDC
#define V_TL0 0xB0 //50ms延æ¶å¸¸æ° C=50000 /0X58
//#define V_TH1 0xFF //5ms延æ¶å¸¸æ° C=5000 //0XDC
//#define V_TL1 0xFB //5ms延æ¶å¸¸æ° C=5000 /0X58
#define V_TH1 0xDC //1ms延æ¶å¸¸æ° C=1000 //0XDC
#define V_TL1 0x58 //1ms延æ¶å¸¸æ° C=1000 /0X58
#define MAXFUN 6 //åè½åæ¢ï¼è¡¨ç¤ºæå¤çåè½ç¶æ,
sbit k10=P1^0;
//sbit BEEP = P3^7; //è鸣å¨é©±å¨çº¿----------------请修æ¹ä¸ºsbit BEEP = P0^4;
uchar bee; //è鸣å¨01å¼å
³
uchar key; //é®é¡ºåºå
uchar fun=10; //åè½ç¶æ, <= MAXFUN
uchar it0=0,it1; //Timer0ä¸æ计æ°
uchar text=0; //æ°å
//uchar text_ctrl[4]={0xFE,0xFD,0xFB,0xF7}; //ä½ééå¼, 11111110, 11111101, 11111011, 11110111
uchar text_ctrl[4]={0xE,0xD,0xB,0x7}; //ä½ééå¼, 00001110, 00001101, 00001011, 00000111
//uchar text_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,å
³æ¾ç¤ºï¼æ°ç 管ç 表,é«çµå¹³ææ
//uchar text_code[17]= {0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//æ°ç 管代ç
uchar text_code[11]={ 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6,0xff};//0,1,2,3,4,5,6,7,8,9,å
³æ¾ç¤ºï¼æ°ç 管ç 表,é«çµå¹³ææ
uchar text_index=0; //å½åæ¾ç¤ºç¬¬å 个
uchar dis_buf[4]; //æ¾ç¤ºç¼å
uchar refresh=0; //å·æ°å¦ T1è鸣
uchar min=0; //minutes
uchar sec=0; //scconds
uchar hour=0; //scconds
uchar onsetup=0;
uchar keydown0=0,keydown1=0;
uchar data PWM=0xFf ; //PWMå¼å¢å ï¼åå 空æ¯åå°,LED ç¯æ¸æã
/*****************************************************/
// 延æ¶åç¨åº
/*****************************************************/
void delay0(uchar x) //x*0.14MS
{
uchar i;
while(x--)
for (i = 0; i<13; i++) {}
}
/*****************************************************/
//T1è鸣
/*****************************************************/
void beepT1()
{
if(refresh >0 )
{
refresh++;
bee=!bee;
if(refresh>=30)
refresh = 0;
}
}
/*****************************************************/
//æåè¾åº
/*****************************************************/
void textout()
{
//P0 = 0xff; // å
å
³éæææ°ç 管
P2 = dis_buf[text_index]; //ä¼ å
¥æ°åçç
bee = bee<<4;
P0 = text_ctrl[text_index]|bee; //éæ©ä½
//P0 = bee; //éæ©ä½
text_index++; //ä¸ä¸ä½
if( text_index >=4 )
text_index = 0;
}
/*****************************************************/
//é®æ«æåç¨åº
/*****************************************************/
void keyscan(void)
{
uchar temp;
key = -1; //ä¸æé®
P1=0x0F; //ä½åä½è¾å
¥
delay0(12);
temp=P1; //读P1å£
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
else if(temp==2)
key=1;
else if(temp==4)
key=2;
else if(temp==8)
key=3;
else
key=16;
P1=0xF0; //é«åä½è¾å
¥
delay0(12);
temp=P1; //读P1å£
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
else if(temp==2)
key=key+4;
else if(temp==4)
key=key+8;
else if(temp==8)
key=key+12;
else
key=16;
if( key!= -1)
fun = key;
//key =0;
//dis_buf=text_code[key]; //æ¥è¡¨å¾é®å¼
}
/*****************************************************/
//å¤æé®æ¯å¦æä¸
/*****************************************************/
int keydown(void)
{
P1=0xF0;
if(P1!=0xF0)
{
keyscan();
//delay0(250);
return 1;
//
//beep();
// while(P1!=0xF0); //çå¾
é®éæ¾
}
return 0;
}
/*****************************************************/
//设置æ¾ç¤ºç¼å
/*****************************************************/
void settext(uchar text0,uchar text1,uchar text2,uchar text3)
{
dis_buf[0]=text_code[text0];
dis_buf[1]=text_code[text1];
dis_buf[2]=text_code[text2];
dis_buf[3]=text_code[text3];
}
/*****************************************************/
//fun10
//ç§è¡¨ mm:ss
/*****************************************************/
void fun10()
{
it0++;
if( it0==20 ) //1s
{
it0=0;
sec++;
if(sec==60)
{
sec = 0;
min++;
if(min==60)
{
min =0;
}
}
refresh = 1;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
}
/*****************************************************/
//fun11
//æ¶é hh:mm
/*****************************************************/
void fun11()
{
it0++;
if( it0==20 ) //1s
{
it0=0;
sec++;
if(sec==60)
{
sec = 0;
min++;
if(min==60)
{
min =0;
hour++;
if(hour==12)
{
hour =0;
}
//dis_buf[1] = text_code[hour%10];
//dis_buf[0] = text_code[hour/10];
}
refresh = 1;
}dis_buf[1] = text_code[hour%10];
dis_buf[0] = text_code[hour/10];
dis_buf[3] = text_code[min%10];
dis_buf[2] = text_code[min/10];
}
}
/*****************************************************/
//fun12
//å计æ¶
/*****************************************************/
void fun12()
{
it0++;
if( it0==20 ) //0.1s
{
it0=0;
sec--; //sec must >=1
if(sec==0)
{
sec = 60;
min--;
//dis_buf[1] = text_code[min%10];
//dis_buf[0] = text_code[min/10];
if(min==0)
{
min =60;
}
}
refresh = 1;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
}
/*****************************************************/
//fun13
//设置æ¶é´ï¼hh:mm
/*****************************************************/
void fun13()
{
onsetup =1;
sec=0;
min=0;
hour=0;
dis_buf[1] = text_code[min%10];
dis_buf[0] = text_code[min/10];
dis_buf[3] = text_code[sec%10];
dis_buf[2] = text_code[sec/10];
}
/*****************************************************/
//fun3
//设置æ¶é´ï¼hh:mm
/*****************************************************/
void fun130()
{
if( keydown1!= keydown0)
{
keydown0 = keydown1;
if(keydown1==0 ) return;//æé®å¼¹èµ·
if(onsetup==1)
hour = key*10;
else if(onsetup==2)
hour += key;
else if(onsetup==3)
min = key*10;
else if(onsetup==4)
min += key;
onsetup++;
dis_buf[1] = text_code[hour%10];
dis_buf[0] = text_code[hour/10];
dis_buf[3] = text_code[min%10];
dis_buf[2] = text_code[min/10];
}
}
/*****************************************************/
//fun14
//设置
/*****************************************************/
void fun14()
{
sec=0;
min=0;
hour=0;
}
/*****************************************************/
// å®æ¶å¨0ä¸ææå¡ç¨åº, ç¨äºæ°ç 管çå¨ææ«æ
//T0å®æ¶å¨ï¼50msæ¿åä¸æ¬¡ï¼é´é1ç§æ§è¡ä¸æ¬¡è¾åº(éè¦20次)
/*****************************************************/
void timer0() interrupt 1
{
//TR1=0 ;
TH0=V_TH0; //1ms延æ¶å¸¸æ°
TL0=V_TL0; //é¢çè°è
//TH1=PWM ;
//TR1=1 ;
keydown1 = keydown();
//if( keydown1!= keydown0)
{
if( fun <=9 )
fun130();
else
switch(fun)
{
case 10:fun10();break;
case 11:fun11();break;
case 12:fun12();break;
case 13:fun13();break;
case 14:fun14();break;
default:break;
}
}
}
/*****************************************************/
// å®æ¶å¨1ä¸ææå¡ç¨åº, ç¨äºæ°ç 管çå¨ææ«æ
//T1å®æ¶å¨ï¼5msæ¿åä¸æ¬¡ï¼é´é5msæ§è¡ä¸æ¬¡è¾åº
/*****************************************************/
void timer1() interrupt 3
{
//TR1=0;
//TH1=PWM ;
//å¤çä¸è¡
TH1 = V_TH1;
TL1 = V_TL1;
it1++;
//if( it1==200 )
{
it1=0;
beepT1();
textout();
}
}
/*****************************************************/
//ç³»ç»åå§å
// å½æ°åè½ï¼å¯¹ç³»ç»è¿è¡åå§åï¼å
æ¬å®æ¶å¨åå§åååéåå§å*/
/*****************************************************/
void init(void)
{
//åéåå§å
bee=1;
P0 = 0xFF;
P2 = 0xFF;
text_index = 0;
dis_buf[0]=text_code[0];
dis_buf[1]=text_code[0];
dis_buf[2]=text_code[0];
dis_buf[3]=text_code[0];
//å®æ¶å¨åå§å/
TMOD=V_TMOD;
TH0=V_TH0; //延æ¶å¸¸æ°
TL0=V_TL0; //延æ¶å¸¸æ°
TH1=PWM; //è宽è°è
TL1=0;
IE = 0x82;
ET0=1; //å®æ¶/计æ°å¨T0ä¸æå
许
ET1=1; //å®æ¶/计æ°å¨T1ä¸æå
许
TR0=1 ; //T0å¯å¨
TR1=1 ; //T1å¯å¨*/
}
/*****************************************************/
//主ç¨åº
//å¤çæé®æ¶å ä¸äºæé®æ¶æ
/*****************************************************/
void main(void)
{
init(); //ç³»ç»åå§å
while(1);
//è¿run()é½æ²¡äº
}
/*****************************************************/
//è鸣
/*****************************************************
void beep()
{
uchar i,j;
for (i=0;i<100;i++)
{
for(j=20;j>7;j--)
{
delay0(j);
BEEP=!BEEP; //BEEPåå
}
}
BEEP=1; //å
³éè鸣å¨
}
*/