c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了!

c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了!,第1张

#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);

}

}

PC2~PC5为JTAG端口,所以使用PC端口时要特别小心。你尝试一下:程序里面要通过 MCUCSR = 0x80;//禁止JTAG;在下载程序时,把熔丝位中的“使能JTAG接口[JATGEN=0]”的勾去掉。(程序和熔丝位都要改哦,你先看看行不行,如果不行我再帮你看看程序!)

您好,您可以用以下程序来实现~ main() { uchar xdata addx=0; //初始值指向U6的开始,用于读取U6 //用于存放已显示汉字的个数 uchar hzdot;//用于存放调整好的汉字点阵的数组首地址,直接用于显示的

绝对好用的串口程序

sbit SID=P2^1; //12864数据

sbit SCLK=P2^2; //12864时钟

init()

{

write(0,0x30); //8 位介面,基本指令集

write(0,0x0c); //显示打开,光标关,反白关

write(0,0x01); //清屏,将DDRAM的地址计数器归零

delaynms(10);

write(0,0x80); for(i=0;i<16;i++) write(1,datas11[i]);

write(0,0x90); for(i=0;i<16;i++) write(1,datas2[i]);

write(0,0x88); for(i=0;i<16;i++) write(1,datas3[i]);

write(0,0x98); for(i=0;i<16;i++) write(1,datas4[i]);

}

/12864/

void delaynms(unsigned int di) //延时

{

unsigned int da,db;

for(da=0;da<di;da++)

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

}

void sendbyte(unsigned char bbyte) //发送一个字节

{

unsigned char i;

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

{

SID=bbyte&0x80; //取出最高位

SCLK=1;

SCLK=0;

bbyte<<=1; //左移

}

}

void write(bit start, unsigned char ddata) //写指令或数据

{

unsigned char start_data,Hdata,Ldata;

if(start==0) start_data=0xf8; //写指令

else start_data=0xfa; //写数据

Hdata=ddata&0xf0; //取高四位

Ldata=(ddata<<4)&0xf0; //取低四位

sendbyte(start_data); //发送起始信号

delaynms(5); //延时是必须的

sendbyte(Hdata); //发送高四位

delaynms(1); //延时是必须的

sendbyte(Ldata); //发送低四位

delaynms(1); //延时是必须的

}

/void lcdinit(void) //初始化LCD

{

delaynms(10); //启动等待,等LCM讲入工作状态

//PSB=0; ; //串口驱动模式

// RESET=0; delaynms(1); RESET=1; // 复位LCD

// CS=1;

write(0,0x30); //8 位介面,基本指令集

write(0,0x0c); //显示打开,光标关,反白关

write(0,0x01); //清屏,将DDRAM的地址计数器归零

}/

你要显示的是的话,就要用到扩充指令,lcd_init是基本指令,

write_cmd(0x36);

write_cmd(0x3E);

write_cmd(0x01);

还有你display_bmp()程序中下半屏的循环显示码错字了

for(i=0;i<0;i++)应该是

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

clear_GDROM();这是个清屏的子函数吗,前面有的呀。

clear_GDROM(); 这显示出了,

下面还清屏当然就没有了,在显示前已经有一行了,clear_GDROM();

为什么显示后还要清屏呢?

以上就是关于c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了!全部的内容,包括:c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了!、基于ATMEGA16的12864程序,想做个简单显示程序,但是不知道程序出了什么问题。我用的是PC口。、12864是怎么把数组中内容显示出来的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10626461.html

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

发表评论

登录后才能评论

评论列表(0条)

保存