📄 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 + -