📄 lcd.c
字号:
/************************************************************************************
本程序仅供广大电子爱好者制作MP3学习和参考使用,不得用于其它用途,否则后果自负
LCD.C File
Created by Computer-lov. Date: 2005.3.19
Last edited date: 2005.5.31
version 1.1
Copyright (c) 2005 Computer-lov
All rigths reserved
**************************************************************************************/
#include "AT89C51SND1C.H"
#include "hardware.h"
#include "LCD.H"
#include "file_system.h"
#include "unicode.h"
unsigned char black; //是否反显
////////////////////////// 等待LCD忙碌 ////////////////////////////////////////////////////////
void wait_LCD_busy(void)
{
do
{
LCD_DATA=0xFF;
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
}while(LCD_DATA&0x80);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// 写一个字节显示数据 ///////////////////////////////
void write_LCD_data(unsigned char lcd_data)
{
wait_LCD_busy();
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
LCD_DATA=lcd_data;
LCD_EN=0;
LCD_DATA=0xFF;
}
//////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
/*unsigned char read_LCD_data(void)
{
unsigned char read_data;
wait_LCD_busy();
LCD_DATA=0xFF;
LCD_RS=1;
LCD_RW=1;
LCD_EN=1;
read_data=LCD_DATA;
LCD_EN=0;
return read_data;
}*/
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// 写LCD 指令 ////////////////////////////////////////////////////
void write_LCD_command(unsigned char command)
{
wait_LCD_busy();
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
LCD_DATA=command;
LCD_EN=0;
LCD_DATA=0xFF;
}
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// LCD清屏 ////////////////////////////////////////////////////////////
void LCD_cls(void)
{
write_LCD_command(0x01);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// LCD 从第一行开始显示 ///////////////////////////////////////////
void LCD_go_home(void)
{
write_LCD_command(0x80);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// LCD 换到第二行开始 /////////////////////////////////////////////
void LCD_line_feed(void)
{
write_LCD_command(0x90);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// LCD 初始化 //////////////////////////////////////////////////////
void LCD_initial(void)
{
wait_LCD_busy();
write_LCD_command(0x18);
write_LCD_command(0x01);
write_LCD_command(0x0C);
LCD_cls();
black=0;
prints("开机......");
write_LCD_command(0x8E);
write_LCD_data(' ');
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// LCD显示一字符串 ////////////////////////////////////////////////
void prints(unsigned char * temp)
{
while((*temp)!='\0')
{
write_LCD_data(*temp);
temp++;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////// LCD显示一个长整数 /////////////////////////////////////////////////
void printf(unsigned long int x)
{
signed char i;
unsigned char display_buffer[10];
display_buffer[10]=0;
for(i=9;i>=0;i--)
{
display_buffer[i]='0'+x%10;
x/=10;
}
for(i=0;i<9;i++)
{
if(display_buffer[i]!='0')break;
}
for(;i<10;i++)write_LCD_data(display_buffer[i]);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////// 将Unicode编码转换为 GB编码 ///////////////////////////////////
void change_code(unsigned int * x)
{
unsigned int a,b,c;
if(((*x)>=0x0020)&&((*x)<=0x007E)){if((*x)>='a'&&(*x)<='z')(*x)-='a'-'A';*x+=0xA380;return;}
if((*x)<Unicode[0][0]){*x=0x3F3F;return;}
if((*x)>Unicode[UNICODE_MAX-1][0]){*x=0x3F3F;return;}
a=0;
b=UNICODE_MAX-1;
do //采用二分查表法,因为该表为顺序表
{
c=(a+b)/2;
if((*x)==Unicode[c][0]){*x=Unicode[c][1];return;}
if((*x)<Unicode[c][0]){b=(a+b)/2;}
else {a=(a+b+1)/2;}
}while(a!=b);
if((*x)==Unicode[a][0]){*x=Unicode[a][1];return;}
*x=0x3F3F; //如果找不到,则显示??
}
////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -