黄金会员 
 
主题
回帖0
积分8163
阅读权限40
注册时间2009-1-13
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
HY12864.C  
 
这个是c51的 可以直接用 
 
    
 
/*******************************************************************************   
功能:液晶HY12864T2显示。   
说明:显示两行字符串,words1[],words2[]。   
制作:电子科大huang_api@sina.com   
*******************************************************************************/    
#include <string.h>     
#include <reg52.h>     
#include <intrins.h>     
#include <math.h>     
    
#define uchar unsigned char      
#define uint unsigned int      
     
///////控制引脚RS为P32. RW为P33. E为P34//////////     
sbit RS = P3^2;         
sbit RW = P3^3;    
sbit E = P3^4;    
    
uchar code length[] = {"0123456789 ."};    
uchar code words1[] = {"信号源"};    
uchar code words2[] = {"电压:     V"};    
uchar code words3[] = {"电流:     A"};    
uchar code words4[] = {""};    
/****************************延时函数***************************   
名称:delay()   
输入:uchar m   
输出:无   
***************************************************************/    
void delay(uchar ms)    
{                           // 延时子程序     
    uchar i;    
    while(ms--)    
    {    
        i=250;    
        while(i--)    
        {    
            _nop_();    
            _nop_();    
            _nop_();    
            _nop_();    
            _nop_();    
        }    
    }    
}    
    
    
/******************************LCD状态检测函数**************************************   
名称:lcd_state()   
功能:lcd状态忙碌判断   
参数:P2口为数据口   
输入:无   
输出:返回状态标志state位   
************************************************************************************/    
bit lcd_state(void)    
{                           // 测试LCD忙碌状态     
    bit state;    
    RS = 0;//command     
    RW = 1;//read     
    E = 1;    
    _nop_();    
    _nop_();    
    _nop_();    
    _nop_();    
    state = (bit)(P2 & 0x80);    
    E = 0;    
    return state;       
}    
    
    
/******************************LCD指令写入函数**************************************   
名称:lcd_w_cmd()   
功能:写指令到LCD数据口P2   
参数:P2口为数据口   
输入:待写指令   
输出:无   
************************************************************************************/    
void lcd_w_cmd(uchar cmd)    
{                           // 写入指令数据到LCD     
    while(lcd_state());    
    RS = 0;//command     
    RW = 0;//write       
    P2 = cmd;    
    _nop_();    
    _nop_();    
    E = 1;    
    _nop_();    
    _nop_();    
    _nop_();    
    _nop_();    
    E = 0;          
}    
    
/******************************LCD状态检测函数**************************************   
名称:lcd_adder()   
功能:lcd显示地址设置   
参数:P2口为数据口   
输入:一字节待设置的显示地址长度0~15   
输出:无   
************************************************************************************/    
void lcd_adder(uchar adder)    
{                           //设定显示位置     
    lcd_w_cmd(adder);    
}    
    
    
/******************************LCD数据写入函数**************************************   
名称:lcd_w_date()   
功能:写数据到LCD数据口P2   
参数:P2口为数据口   
输入:一字节待写显示数据   
输出:无   
************************************************************************************/    
void lcd_w_date(uchar dat)      
{                           //写入字符显示数据到LCD     
    while(lcd_state());    
    RS = 1;//date     
    RW = 0;//write     
    P2 = dat;    
    _nop_();    
    _nop_();    
    E = 1;    
    _nop_();    
    _nop_();    
    _nop_();    
    _nop_();    
    E = 0;      
}    
    
    
/******************************LCD初始化函数**************************************   
名称:lcd_init()   
功能:初始化LCD模块   
参数:初始化指令   
输入:无   
输出:无   
************************************************************************************/    
void lcd_init(void)    
{                           //LCD初始化设定     
    lcd_w_cmd(0x38);            //     
    delay(1);    
    lcd_w_cmd(0x0c);            //     
    delay(1);    
    lcd_w_cmd(0x06);            //     
    delay(1);    
    lcd_w_cmd(0x01);            //清除LCD的显示内容     
    delay(1);    
}    
    
/******************************LCD显示函数**************************************   
名称:lcd_display()   
功能:显示words1[],words2[]字符串!   
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址   
说明:word为待显示字符串首地址;dder为显示起始地址;str为起始显示字符的顺序位置;len_s为显示长度   
输入:待显示的数据的指针,显示地址   
输出:无   
*******************************************************************************/    
lcd_display(uchar *word,uchar adder,uchar str,uchar len_s)    
{    
        lcd_adder(adder);   //0~7     
    while(str<len_s)    
    {    
        if(word[str]=='\0')break;    
            else                    // 显示字符     
            {   lcd_w_date(word[str]);    
                str++;    
            }    
    }    
    
}    
    
    
/******************************显示字符长度测量函数*****************************   
名称:words_len()   
功能:测试显示字符串长度!   
参数:待测字符串地址为输入参数   
输入:待测试字符串的指针   
输出:字符串长度   
*******************************************************************************/    
uchar words_len(uchar *s)    
{    
    return(strlen(s));    
}    
    
    
    
/******************************显示一个单一字符函数*****************************   
名称:word_display()   
功能:显示单一一个字符   
参数:待测显示字符地址为输入参数   
输入:待显示字符的地址   
输出:无   
*******************************************************************************/    
word_display(uchar *c,uchar adder_c)    
{    
        lcd_adder(adder_c);    
        _nop_();    
        _nop_();    
        lcd_w_date(*c);    
    
}    
///////////////////////////MAIN函数//////////////////////////////////     
main()    
{    
    uchar len=0;    
    uint vol=12,ele=3;    
    uchar dat[4]={0,'.',0,'\0'};    
    lcd_init();             // 初始化LCD                
    delay(10);    
    lcd_display(&words1,0x81,0,strlen(words1));  //LCD显示     
    lcd_display(&words2,0x90,0,strlen(words2));    
    lcd_display(&words3,0x88,0,strlen(words3));    
    
    len=words_len(&words1);    
    ele*=10;    
    if(vol>9)    
        {    
            dat[0]=length[vol/10];    
            dat[2]=length[vol%10];    
            lcd_display(&dat,0x93,0,strlen(dat));    
        }    
    else //if(vol<10)     
        {    
            dat[0]=length[vol];    
            dat[2]=length[0];    
            lcd_display(&dat,0x93,0,strlen(dat));    
        }    
    if(ele>9)    
        {    
            dat[0]=length[ele/10];    
            dat[2]=length[ele%10];    
            lcd_display(&dat,0x8b,0,strlen(dat));    
    
        }    
    
    else// if(ele<10)     
        {    
            dat[0]=length[ele];    
            dat[2]=length[0];    
            lcd_display(&dat,0x8b,0,strlen(dat));           
        }    
    
    while(1) ;              //waiting      
}   
 
/*******************************************************************************  
功能:液晶HY12864T2显示。  
说明:显示两行字符串,words1[],words2[]。  
制作:电子科大huang_api@sina.com  
*******************************************************************************/  
#include <string.h>  
#include <reg52.h>  
#include <intrins.h>  
#include <math.h>  
  
#define uchar unsigned char   
#define uint unsigned int   
   
///////控制引脚RS为P32. RW为P33. E为P34//////////  
sbit RS        = P3^2;                  
sbit RW = P3^3;  
sbit E = P3^4;  
  
uchar code length[] = {"0123456789 ."};  
uchar code words1[] = {"信号源"};  
uchar code words2[] = {"电压:     V"};  
uchar code words3[] = {"电流:     A"};  
uchar code words4[] = {""};  
/****************************延时函数***************************  
名称:delay()  
输入:uchar m  
输出:无  
***************************************************************/  
void delay(uchar ms)  
{                                                        // 延时子程序  
        uchar i;  
        while(ms--)  
        {  
                i=250;  
                while(i--)  
                {  
                        _nop_();  
                        _nop_();  
                        _nop_();  
                        _nop_();  
                        _nop_();  
                }  
        }  
}  
  
  
/******************************LCD状态检测函数**************************************  
名称:lcd_state()  
功能:lcd状态忙碌判断  
参数:P2口为数据口  
输入:无  
输出:返回状态标志state位  
************************************************************************************/  
bit lcd_state(void)  
{                                                        // 测试LCD忙碌状态  
        bit state;  
        RS = 0;//command  
        RW = 1;//read  
        E = 1;  
        _nop_();  
        _nop_();  
        _nop_();  
        _nop_();  
        state = (bit)(P2 & 0x80);  
        E = 0;  
        return state;          
}  
  
  
/******************************LCD指令写入函数**************************************  
名称:lcd_w_cmd()  
功能:写指令到LCD数据口P2  
参数:P2口为数据口  
输入:待写指令  
输出:无  
************************************************************************************/  
void lcd_w_cmd(uchar cmd)  
{                                                        // 写入指令数据到LCD  
        while(lcd_state());  
        RS = 0;//command  
        RW = 0;//write          
        P2 = cmd;  
        _nop_();  
        _nop_();  
        E = 1;  
        _nop_();  
        _nop_();  
        _nop_();  
        _nop_();  
        E = 0;                  
}  
  
/******************************LCD状态检测函数**************************************  
名称:lcd_adder()  
功能:lcd显示地址设置  
参数:P2口为数据口  
输入:一字节待设置的显示地址长度0~15  
输出:无  
************************************************************************************/  
void lcd_adder(uchar adder)  
{                                                        //设定显示位置  
        lcd_w_cmd(adder);  
}  
  
  
/******************************LCD数据写入函数**************************************  
名称:lcd_w_date()  
功能:写数据到LCD数据口P2  
参数:P2口为数据口  
输入:一字节待写显示数据  
输出:无  
************************************************************************************/  
void lcd_w_date(uchar dat)          
{                                                        //写入字符显示数据到LCD  
        while(lcd_state());  
        RS = 1;//date  
        RW = 0;//write  
        P2 = dat;  
        _nop_();  
        _nop_();  
        E = 1;  
        _nop_();  
        _nop_();  
        _nop_();  
        _nop_();  
        E = 0;          
}  
  
  
/******************************LCD初始化函数**************************************  
名称:lcd_init()  
功能:初始化LCD模块  
参数:初始化指令  
输入:无  
输出:无  
************************************************************************************/  
void lcd_init(void)  
{                                                        //LCD初始化设定  
        lcd_w_cmd(0x38);                        //  
        delay(1);  
        lcd_w_cmd(0x0c);                        //  
        delay(1);  
        lcd_w_cmd(0x06);                        //  
        delay(1);  
        lcd_w_cmd(0x01);                        //清除LCD的显示内容  
        delay(1);  
}  
  
/******************************LCD显示函数**************************************  
名称:lcd_display()  
功能:显示words1[],words2[]字符串!  
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址  
说明:word为待显示字符串首地址;dder为显示起始地址;str为起始显示字符的顺序位置;len_s为显示长度  
输入:待显示的数据的指针,显示地址  
输出:无  
*******************************************************************************/  
lcd_display(uchar *word,uchar adder,uchar str,uchar len_s)  
{  
                lcd_adder(adder);        //0~7  
        while(str<len_s)  
        {  
                if(word[str]=='\0')break;  
                        else                                        // 显示字符  
                        {        lcd_w_date(word[str]);  
                                str++;  
                        }  
        }  
  
}  
  
  
/******************************显示字符长度测量函数*****************************  
名称:words_len()  
功能:测试显示字符串长度!  
参数:待测字符串地址为输入参数  
输入:待测试字符串的指针  
输出:字符串长度  
*******************************************************************************/  
uchar words_len(uchar *s)  
{  
        return(strlen(s));  
}  
  
  
  
/******************************显示一个单一字符函数*****************************  
名称:word_display()  
功能:显示单一一个字符  
参数:待测显示字符地址为输入参数  
输入:待显示字符的地址  
输出:无  
*******************************************************************************/  
word_display(uchar *c,uchar adder_c)  
{  
                lcd_adder(adder_c);  
                _nop_();  
                _nop_();  
                lcd_w_date(*c);  
  
}  
///////////////////////////MAIN函数//////////////////////////////////  
main()  
{  
        uchar len=0;  
        uint vol=12,ele=3;  
        uchar dat[4]={0,'.',0,'\0'};  
        lcd_init();                                // 初始化LCD                          
        delay(10);  
        lcd_display(&words1,0x81,0,strlen(words1));  //LCD显示  
        lcd_display(&words2,0x90,0,strlen(words2));  
        lcd_display(&words3,0x88,0,strlen(words3));  
  
        len=words_len(&words1);  
        ele*=10;  
        if(vol>9)  
                {  
                        dat[0]=length[vol/10];  
                        dat[2]=length[vol%10];  
                        lcd_display(&dat,0x93,0,strlen(dat));  
                }  
        else //if(vol<10)  
                {  
                        dat[0]=length[vol];  
                        dat[2]=length[0];  
                        lcd_display(&dat,0x93,0,strlen(dat));  
                }  
        if(ele>9)  
                {  
                        dat[0]=length[ele/10];  
                        dat[2]=length[ele%10];  
                        lcd_display(&dat,0x8b,0,strlen(dat));  
  
                }  
  
        else// if(ele<10)  
                {  
                        dat[0]=length[ele];  
                        dat[2]=length[0];  
                        lcd_display(&dat,0x8b,0,strlen(dat));                  
                }  
  
        while(1) ;                                //waiting   
} |   
 
 
 
 |