⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602液晶频率计.c

📁 Keilc51和proteus环境下实现的0-50MHz的频率计。
💻 C
字号:
#include<at89x51.h>
//接口定义
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
unsigned int a;
unsigned long i;
unsigned char g,f,c,d,e,h,j,m,k;
unsigned char h1,h2,h3,h4,h5,h6,h7;
unsigned char code String0[]="F:            Hz";
unsigned char code String1[]="T:         .  us";
//判断忙指令
void Busy()
{
RS=0;
RW=1;
do
   {
   P1=0xff;
   E=0;
   E=1;
   P1&=0x80;
   }
   while(P1!=0);
}
//写指令程序
void Write_com( unsigned char com)
{
Busy();
RS=0;
RW=0;
E=1;
P1=com;
E=0;
}
//写数据程序
void Write_dat(unsigned char dat)
{
Busy();
RS=1;
RW=0;
E=1;
P1=dat;
E=0;
}
//清屏显示
void Clear()
{
Write_com(1);
}
//初始化
void Init()
{
Write_com(0x0c);//开显示,无光标显示
Write_com(0x06);//文字不动,光标自动右移
Write_com(0x38);//设置显示模式:8位2行5x7点阵
}
//显示一个字符子程序Dat表示显示字符的代码,a=0表示显示在第一行,a=1表示显示在第二行,i表示显示的位置i=0-15
void Display_One(bit a,unsigned char i,unsigned char Dat)
{
if(a)
Write_com(0xc0+i);
else
Write_com(0x80+i);
Write_dat(Dat+0x30);
}
//显示字符串子程序,a=0表示显示在第一行,a=1表示显示在第二行,i表示显示的起始位置i=0-15,j表示字符串的长度j=1-16,
//m=0表示选择字符串String0[],m=1表示选择字符串String1[].
void Display_String(bit a,unsigned char i,unsigned char j,bit m)
{
unsigned char k=0;
for(j;j>0;j--)
   {
   if(a)
   Write_com(0xc0+i);
   else
   Write_com(0x80+i);
   if(m)
   Write_dat(String1[k]);
   else
   Write_dat(String0[k]);
   k++;
   i++;
   }
}
//数据处理子程序
void Data_Processing()
{
if(P0_0==1)i+=16;
if(P0_1==1)i+=32;
if(P0_2==1)i+=64;
if(P0_3==1)i+=128;
if(P0_4==1)i+=256;
if(P0_5==1)i+=512;
if(P0_6==1)i+=1024;
if(P0_7==1)i+=2048;
if(P2_3==1)i+=4096;
if(P2_4==1)i+=8192;
if(P2_5==1)i+=16384;
if(P2_6==1)i+=32768;
if(P3_1==1)i+=65536;
if(P3_2==1)i+=131072;
if(P3_3==1)i+=262144;
if(P3_4==1)i+=524288;
if(P3_5==1)i+=1048576;
if(P3_6==1)i+=2097152;
if(P3_7==1)i+=4194304;
g=i/1000000;
f=i%1000000/100000;
c=i%100000/10000;
d=i%10000/1000;
e=i%1000/100;
h=i%100/10;
m=i%10;
//消除无用的0
if(g==0)
   {
   g=0x70;
   if(f==0)
      {
      f=0x70;
      if(c==0)
         {
         c=0x70;
	     if(d==0)
	        {
		    d=0x70;
			if(e==0)
			   {
			   e=0x70;
			   if(h==0)
			      {
				  h=0x70;
				  }
			   }
		    }
	     }
      }
   }
   if(i<16)h1=h2=h3=h4=h5=h6=0x70;
   else
   {
   j=1000000%i*10/i;
   k=1000000%i*10%i*10/i;
   i=1000000/i;
   h1=i/1000000;
   h2=i%1000000/100000;
   h3=i%100000/10000;
   h4=i%10000/1000;
   h5=i%1000/100;
   h6=i%100/10;
   h7=i%10;
   }
   //消除无用的0
   if(h1==0)
   {
   h1=0x70;
   if(h2==0)
      {
      h2=0x70;
      if(h3==0)
         {
         h3=0x70;
	     if(h4==0)
	        {
	   	    h4=0x70;
		    if(h5==0)
		       {
		    	h5=0x70;
		    	if(h6==0)
			      {
			      h6=0x70;
			      }
			   }
		    }
	     }
      }
   }
}
void main()
{
Clear();
Init();
TMOD=0x20;
TL1=TH1=6;
TR1=ET1=1;
while(P3_0==1);
EA=1;
P2_7=0;
while(EA==1);
Data_Processing();
Display_String(1,0,16,1);
Display_String(0,0,16,0);
Display_One(0,7,g);
Display_One(0,8,f);
Display_One(0,9,c);
Display_One(0,10,d);
Display_One(0,11,e);
Display_One(0,12,h);
Display_One(0,13,m);
Display_One(1,4,h1);
Display_One(1,5,h2);
Display_One(1,6,h3);
Display_One(1,7,h4);
Display_One(1,8,h5);
Display_One(1,9,h6);
Display_One(1,10,h7);
Display_One(1,12,j);
Display_One(1,13,k);
while(1);
}
void t1() interrupt 3 using 0
{
a++;
if(a==4000)
   {
   EA=0;
   P2_7=1;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -