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

📄 lcd时钟.c

📁 一个对1602液晶显示器的驱动程序
💻 C
字号:
 #include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define BOOL bit
sbit remoteout=P3^2;
sbit rs	= P1^0;	
sbit rw = P1^1;
sbit ep = P1^2;
uchar temp,i,num;
uchar miaoge,miaoshi,fengge,fengshi,shige,shishi;
uchar code dis1[] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
//BYTE code dis2[]={0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6};
uchar code dis2[]={"  Time to time  "};
delay(uchar ms)
{							// 延时子程序
	uchar i;
	while(ms--)
	{
		for(i = 0; i< 250; i++)
		{
			_nop_();
			_nop_();
			_nop_();
			_nop_();
		}
	}
}

BOOL lcd_bz()
{							// 测试LCD忙碌状态
	BOOL result;
	rs = 0;
	rw = 1;
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	result = (BOOL)(P0 & 0x80);
	ep = 0;
	return result;	
}

lcd_wcmd(uchar cmd)
{							// 写入指令数据到LCD
	while(lcd_bz());
	rs = 0;
	rw = 0;
	ep = 0;
	_nop_();
	_nop_();	
	P0 = cmd;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;		
}

lcd_pos(uchar pos)
{							//设定显示位置
	lcd_wcmd(pos | 0x80);
}

lcd_wdat(uchar dat)	
{							//写入字符显示数据到LCD
	while(lcd_bz());
	rs = 1;
	rw = 0;
	ep = 0;
	P0 = dat;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ep = 0;	
}

lcd_init()
{							//LCD初始化设定
	lcd_wcmd(0x38);			//功能设置
	delay(1);
	lcd_wcmd(0x0c);			//显示开关控制
	delay(1);
	lcd_wcmd(0x01);			//清除LCD的显示内容
	delay(1);
}
time()
{
	if(temp==100)
	{
		temp=0;

		miaoge++;
		if(miaoge>=10)
		{
			miaoge=0;
			miaoshi++;
			if(miaoshi>=6)
			{
				miaoshi=0;
				fengge++;
				if(fengge>=10)
				{
					fengge=0;
					fengshi++;
					if(fengshi>=6)
					{
						fengshi=0;
						shige++;
						if(shige>=10)
						{
							shige=0;
							shishi++;
							if(shishi>2)
							shishi=0;
						}

					}
				}
			}
		}
			

	}
	lcd_pos(0X07);				// 设置显示位置为第二行12区为秒个位
	lcd_wdat(dis1[miaoge]);
		lcd_pos(0X06);				// 设置显示位置为第二行11区为秒十位
	lcd_wdat(dis1[miaoshi]);
		lcd_pos(0x05);
	lcd_wdat(0x3a);
		lcd_pos(0X04);				// 设置显示位置为第二行的第9区为分个位
	lcd_wdat(dis1[fengge]);
		lcd_pos(0X03);				// 设置显示位置为第二行的第8区为分十位
	lcd_wdat(dis1[fengshi]);
		lcd_pos(0x02);
	lcd_wdat(0x3a);
		lcd_pos(0X01);				// 设置显示位置为第二行的第6区时十位	
	lcd_wdat(dis1[shige]);
		lcd_pos(0X00);				// 设置显示位置为第二行的第5区时个位
	lcd_wdat(dis1[shishi]);
}
main()
{	EA=1;
	EX0=1;
	TMOD=0X01;
	TH1=0X4c;
	TL1=0x00;
	ET1=1;
	TR1=1;
	lcd_init();				// 初始化LCD			
	delay(10);
	while(1)
	{ 
		time();
	}

}
void int0(void) interrupt 0
{
	num++;
	P0=~P0;

}
void time1(void) interrupt 3
{	ET1=0;
	TR1=0;
	TH1=0X4c;
	TL1=0X00;
	TR1=1;
	temp++;
	ET1=1;	
}

⌨️ 快捷键说明

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