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

📄 我的液晶.c

📁 基于c51的液晶数字钟源程序 适合初学者
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#define DROPT P0
#define start 4

sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit l1=P1^0;
bit m=0;
unsigned int A[6]={0,1,9,5,3,2};
unsigned int B1[6]={9,5,9,5,3,2};
void Add(unsigned int i);

void WriteCmd(unsigned char c)	//送控制字子程序,不检测忙信号
{
	RS=0;
	RW=0;
	DROPT=c;
	E=1;
	_nop_();
	E=0;
}

void Delay(unsigned char j)//延时
{
	unsigned char i;
	for(;j>0;j--)
		for(i=0;i<125;i++)
		{
		}
}

void WaitIdle()//正常读写之前检测LCD忙信号
{
	unsigned int temp;
	RS=0;
	RW=1;
	E=1;
	for(temp=0;temp<500;temp++);
	_nop_();
	E=0;
}

void PreWriteCmd(unsigned char c)  //送控制字
{
	WaitIdle();
	WriteCmd(c);

}

void LcdPos(unsigned char xpos,unsigned ypos)//更改光标位置
{
	unsigned temp;
	if( ypos==0)
		temp=0x80+xpos;
	else 
		temp=0xc0+xpos;
	PreWriteCmd(temp);
}

void WriteWord(unsigned char c)
{
	WaitIdle();
	RS=1;
	RW=0;
	DROPT=c;
	E=1;
	_nop_();
	_nop_();
	E=0;
}

void WriteChar(unsigned char c,unsigned char xpos,unsigned ypos)
{//在指定位置显示字符
	LcdPos(xpos,ypos);
	WriteWord(c);
}
/*
void WriteString(unsigned char *s,unsigned char xpos,unsigned char ypos) 
{//显示字符串,若指定的行显示不下,将余下字符串截断,不换行显示
    unsigned char i=0;
	if(*s==0)
		return;
	if(ypos>1)
	    {
		    WriteString("Error!",0,1);
		}
	else
	{
	    while((*(s+i)!='\0')&&(xpos<=15))
	   { 
	    	WriteChar(*(s+i),xpos,ypos);
		    xpos++;
			i++;
       }
    }
}  */

void Initial(void)
{
	Delay(200);//使用12M以下晶振不必修改必修改
	PreWriteCmd(0x38);
	PreWriteCmd(0x0c);
//	PreWriteCmd(0x04);
}
void main(void)
{
	char i;
	Initial();
	TMOD=0x61;
	TH0=0xf7;
	TL0=0x00;
	TCON=0x10;
	ET0=1;
	EA=1;
	LcdPos(start,0);
	for(i=5;i>=0;i--)
	{
		WriteWord(A[i]+'0');
		if(i==4||i==2)
			WriteWord(':');
	}
	while(1);
}
timmer0()interrupt 1
{
	static unsigned int t;
	TF0=0;
	TH0=0xf7;
	TL0=0x00;
	t++;
	if( t%200==0)
	{
		m=~m;
		l1=0;
		LcdPos(start+5,0);
		if(m==1)
			WriteWord(' ');
		else
			WriteWord(':');
	}
	if(t==400)
	{
		t=0;
		Add(0);
	}
}

void Add(unsigned int i)
{
	if(i>5)
		return;
	A[i]++;
	LcdPos(start+(5-i)/2+(5-i),0);
	if(i==4)
	{
		if(A[i]>9)
		{
			A[i]=0;
			WriteWord('0');
			Add(i+1);
			return;
		}
		if(A[5]>1&&A[i]>B1[i])
		{	A[i]=0;
			WriteWord('0');
			Add(i+1);
			return;
		} 
	}
	else if(A[i]>B1[i])
	{
		A[i]=0;
		WriteWord('0');
		Add(i+1);
		return;
			
	} 
	WriteWord('0'+A[i]);	
}















⌨️ 快捷键说明

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