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

📄 lcd.c

📁 自己做的一个简单的设备.使用Freescale HC908SR12单片机,使用KEYS,AD,PWM,FLASH,LCD等模块.经使用运行稳定.
💻 C
字号:
//文件名   LCD.C
//目    的 液晶处理
//Copyright (c) 2006-2007 东方久乐公司电子研究所
//编    写 文洪奎 2007-01-15
//修    改 
//修改原因

//LCD型号  HF12864B2(上海恒方) 驱动芯片 
//       接   口  
//PIN   LCD          HC908SR12
// 1  VSS            GND
// 2  VDD            +5V
// 3  V0   --[]--    PTC0/PWM0
// 4  RS(CS)         PTB4
// 5  R/W(SID)       PTB5
// 6  E(CLK)         PTB6
// 7  DB0
// 8  DB1
// 9  DB2
// 10 DB3
// 11 DB4
// 12 DB5
// 13 DB6
// 14 DB7
// 15 PSB            GND
// 16 NC
// 17 /RET           PTB1
// 18 NC
// 19 LED_A          GND
// 20 LED_K          PTB0

#include "global.h"
#include "lcd.h"
#include "hidef.h"

unsigned char byte1,byte2,byte3;

char DisBuf[8];	//显示缓冲区

void LCD_Init()
{
	PWMCR_PWMEN0 = 1;
	PWMCR_PCH0 = 1;	
	PWMCCR = 0x80;

	LCD_CS_DDR = 1;
	LCD_CS = 0;
	LCD_CLK_DDR = 1;
	LCD_CLK = 0;
	
	LCD_RST_DDR = 1;
	LCD_RST = 0;
	
	delay();
	delay();
	
	LCD_RST = 1;
	LCD_SID_DDR = 1;
	
	LCD_Cls();
	
	PWMDR0 = 230;
}


void Write(unsigned char uComm,unsigned char uData)
{
	unsigned char i;
	byte1 = uComm;
	byte2 = uData & 0x0F0;
	byte3 = uData << 4;
	DisableInterrupts;
	LCD_CLK = 0;
	asm nop;asm nop;
	
	LCD_CS = 1;
	asm nop;asm nop;
	
	for(i = 0; i < 8; i++)
	{
		if(byte1 & 0x080)
			LCD_SID = 1;
		else
			LCD_SID = 0;
		byte1 = byte1 * 2;
		asm nop;asm nop;
		LCD_CLK = 1;
		asm nop;asm nop;
		LCD_CLK = 0;
		asm nop;asm nop;
	}
	
	for(i = 0; i < 8; i++)
	{
		if(byte2 & 0x080)
			LCD_SID = 1;
		else
			LCD_SID = 0;
		byte2 = byte2 * 2;
		asm nop;asm nop;
		LCD_CLK = 1;
		asm nop;asm nop;
		LCD_CLK = 0;
		asm nop;asm nop;
	}
	
	for(i = 0; i < 8; i++)
	{
		if(byte3 & 0x080)
			LCD_SID = 1;
		else
			LCD_SID = 0;
		byte3 = byte3 * 2;
		asm nop;asm nop;
		LCD_CLK = 1;
		asm nop;asm nop;
		LCD_CLK = 0;
		asm nop;asm nop;
	}
	
	EnableInterrupts;	
}


void delay()
{
	unsigned char t;
	for(t = 0; t < 100; t++)
		;
}

void SetLight(unsigned char bRate)
{
	PWMDR0 = bRate;
}

void Str(unsigned char *p)
{
	while(*p)
	{

		Write(0x0FA,*p);
		delay();
		p++;
	}
}

void LCD_Cls(void)
{
	unsigned char i;
	Write(0x0F8,1);
	for(i = 0; i < 50; i++)
		delay();
}

void LCD_RstAdd(void)
{
	unsigned char i;
	Write(0x0F8,2);
	for(i = 0; i < 50; i++)
		delay();
}

void LCD_TurnOn(void)
{
	Write(0x0F8,0x0C);
	delay();
}

void LCD_SetAdd(char Add)
{
	char temp;
	temp = Add >> 3;
	if(temp == 1)
	{
		Add += 0x008;
	}
	else if(temp == 2)
	{
		Add -= 0x008;
	}	
	Add |= 0x80;
	Write(0x0F8,Add);
	delay();
}

void LCD_DrawNum(char xadd,char yadd,unsigned int num)
{
	char Add;
	char i = 5;
	DisBuf[6] = 0;
	switch(yadd)
	{
		case 0:
			Add = 0x000;
			break;
		case 1:
			Add = 0x008;
			break;
		case 2:
			Add = 0x010;
			break;
		case 3:
			Add = 0x018;
			break;
		default:
			Add = 0x000;
			break;
	}
	do
	{
		if(num == 0 && i != 5)
			DisBuf[i] = ' ';
		else
			DisBuf[i] = num % 10 + '0';
		
		num = num / 10;
		i--;
	}while(i);
	
	Add += xadd & 0x07;
	LCD_SetAdd(Add);
	Str(DisBuf + 1);
}

void LCD_Reverse(char nLine)
{
	char i;
	for(i = 0; i< 4 ; i++)
	{
		LCD_SetAdd(7 + i * 8);
		Str("  ");
	}
	LCD_SetAdd(nLine * 8 + 7);
	Str("<<");	
}

void LCD_DrawTimer(unsigned int t1)
{

	char i = 5;
	do
	{
		if(t1 == 0 && i != 5 )
			DisBuf[i] = ' ';
		else
			DisBuf[i] = t1 % 10 + '0';
		
		t1 = t1 / 10;
		i--;
	}while(i);
	
	if(DisBuf[5] == '0' && DisBuf[4] == ' ')
		DisBuf[4] = '0';
		
	DisBuf[6] = DisBuf[5];
	DisBuf[5] = '.';
	
	DisBuf[7] = 0;

	
	Str(DisBuf + 1);	
};

⌨️ 快捷键说明

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