?? lcd.c
字號(hào):
#define _LCD_C_
#include "LCD.h"
#include <iom16v.h>
//==========================================
//函數(shù)名稱(chēng):液晶模塊使能
//函數(shù)作用: 使能液晶
//入口參數(shù): 無(wú)
//返回類(lèi)型:無(wú)
//==========================================
void LCD_en_write(void)
{
EN_SET;
delay_nus(4);
EN_CLR;
}
//==========================================
//函數(shù)名稱(chēng):寫(xiě)指令
//函數(shù)作用:
//入口參數(shù): 液晶指令command
//返回類(lèi)型:無(wú)
//==========================================
void LCD_write_command(uchar command)
{
delay_nus( 16 );
RS_CLR;
DB &= 0X0F; //清高四位
DB |= command & 0xf0; //寫(xiě)高四位
LCD_en_write();
command=command << 4; //低四位移到高四位
DB &= 0x0f; //清高四位
DB |= command & 0xf0; //寫(xiě)低四位
LCD_en_write();
//delay_nms(2); //清屏指令時(shí)間很長(zhǎng), 保險(xiǎn)起見(jiàn),可以增加
}
//==========================================
//函數(shù)名稱(chēng):寫(xiě)數(shù)據(jù)
//函數(shù)作用:
//入口參數(shù): 數(shù)據(jù)DATA
//返回類(lèi)型:無(wú)
//==========================================
void LCD_write_data(uchar DATA)
{
delay_nus(16);
RS_SET; //RS=1
DB &= 0X0f; //清高四位
DB |= DATA&0xf0; //寫(xiě)高四位
LCD_en_write();
DATA = DATA << 4; //低四位移到高四位
DB &= 0X0f; //清高四位
DB |= DATA&0xf0; //寫(xiě)低四位
LCD_en_write();
}
//==========================================
//函數(shù)名稱(chēng):液晶初始化函數(shù)
//函數(shù)作用:
//入口參數(shù): 無(wú)
//返回類(lèi)型:無(wú)
//==========================================
void LCD_init( void )
{
DB_DDR_OUT;
LCD_write_command(0x28);
LCD_en_write(); //********總結(jié)這里一定要加這液晶使能*********
delay_nus(20);
LCD_write_command(0x28); //4位顯示
LCD_write_command(0x0c); //顯示開(kāi)
LCD_write_command(0x01); //清屏
delay_nms(5); //延時(shí)一定要長(zhǎng)
}
//==========================================
//函數(shù)名稱(chēng):寫(xiě)地址
//函數(shù)作用:
//入口參數(shù): 行位置r, 列位置c
//返回類(lèi)型:無(wú)
//==========================================
void LCD_set_rc( uchar r, uchar c )
{
uchar address;
if (r == 1)
address = 0x80 + c;
else if(r == 2)
address = 0xc0 + c;
LCD_write_command( address );
}
//==========================================
//函數(shù)名稱(chēng):寫(xiě)字符串
//函數(shù)作用: 在指定位置寫(xiě)一串字符串
//入口參數(shù): 行位置r, 列位置c, 字符串*s
//返回類(lèi)型:無(wú)
//==========================================
void LCD_write_string(uchar r, uchar c, uchar *s)
{
LCD_set_rc( r, c ); //寫(xiě)地址
while( *s ) // 寫(xiě)顯示字符
{
LCD_write_data( *s );
s++;
}
}
void LCD_write_char(uchar r, uchar c, uchar DATA) //寫(xiě)字符
{
LCD_set_rc( r, c );
LCD_write_data( DATA );
}
//==========================================
//函數(shù)名稱(chēng):寫(xiě)字符數(shù)組
//函數(shù)作用: 在指定位置寫(xiě)一串字符串
//入口參數(shù): 行位置r, 列位置c, 字符數(shù)組chardata[], 字符個(gè)數(shù)
//返回類(lèi)型:無(wú)
//==========================================
void LCD_write_array( uchar r, uchar c, uchar array[] )
{
uchar i = 0;
while( array[i] != '\0' )
{
LCD_write_char( r, c, array[i] );
if( ++c == 16 )
{
if( r == 1 )
{
c = 0;
r = 2;
LCD_write_char( r, c, array[i] );
}
else if( r == 2 )
{
c = 0;
r = 1;
LCD_write_char( r, c, array[i] );
}
}
i++;
}
}
//返回整形數(shù)據(jù)的長(zhǎng)度
char lengh_longint( long unsigned datalongint )
{
long signed datatmp = datalongint;
uchar data_n = 0;
while( datatmp != 0 )
{
datatmp /= 10;
data_n++;
}
if( datalongint == 0 )
{
data_n = 1;
}
return data_n;
}
//==========================================
//函數(shù)名稱(chēng):顯示一個(gè)整型數(shù)據(jù)
//函數(shù)作用: 在指定位置顯示整數(shù)
//入口參數(shù): 行位置r, 列位置c, 字符數(shù)組dataint[]
//返回類(lèi)型:無(wú)
//==========================================
void LCD_write_datalongint( uchar r, uchar c, long int dataint )
{
uchar datachar1[8];
uchar datachar2[8];
uchar n = 0;
uchar i =0;
uchar k =0; //取字符個(gè)數(shù)
uchar kk = 0; //取字符個(gè)數(shù)
long int datainttmp = dataint;
while( datainttmp != 0 )
{
datachar1[n++] = ( datainttmp % 10 ) + 0x30; //轉(zhuǎn)換為字符
datainttmp /= 10;
}
if( dataint != 0 ) //*/*//*/
{
k = n - 1;
kk = n;
for( i = 0; i < kk; i++, k-- )
{
datachar2[k] = datachar1[i]; //將數(shù)字符串倒過(guò)來(lái)
}
LCD_set_rc( r, c );
for( i = 0; i < kk; i++ )
{
LCD_write_char( r, c++, datachar2[i] );
}
}
else
LCD_write_char( r, c, '0' );
}
//==========================================
//函數(shù)名稱(chēng):顯示一個(gè)實(shí)型數(shù)據(jù)
//函數(shù)作用: 在指定位置顯示實(shí)型數(shù)據(jù)
//入口參數(shù): 行位置r, 列位置c, 浮點(diǎn)型數(shù)據(jù)datafloat, 放大倍p, 倍數(shù)mm,
//返回類(lèi)型:無(wú)
//示例 :LCD_write_datafloat( 1, 2, 0.0123, 10000, 4)
//==========================================
void LCD_write_datafloat( uchar r, uchar c, float datafloat, uint p, uint mm)
{
uchar zhengshu_no = 0;
uchar whole_fact_n;
uchar xiaoshu_act_n;
uchar ling_n;
uchar i = 0;
uchar n = 0;
uchar k = 0;
uchar kk = 0;
uchar datachar1[9];
uchar datachar2[9];
uint zhengshu; //定義變量zhengshu來(lái)存放實(shí)數(shù)的整數(shù)部分
uint xiaoxhu; //定義變量xiaoshu來(lái)存放實(shí)數(shù)的小數(shù)部分
long int datawhole;
long int datawholetmp;
uchar zhengshu_n = 0; //定義整數(shù)部分整數(shù)位數(shù)
uchar xiaoshu_n = 0; //定義小數(shù)部分整數(shù)位數(shù)
uchar datawhole_n = 0; //定義實(shí)數(shù)放大后的位數(shù)
float datatemp1_f;
float datatemp2_f;
datatemp1_f = datafloat;
datatemp2_f = datafloat;
zhengshu = ( uint )datatemp1_f; //取實(shí)數(shù)的整數(shù)部分
zhengshu_n = lengh_longint( zhengshu ); //如果整數(shù)部分為0, 則只有一位整數(shù), 取整數(shù)位數(shù)
datawhole = datatemp1_f * p; //將實(shí)數(shù)放大,變成整數(shù), datawhole為放大后的數(shù)
datawhole_n = lengh_longint( datawhole ); //如果整數(shù)部分為0, datawhole_n 不一定等于小數(shù)的位數(shù)
whole_fact_n = mm + zhengshu_n; ///*/*實(shí)際
if( zhengshu == 0 )
{
xiaoshu_act_n = lengh_longint( datawhole );
ling_n = mm - xiaoshu_act_n; //如果整數(shù)為0, 小數(shù)有效位為xiaoshu_act_n
}
else xiaoshu_act_n = mm;
ling_n = mm - xiaoshu_act_n; //用ling_0記錄小數(shù)部分前面0的位數(shù)
for( i = 0; i < xiaoshu_act_n; i++ )
{
datachar1[n++] = ( datawhole % 10 ) + 0x30; //轉(zhuǎn)換為字符
datawhole /= 10;
}
k = n - 1;
kk = n; //記錄存入的個(gè)數(shù)
for( i = 0; i < kk; i++, k-- )
{
datachar2[k] = datachar1[i]; //將數(shù)字符串倒過(guò)來(lái)
}
LCD_write_datalongint( r, c, zhengshu ); //顯示整數(shù)部分
c = c + zhengshu_n;
LCD_write_char( r, c, '.' );
c++;
for( i = 0; i < ling_n; i++ )
{
LCD_write_char( r, c++, '0' );
}
for( i = 0; i < kk; i++ )
{
LCD_write_char( r, c++, datachar2[i] );
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -