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

📄 lcd.c

📁 基于at89c51snd1c的硬盘MP3播放器
💻 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 + -