资讯详情

51单片机频率计Proteus仿真设计(带程序电路)

Proteus仿真电路图如下:(下载仿真文件后有清晰图) 有电路图和程序,电路是isis的,程序是uv3的,仿真工程文件下载:http://www.51hei.com/f/dgnplj.rar 下面是程序源代码: #include<AT89x52.h> #include<stdio.h> #include <intrins.h> //端口定义 sbitRS = P3^5; sbit LCDRW = P3^6; sbit LN = P3^7; sbitLCF = P2^7;

#defineDBPORT P2 #define DIS_CURS_OFF 0x0c #define LCD_CLRS 0x01 #define DIS_HIDE 0x08 #define LCD_INIT 0x38 #define LCD_HOME 0x02 #define LCD_DATA 1 #defineLCD_COMMAND 0 #define LCD_READ 1 #define LCD_WRI 0

#define K1 6 #define K2 5 #define K3 4 #define K4 3 #define K5 2 #define K6 1 #define K7 0 #define FctrlP0_3 #define TctrlP0_4 #define DistcP0_5 #define WidthP0_6 #defineCutP0_7 #define StopP1_6 #define ClrsP1_7 #define EnexP3_0 #define DisallP0=0xff;P1=0xff

#define StopCount P1_6=0 #define StarCount P1_6=1 #define ClrsCount P1_7=0;_nop_();P1_7=1 #define ClrsDff P1_2=0;_nop_();P1_2=1

#define BackbP1_3 #define BackcP1_4

#define BackLight P1_0

unsigned char sbuffer[15],w[5]; unsigned char contrast=5; unsigned long value=0,copyer=0,wvalue=0;

bit IsFreq=1; bit IsLow=1;

void lcd_wait(); void lcd_command(unsigned char command); void lcd_putchar(unsigned char character); void lcd_moveto(unsigned char x, unsigned char y); void lcd_print(unsigned char *str); void delay1s(); void high_init(); void key_delay(); void key_jud(); void low_init(); void width_init(); void depart_w(); void intrT2(); void width_get(); void count(); void count_init(); void low_get(); void show_high_t(); void show_high_f(); void show_low_t(); void show_low_f(); void intr0(); void intr1(); void high_get(); void contrast_handle(); void install(); void lcd_init();

void lcd_wait() { LCDEN=0; DBPORT=0xff; LCDRS=LCD_COMMAND; LCDRW=LCD_READ; LCDEN=1;_nop_(); while(LCDBF) {LCDEN=0;_nop_(); LCDEN=1;_nop_(); } LCDEN=0; }

void lcd_command(unsigned char command) { lcd_wait(); LCDRS=LCD_COMMAND; LCDRW=LCD_WRITE; DBPORT=command; LCDEN=1;_nop_(); LCDEN=0; }

void lcd_putchar(unsigned char character) { lcd_wait(); LCDRS=LCD_DATA; LCDRW=LCD_WRITE; DBPORT=character; LCDEN=1;_nop_(); LCDEN=0; } void lcd_moveto(unsigned char x, unsigned char y) { if(x==0) lcd_command(0x80|y); if(x==1) lcd_command(0xc0|y); } void lcd_print(unsigned char *str) { while(*str!='\0') {lcd_putchar(*str); str++; } }

void delay1s() { unsigned char i,j,k; for(i=0;i<255;i++) for(j=0;j<103;j++) for(k=0;k<11;k++); for(k=0;k<216;k++); _nop_(); }

void high_init() { EA=0; Disall; Fctrl=0; TMOD=0x05; TR0=1; StopCount; ClrsCount; TL0=0; TH0=0; }

void key_delay() { unsigned char i,j; for(i=0;i<255;i++) for(j=0;j<250;j++); }

void key_jud() { switch(P0&0x7) { case K6:TH0=0; TL0=0; ClrsCount; key_delay(); break; case K7:P1_6=!P1_6; lcd_moveto(1,15); if(!P1_6) lcd_putchar('P'); else lcd_putchar(' '); key_delay(); break; case K1:w[0]++; if(w[0]==10) w[0]=0; key_delay(); break; case K2:w[1]++; key_delay(); if(w[1]==10) w[1]=0; break; case K3:w[2]++; if(w[2]==10) w[2]=0; key_delay(); break; case K4:w[3]++; if(w[3]==10) w[3]=0; key_delay(); break; case K5:w[4]++; if(w[4]==10) w[4]=0; key_delay(); break; } }

void low_init() { Disall; Distc=0; Tctrl=0; Cut=0; StopCount; ClrsCount; StarCount; IsLow=1; TL0=0; TH0=0; IT0=1; IT1=1; EX1=1; EX0=1; ClrsDff; EA=1; }

void width_init() { Disall; Width=0; Tctrl=0; ClrsCount; TL0=0; TH0=0; TMOD=0x05; TR0=1; TF2=0; T2C=8; ET2=1; ClrsCount; TH0=0; TL0=0; EA=1; }

void depart_w() { unsigned char i; while(wvalue>=1e4) wvalue/=10; for(i=0;i<4;i++) { w[3-i]=wvalue%10+'0'; wvalue/=10; } }

void intrT2() interrupt 5 { unsigned char i; Tctrl=1; P2=0xff; Enex=0; value=TH0; value=(value<<8); value=value+TL0; value=(value<<8); value=value+DBPORT; Enex=1; for(i=0;value;i++) { sbuffer[i]=value%10+'0'; value=value/10; } lcd_moveto(1,3); i++; while(i) { lcd_putchar(sbuffer[i]); i--; } lcd_putchar(sbuffer[i]); lcd_print(" uS "); while(1) { i=P0&0x07; if(i==K1) break; } TH0=0; TL0=0; ClrsCount; lcd_moveto(1,3); lcd_print(" Capture....."); key_delay(); T2CON=8; Tctrl=0; }

void width_get() { while(1); }

void count() { while(1) { key_jud(); P2=0xff; Enex=0; value=TH0; value=(value<<8); value=value+TL0; value=(value<<8); value=value+DBPORT; Enex=1; lcd_moveto(1,9); sprintf(sbuffer,"%-5lu",value); lcd_moveto(1,9); lcd_print(sbuffer); copyer=w[4]+w[3]*10+w[2]*1e2+w[1]*1e3+w[0]*1e4; if(value==copyer) { StopCount; P3_1=0; while(P0_1==1||P0_2==1); P3_1=1; StarCount; } sprintf(sbuffer,"%c%c%c%c%c",w[0]+'0',w[1]+'0',w[2]+'0',w[3]+'0',w[4]+'0'); lcd_moveto(0,9); lcd_print(sbuffer); } }

void count_init() { unsigned char i; Disall; Fctrl=0; TMOD=0x05; TR0=1; StopCount; ClrsCount; TL0=0; TH0=0; for(i=0;i<5;i++) w[i]=9; w[2]=8; StarCount; }

void low_get() { low_init(); while(IsLow); high_init(); }

void show_high_t() { copyer=value; while(value>=100000) value/=10; wvalue=1e9/value; depart_w(); if(copyer<=1e4) sprintf(sbuffer,"%c%c%c.%c uS ",w[0],w[1],w[2],w[3]); else if(copyer<=1e5) sprintf(sbuffer,"%c%c.%c%c uS ",w[0],w[1],w[2],w[3]); else if(copyer<=1e6) sprintf(sbuffer,"%c.%c%c%c uS ",w[0],w[1],w[2],w[3]); else if(copyer<=1e7) sprintf(sbuffer,"%c%c%c.%c nS ",w[0],w[1],w[2],w[3]); else sprintf(sbuffer,"%c%c.%c%c nS ",w[0],w[1],w[2],w[3]); lcd_moveto(1,5); lcd_print(sbuffer);

}

void show_high_f() { wvalue=value; depart_w(); if(value<1e4) sprintf(sbuffer,"%c.%c%c%c KHz ",w[0],w[1],w[2],w[3]); else if(value<1e5) sprintf(sbuffer,"%c%c.%c%c KHz ",w[0],w[1],w[2],w[3]); else if(value<1e6) sprintf(sbuffer,"%c%c%c.%c KHz ",w[0],w[1],w[2],w[3]); else if(value<1e7) sprintf(sbuffer,"%c.%c%c%c MHz ",w[0],w[1],w[2],w[3]); else sprintf(sbuffer,"%c%c.%c%c MHz ",w[0],w[1],w[2],w[3]); lcd_moveto(1,5); lcd_print(sbuffer); }

void show_low_t() { wvalue=value; depart_w();

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台