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