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

📄 1602.c

📁 51单片机测频率的程序
💻 C
字号:
#include <reg52.h>
#include "1602.h"
#define DataPort P2

sbit RS=P1^3;
sbit RW=P1^4;
sbit EN=P1^5;
uchar i=0;
uchar code meun[2][16]={"Frequency is:   ","00000000 Hz     "};
uchar code m[10]="0123456789";
unsigned char T0count; 
unsigned char timecount; 
bit flag; 
unsigned int x; 

void delay_ms(uchar t)
{
	unsigned char i=0;
	while(t--)for(i=0;i<120;i++);
}

void WriteData(uchar dat)
{
	EN=0;
  	RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
  	RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
  	RS=1;
  	RW=0;
  	EN=1;
  	DataPort=dat;
    EN=0;
  	RS=0;
  	RW=0;
  	for (i=0;i<20;i++);
}

void WriteCmd(uchar cmd)
{
	EN=0;
  	RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
  	RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
  	EN=1;
  	DataPort=cmd;
  	RS=0;
 	RW=0;
 	EN=0;
  	for (i=0;i<20;i++);
}

void DisChar(uchar ps,uchar dat)
{
	WriteCmd((0x80+ps));
	WriteData(dat);
}

void LcdInit(void)
{
	char pp=0;

	WriteCmd(0x38);
    delay_ms(5);
	WriteCmd(0x38);
    delay_ms(5);
	WriteCmd(0x38);
    delay_ms(5);
	
	WriteCmd(0x01);delay_ms(5);
	WriteCmd(0x06);delay_ms(5);
	WriteCmd(0x38);
	WriteCmd(0x0c); 
	WriteCmd(0x40);
	
	for(pp=0;pp<16;pp++)DisChar(pp,*(meun[0]+pp));
	for(pp=0;pp<16;pp++)DisChar(pp+0x40,*(meun[1]+pp)); 	
}

void Display(unsigned int x)
{
	DisChar(7+0x40,m[x%10]);x /= 10;
	DisChar(6+0x40,m[x%10]);x /= 10;
	DisChar(5+0x40,m[x%10]);x /= 10;
	DisChar(4+0x40,m[x%10]);x /= 10;
	DisChar(3+0x40,m[x%10]);x /= 10;
	DisChar(2+0x40,m[x%10]);x /= 10;
	DisChar(1+0x40,m[x%10]);x /= 10;
	DisChar(0+0x40,m[x%10]);x /= 10;
	delay_ms(200);
}

void main(void)
{
	TMOD=0x15; 
  	TH0=0; 
  	TL0=0; 
  	TH1=(65536-49989)/256; 
  	TL1=(65536-49989)%256; 
  	TR1=1;
  	ET0=1; 
  	ET1=1;
  	EA=1;
  	TR0=1;
	LcdInit();

	while(1)
	{
		if(flag==1) 
       	{ 
         	flag=0; 
         	x=(T0count*65536+TH0*256+TL0);
         	timecount=0; 
         	T0count=0; 
         	TH0=0; 													
         	TL0=0; 
         	TR0=1;
			Display(x);
       	} 
	}
}

void t0(void) interrupt 1 using 0	//计脉冲个数
{ 
  T0count++; 
} 

void t1(void) interrupt 3 using 0	 //定时1s
{ 
  TH1=(65536-50045)/256; 
  TL1=(65536-50045)%256; 
  timecount++; 
  if(timecount==20) 
    { 
      TR0=0;
      timecount=0; 
      flag=1;
    } 
}

⌨️ 快捷键说明

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