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

📄 lcd1602.c

📁 单片机简易频率计。包含有Proteus仿真程序
💻 C
字号:
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^1;
sbit lcden=P2^0;
sbit  test = P1^0;
uchar  table[] = "Cymometer";
uchar table1[] = "FR:";
uchar count;
uint fre, fre_tmp;
bit flag ;


void delay(uint x)
{
	uint a,b;
	for(a=x;a>0;a--)
		for(b=10;b>0;b--); 
}

void write_com(uchar com)
{
	P0=com;
	rs=0;
	lcden=0;
	delay(20);
	lcden=1;
	delay(20);
	lcden=0;
	
}

void write_data(unsigned char date)
{
	P0=date;
	rs=1;
	lcden=0;
	delay(10);
	lcden=1;
	delay(10);
	lcden=0;
	
}

void init()
{
	write_com(0x38);  //设置16*2显示,5*7点阵,8位数据接口
	delay(20);
	write_com(0x0f);   //显示光标及闪烁设置
	delay(20);
	write_com(0x06);   //读或写完一个字符后地址指针自动加1,光标地址加1
	delay(20);
	write_com(0x01);	//清屏
	delay(20);	
}


void int0(void) interrupt 2 using 0
{

			EA = 0;
			fre_tmp++;
			EA = 1;

}


void time0(void ) interrupt 1 using 1
{
	EA = 0;
	TR0 = 0;
	if(count == 19 )
	{
		count=0;
		fre = fre_tmp;
		fre_tmp = 0;
		TH0 = 0x4b;
		TL0 = 0xff;
		TR0 = 1;
		flag = 1;
	}
	else
	{
		count++;
		TH0 = 0x4b;
		TL0 = 0xff;
		TR0 = 1;
    	flag = 0 ; 
	}
	EA = 1;		
}



//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
	Y &= 0x1;
	X &= 0xF;                                       //限制X不能大于15,Y不能大于1
	if (Y) X |= 0x40;                               //当要显示第二行时地址码+0x40;
	X |= 0x80;                                      //算出指令码
	write_com(X);                          //这里不检测忙信号,发送地址码
	write_data(DData);
}

//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
	unsigned char ListLength;

	ListLength = 0;
	Y &= 0x1;
	X &= 0xF;                                       //限制X不能大于15,Y不能大于1
	while (DData[ListLength]>0x20)                  //若到达字串尾则退出
	{
	if (X <= 0xF)                                   //X坐标应小于0xF
	{
	DisplayOneChar(X, Y, DData[ListLength]);        //显示单个字符
	ListLength++;
	X++;
	}
	}
}



void main()
{
	uchar i,timeflag;
	uchar temp[4] ;
	TMOD = 0x01;
	TH0 = 0x4b;
	TL0 = 0xff;
	EA = 1;
	
	EX1 = 1;IT1 = 1;
	ET0 = 1;
	TR0 =1;

	init();
	write_com(0x80);
	delay(20);
//	tmp = 1;
//	sprintf(s,"F%dR",1 );
	
	for(i=0; i<9; i++)
	{
		write_data(table[i]);
		delay(20);		
	}
	write_com(0xc0);
	for(i=0; i<3; i++)
	{
		write_data(table1[i]);
		delay(20);		
	}	  
	while(1) 
	{
		if(flag == 1)
		{
		test = !test;
		//sprintf( temp, "%d", fre );
		temp[0]=(fre/1000)|0x30;
		temp[1]=(fre/100%10)|0x30;
		temp[2]=(fre/10%10)|0x30;
		temp[3]=(fre%10)|0x30;		
		DisplayOneChar(4,1,temp[0]);
		DisplayOneChar(5,1,temp[1]);
		DisplayOneChar(6,1,temp[2]);
		DisplayOneChar(7,1,temp[3]);

		}
	  //delay(100);
	}

}

⌨️ 快捷键说明

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