| #include #include #include #define uchar unsigned char #define CHECK_BUSY ***it RS = P1^0; ***it RW = P1^1; ***it EN = P1^5; bit flag; char counter,counter2; void DelayMs(uchar t) { int x,y; for (x=t;x>0;x--) for(y=110;y>0;y--); } bit LCD_Check_Busy(void) { #ifdef CHECK_BUSY P0= 0xFF; RS=0; RW=1; EN=0; _nop_(); EN=1; return (bit)(P0 & 0x80); #else return 0; #endif } void write_Com(uchar com) { while(LCD_Check_Busy()); RS=0; RW=0; EN=1; P0= com; _nop_(); EN=0; } void write_dat(uchar dat) { while(LCD_Check_Busy()); RS=1; RW=0; EN=1; P0= dat; _nop_(); EN=0; } void LCD_Clear(void) { write_Com(0x01); DelayMs(5); } void LCD_Write_Char(uchar x,uchar y,uchar dat) { if (y == 0) { write_Com(0x80 + x); } else { write_Com(0xC0 + x); } write_dat( dat); } void LCD_Write_String(uchar x,uchar y,uchar *s) { while (*s) { LCD_Write_Char(x,y,*s); s ++; x++; } } void LCD_Init(void) { write_Com(0x38); write_Com(0x06); DelayMs(5); write_Com(0x0C); write_Com(0x01); } void timer2_init() { T2MOD=0X00; TH2=(65536-110592/60)/256; TL2=(65536-110592/60)%256; RCAP2H=TH2; RCAP2L=TL2; EA=1; ET2=1; TR2=1; } void Init_Timer0(void) { TMOD=0x05; TH0=0x00; TL0=0x00; EA=1; ET0=1; TR0=1; } main() { unsigned long int a; char temp[16]; Init_Timer0(); timer2_init(); LCD_Init(); DelayMs(10); LCD_Clear(); LCD_Write_String(0,0,"Frequency table"); while(1) { if(flag==1) {flag=0; a=counter*65536+TH0*256+TL0; a*=10; sprintf(temp,"FREQ:%08.0f Hz",(float)a); LCD_Write_String(0,1,temp); counter=0; TR0=1;TR2=1; TH0=0; TL0=0; } } } void t0(void) interrupt 1 using 1 { counter ++; TH0=0; TL0=0; } void t2(void) interrupt 5 using 2 { TF2=0; counter2++; if(counter2==50) { TR0=0;TR2=0; counter2=0; TH2=(65536-110592/60)/256; TL2=(65536-110592/60)%256; flag=1; } } |
更多回帖