黄金会员
主题
回帖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
} |
|