| 
 
| 1602的部分就不用看了 
 #include<reg52.h>
 #define uchar unsigned char
 #define uint unsigned int
 
 void delayms(unsigned char ms)                //延时程序
 
 {
 unsigned char i;
 while(ms--)
 {
 for(i = 0; i < 120; i++);
 }
 }
 
 sbit rs=P2^5;                //1602
 sbit rw=P2^6;                //
 sbit e=P2^7;                //
 
 
 uchar table1[]="0123456789";
 long int k=0,m,n,flag=0;
 long int g,s,b,q,w;
 long double i,t;
 
 void display();                   //显示函数
 
 void write_com(uchar com)                          //1602写入指令
 {
 e=0;
 rs=0;
 rw=0;
 P0=com;
 delayms(1);
 e=1;
 delayms(5);
 e=0;
 
 }
 
 
 void write_data(uchar dat)                          //1602写入数据
 {
 e=0;
 rs=1;
 rw=0;
 P0=dat;
 delayms(1);
 e=1;
 delayms(5);
 e=0;
 }
 
 void init(void)                                                         //1602初始化设置程序
 {
 delayms(15);
 write_com(0x38);
 delayms(5);
 write_com(0x38);
 delayms(5);
 write_com(0x38);
 write_com(0x38);
 write_com(0x08);
 write_com(0x01);
 write_com(0x06);
 write_com(0x0c);
 
 
 }
 
 
 
 
 main()                                  //主函数
 {
 
 EA=1;                //中断总开关
 EX0=1;           //外部中断
 IT0=1;           //负跳变沿触发
 
 TMOD=0x01;         //定时器0 方式1
 TH0=0;                  //初值 高8位
 TL0=0;                  //初值低8位
 EA=1;
 //        ET0=1;                 //打开定时器中断
 //        TR0=1;                 //启动定时器
 while(1)
 {
 display();
 }
 
 
 }
 
 void timer0() interrupt 1
 {
 k++;                 //计数器溢出值
 TH0=0;
 TL0=0;
 
 
 
 }
 
 void int0() interrupt 0
 {
 if(flag==0)                 //第一次中断
 {
 i=0;
 k=0;
 TH0=0;
 TL0=0;
 ET0=1;                //打开定时器中断
 TR0=1;                //
 flag++;
 }
 
 if(flag==1)           //第二次中断
 {
 m=TH0;
 n=TL0;
 
 ET0=0;          //关闭定时器中断
 TR0=0;           //
 flag=0;
 
 t=k*65536+256*m+n;          //被测频率的一个周期
 
 i=100000/t;                           //频率
 
 }
 
 }
 
 void display()
 {
 
 
 
 g=(long int)i%10;                        //        个位
 s=(long int)i/10%10;                        //         十
 b=(long int)i/100%10;           //          百
 q=(long int)i/1000%10;                  //   千
 w=(long int)i/10000;                        //          万
 
 init();
 write_com(0x80);                           //显示
 write_data(table1[w]);
 delayms(10);
 
 write_com(0x81);
 write_data(table1[q]);
 delayms(10);
 
 write_com(0x82);
 write_data(table1);
 delayms(10);
 
 write_com(0x83);
 write_data(table1
 ); delayms(10);
 
 write_com(0x84);
 write_data(table1[g]);
 delayms(10);
 
 while(1);
 
 
 }
 
 
 
 
 
 | 
 |