如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。

如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。,第1张

#define uchar unsigned char

#define uint unsigned int

#define iDat 1 //数据标志

#define iCmd 0 //指令标志

#define LCDb_RS 0x20 //定义四个控制引脚

#define LCDb_RW 0x40

#define LCDb_E 0x80

#define LCDb_RST 0x04

#define LCDb_L1 0x80 //第一行的地址

#define LCDb_L2 0x90 //第二行的地址

#define LCDb_L3 0x88 //第三行的地址

#define LCDb_L4 0x98 //第四行的地址

#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制 *** 作

#define LCDb_SET_RW P1OUT|=LCDb_RW

#define LCDb_SET_E P1OUT|=LCDb_E

#define LCDb_SET_RST P8OUT|=LCDb_RST

#define LCDb_CLR_RS P1OUT&=~LCDb_RS

#define LCDb_CLR_RW P1OUT&=~LCDb_RW

#define LCDb_CLR_E P1OUT&=~LCDb_E

#define LCDb_CLR_RST P8OUT&=~LCDb_RST

#define LCDb_DO P4OUT //输出数据总线端口定义

#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,58字符

#define LCDb_BASCMD 0x30 // 基本指令集

#define LCDb_CLS 0x01 // 清屏

#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM内容

#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动

#define LCDb_C2L 0x10 // 光标左移

#define LCDb_C2R 0x14 // 光标右移

#define LCDb_D2L 0x18 // 屏幕左移

#define LCDb_D2R 0x1C // 屏幕又移

#define LCDb_ON 0x0C // 打开显示

#define LCDb_OFF 0x08 // 关闭显示

unsigned char RXData;

unsigned char Result[5]; //整数转化成字符串,给LCD显示

/

函数名称: Delayms

功 能: 延时指定毫秒(8M晶振)

参 数: MS--延时的毫秒数

返回值 : 无

/

void Delayms(uint MS)

{

uint i,j;

for( i=0;i<MS;i++)

for(j=0;j<1141;j++);

}

/

函数名称: Delayus

功 能: 延时指定微秒(8M晶振)

参 数: US--延时的微秒数(大约,不是很精确,MS越大越准确)

返回值 : 无

/

void Delayus(uint US)

{

uint i;

US=US5/4;

for( i=0;i<US;i++);

}

void LCD12864_portini()

{

P1DIR=0xFF;

P4DIR=0xFF;

P8DIR=0xFF; //Trig =P8^3输出;

P8OUT |=LCDb_RST;

// P1OUT=0xFF;

}

/

函数名称: LCD12864_sendbyte

功 能: 向12864液晶写入一个字节数据或者指令

参 数: DatCmd--为iDat时是数据,为iCmd时是指令

dByte--为写入12864的数据或者指令

返回值 : 无

/

void LCD12864_sendbyte(uchar DatCmd, uchar dByte)

{

if (DatCmd == iCmd) //指令 *** 作

LCDb_CLR_RS;

else

LCDb_SET_RS;

LCDb_CLR_RW; //写 *** 作

LCDb_SET_E;

LCDb_DO = dByte; //写入数据

//Delayus(500);

Delayms(1);

LCDb_CLR_E;

}

/

函数名称: LCD12864_sendstr

功 能: 向12864液晶写入一个字符串

参 数: ptString--字符串指针

返回值 : 无

/

void LCD12864_sendstr(uchar ptString)

{

while((ptString)!='\0') //字符串未结束一直写

{

LCD12864_sendbyte(iDat, ptString++);

}

}

/

函数名称: LCD12864_clear

功 能: 12864液晶清屏

参 数: 无

返回值 : 无

/

void LCD12864_clear(void)

{

LCD12864_sendbyte(iCmd,LCDb_CLS);

Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!

}

/

函数名称: LCD12864_gotoXY

功 能: 移动到指定位置

参 数: Row--指定的行

Col--指定的列

返回值 : 无

/

void LCD12864_gotoXY(uchar Row, uchar Col)

{

switch (Row) //选择行

{

case 2:

LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列

case 3:

LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列

case 4:

LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列

default:

LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列

}

}

/

函数名称: LCD12864_initial

功 能: 12864液晶初始化

参 数: 无

返回值 : 无

/

void LCD12864_initial(void)

{

Delayms(100); // 等待内部复位

LCD12864_portini(); //端口初始化

LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定

LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示

LCD12864_clear(); //清屏

LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定

}

void Int_char(int data)

{

if(data/1000)

{

Result[0]=data/1000+'0';

Result[1]=data/100%10+'0';

Result[2]=data/10%10+'0';

Result[3]=data%10+'0';

Result[4]=0;

}

else if(data/100)

{

Result[0]=data/100+'0';

Result[1]=data/10%10+'0';

Result[2]=data%10+'0';

Result[3]=0;

Result[4]=0;

}

else if(data/10)

{

Result[0]=data/10%10+'0';

Result[1]=data%10+'0';

Result[2]=0;

Result[3]=0;

Result[4]=0;

}

else

{

Result[0]=data%10+'0';

Result[1]=0;

Result[2]=0;

Result[3]=0;

Result[4]=0;

}

}

这使msp430单片机的程序,只要在主函数中调用函数,就是调用这个函数Int_char(tmp);每一次循环调用一次,这样可以实时显示这个变化温度数值

LCD12864_gotoXY(2,4);

LCD12864_sendstr(" ");

LCD12864_gotoXY(1,0); //第1行,第1列显示

LCD12864_sendstr("正在检测");

LCD12864_gotoXY(2,0); //第2行,第1列显示

LCD12864_sendstr("距离是:");

Int_char(tmp);

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

sbit CS=P2^5; //片选信号

sbit SID=P2^6; //数据信号

sbit SCLK=P2^7; //时钟信号

sbit RST=P2^2; //复位信号

sbit CH = P2^4; //并行、串行选择信号

/

名称 : delay()

功能 : 延时,延时时间为 100us t。这是通过软件延时,有一定误差。

输入 : t

输出 : 无

/

void delay(unsigned int t)

{

unsigned int i,j;

for(i=0; i<t; i++)

for(j=0; j<10; j++);

}

/

名称 : sendbyte()

功能 : 按照液晶的串口通信协议,发送数据

输入 : zdata

输出 : 无

/

void sendbyte(unsigned char zdata)

{

unsigned int i;

for(i=0; i<8; i++)

{

if((zdata << i) & 0x80)

{

SID = 1;

}

else

{

SID = 0;

}

SCLK = 0;

SCLK = 1;

}

}

/

名称 : write_com()

功能 : 写串口指令

输入 : cmdcode

输出 : 无

/

void write_com(unsigned char cmdcode)

{

CS = 1;

sendbyte(0xf8);

sendbyte(cmdcode & 0xf0);

sendbyte((cmdcode << 4) & 0xf0);

delay(2);

}

/

名称 : write_data()

功能 : 写串口指令

输入 : cmdcode

输出 : 无

/

void write_data(unsigned char Dispdata)

{

CS = 1;

sendbyte(0xfa);

sendbyte(Dispdata & 0xf0);

sendbyte((Dispdata << 4) & 0xf0);

delay(2);

}

/

名称 : lcdinit()

功能 : 初始化函数

输入 : cmdcode

输出 : 无

/

void lcdinit()

{

RST = 0;

delay(100);

RST = 1;

delay(20000);

write_com(0x30);

delay(50);

write_com(0x0c);

delay(50);

}

/

名称 : hzkdis()

功能 : 显示字符串

输入 : s

输出 : 无

/

void hzkdis(unsigned char code s)

{

while(s > 0)

{

write_data(s);

s++;

delay(50);

}

}

/

名称 : Test()

功能 : 显示子函数

输入 : 无

输出 : 无

/

void Test()

{

write_com(0x03);

delay(50);

write_com(0x81);

hzkdis(" HOT-51");

write_com(0x91);

hzkdis("单片机开发板");

write_com(0x89);

hzkdis(" ");

write_com(0x98);

hzkdis(" 东流电子");

}

/

名称 : Main()

功能 : 主函数

输入 : 无

输出 : 无

/

void Main()

{

CH = 0;

delay(1);

lcdinit();

delay(10);

while(1)

{

Test();

delay(5000);

}

}

以上就是关于如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。全部的内容,包括:如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。、c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9514810.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存