字符型液晶12864(ST7290)驅(qū)動(dòng)模塊
掃描二維碼
隨時(shí)隨地手機(jī)看文章
/*******************************************************************************
** 測(cè)試芯片:M16
** 晶振 : 8.000000
** 名稱 : ST7290驅(qū)動(dòng)模塊
** 總結(jié) : 主要是要在void LCM_write_byte( uchar byte )此函數(shù)后加一個(gè)延時(shí)。最小5us
** 說(shuō)明 : 本驅(qū)動(dòng)配合延時(shí)驅(qū)動(dòng) delay.h, 用到string.h
** 用到 uchar 和 uint 和 long int 和 float 類型 , 請(qǐng)注意使用
*******************************************************************************/
#ifndef _LCM12864_H_
#define _LCM12864_H_
#include "DELAY.H"
#include
/*------LPC2148與LCM連接信息-----------------------------------------
PC_0 -> CS
PC_1 -> SID
PC_2 -> SCLK
RESET -> 懸空
PSB -> 低電平
------------------------------------------------------------------*/
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#define uchar unsigned char
#define uint unsigned int
#define CS_SET PORTC |= (1 << 0) /******** 第四腳CS -- PC_0 **********/
#define CS_CLR PORTC &=~ (1 << 0)
#define SID_SET PORTC |= (1 << 1) /******** 第五腳SID -- PC_1 **********/
#define SID_CLR PORTC &=~ (1 << 1)
#define SCLK_SET PORTC |= (1 << 2) /******** 第六腳SCLK -- PC_2 **********/
#define SCLK_CLR PORTC &=~ (1 << 2)
#define PORT_DDR_OUT { DDRC = ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 2 ); } //在LCM_init()函數(shù)里使用
//---------------------------------------------------------------------------------
/****************************函數(shù)聲明****************************************/
void long_to_string( long int dataint, char *p ); //整型數(shù)據(jù)轉(zhuǎn)化為字符串
void float_2_string( float dataf, char *datastr, uchar p ); // 浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)化為字符串
void LCM_write_byte( uchar byte ); //單線寫(xiě)一個(gè)字節(jié)
void LCM_write_command( uchar command ); //寫(xiě)指令
void LCM_write_data( uchar data ); //寫(xiě)數(shù)據(jù)
void LCM_init( void ); //LCM初始化
void LCM_set_rc( uchar r, uchar c ); //設(shè)置液晶顯示位置
void LCM_write_string( uchar r, uchar c, char *string ); //寫(xiě)中文漢字串
void LCM_write_datalongint( uchar r, uchar c, long int datalongint ); //寫(xiě)整數(shù)
void LCM_write_datafloat( uchar r, uchar c, float dataf, uchar p ); //寫(xiě)浮點(diǎn)型數(shù)據(jù)
#endif
#define _ARMLCM12864_C_
#include "LCM12864.H"
/*****************************************
** 將一個(gè)整型數(shù)據(jù)轉(zhuǎn)化為字符串
** 入口參數(shù) 要轉(zhuǎn)換的整型數(shù): dataint, 數(shù)組p[10]
** 改變思路:整數(shù) -->字符串-->加字符串結(jié)束標(biāo)志
** 可以轉(zhuǎn)換小于0的整數(shù)
*****************************************/
void long_to_string( long int dataint, char *p )
{
long int datainttmp;
char *p1; //指向轉(zhuǎn)換成為數(shù)組時(shí)用到
char datachar1[10];
char datachar2[10];
uchar n = 0; //取整型數(shù)據(jù)的位數(shù)
uchar i = 0;
uchar k1 = 0; //取字符個(gè)數(shù)
uchar k2 = 0; //取字符個(gè)數(shù)
if( dataint >= 0 )
datainttmp = ( long int )dataint;
else datainttmp = ( long int )dataint * ( -1 );
p1 = datachar2;
while( datainttmp != 0 )
{
datachar1[n++] = ( datainttmp % 10 ) + 0x30; //轉(zhuǎn)換為字符并取得這個(gè)整型數(shù)據(jù)的位數(shù) n
datainttmp /= 10;
}
if( dataint > 0 ) //如果要轉(zhuǎn)換的整型數(shù)據(jù)>0
{
k1 = n - 1;
k2 = n;
for( i = 0; i < k2; i++, k1-- )
{
datachar2[k1] = datachar1[i]; //將數(shù)字符串倒過(guò)來(lái)
}
datachar2[n] = '