我想问下,用键盘控制使LCD(1602)上显示不同的图形,C语言怎么编程

我想问下,用键盘控制使LCD(1602)上显示不同的图形,C语言怎么编程,第1张

1602是字符型的液晶,只能显示字符,想显示的话,还是用12864吧。

先把12864的底层驱动写好。你写一个显示的函数,函数的参数包括显示的横坐标、纵坐标、和一个指针(指向存储数据的首地址)。检测到按键时,更改指针的指向,就可以了。

标准的一般都是这个程序

#include <reg52h>

#include <mathh>

#define lcd_data P1

sbit cs1=P2^3;

sbit cs2=P2^4;

sbit di=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

void delay(int t)

{

int i,j,k;

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

{ for(j=0;j<255;j++)

k++;}

}

void write_com_l(unsigned int command)

{

cs1=1;

rw=0;

di=0;

lcd_data=command;

e=1;

e=0;

cs1=0;

}

void write_data_l(unsigned int data0)

{

cs1=1;

rw=0;

di=1;

lcd_data=data0;

e=1;

e=0;

cs1=0;

}

void write_com_r(unsigned int command)

{

cs2=1;

rw=0;

di=0;

lcd_data=command;

e=1;

e=0;

cs2=0;

}

void write_data_r(unsigned int data0)

{

cs2=1;

rw=0;

di=1;

lcd_data=data0;

e=1;

e=0;

cs2=0;

}

void disp0()

{

unsigned int i,j;

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

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

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

{write_data_l(0xaa);

write_data_r(0xaa);

}

}

}

void disp1()

{

unsigned int i,j;

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

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

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

{write_data_l(0x55);

write_data_r(0x55);

}

}

}

void disp2()

{

unsigned int i,j;

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

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

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

{write_data_l(0x0f);

write_data_r(0x0f);

}

}

}

void disp3()

{

unsigned int i,j;

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

{write_com_l(0xb8+i);

write_com_r(0xb8+i);

write_com_l(0x40);

write_com_r(0x40);

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

{write_data_l(0xf0);

write_data_r(0xf0);

}

}

}

void init_lcd() //初始化LCD清屏

{

write_com_l(0x3e);

write_com_r(0x3e);

write_com_l(0x3f);

write_com_r(0x3f);

write_com_l(0xc0);

write_com_r(0xc0);

write_com_l(0xb8);

write_com_r(0xb8);

write_com_l(0x40);

write_com_r(0x40);

for(;1;)

{

disp0();

delay(0x0ff);

disp1();

delay(0x0ff);

disp2();

delay(0x0ff);

disp3();

delay(0x0ff);

}

}

void main()

{

IE=0x81;

init_lcd();

}

void innt0 () interrupt 0

{

do {}while(1);

}

1602液晶的程序我有,要做数字锁的话其实用到液晶也不多。

因为你显示密码是时候不应该都是现实吗?

你只需把键盘写入的数据存在一个数组中,然后跟密码数组对比就好了。

还有就是值得注意的是数据类型问题。

输入的键值看你处理的方式而定,密码存放的格式,还有输出显示的是ascll码。注意转换。

下面附带一段51的1602LCD的C程序,自己仔细琢磨。

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

uchar table[16]="abcdefghijklmnyz";

uchar table1[16]="0123456789abcdef";

sbit lcden=P2^0;

sbit lcdrs=P2^1;

sbit dula=P2^6;

sbit wela=P2^7;

uchar num;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com)

{ wela=0;

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)

{ wela=0;

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init()

{

lcden=0;

write_com(0x38);

write_com(0x0e);

write_com(0x06);

write_com(0x01);

write_com(0x80);

}

void main()

{

init();

for(num=0;num<16;num++)

{

write_data(table[num]);

delay(20);

}

write_com(1);

write_com(0x80+0x40);

for(num=0;num<16;num++)

{

write_data(table1[num]);

delay(20);

}

while(1);

}

两种实现,一是用 framebuffer,二是开 X 服务。

相对来说,低性能的嵌入式用 framebuffer 更好。如果性能好可以用 X 服务实现图形显示。前者基于内核的显示驱动,后者看 X 服务的驱动了。

X 服务可以跑很多软件不需要重新开发,但 c/s 架构效率不是很好。

framebuffer 是软件直接 *** 作硬件的存储器,性能实现比较好。但很多功能都要自己写代码实现。

显示在 fb 里面我要是没记错,就是把解码成你的软件支持的格式,之后把这部分数据写入 fb 内存。

怎么弄就别找我了。建议看看相关的开发文章。

还有就是 QT 库本身就有直接 fb 输出的函数库,GTK 似乎也有,但目前好像还不是完全可用。用他们作为过渡函数库还不错的。但要注意他们的软件协议!

lcdMsg("电流",2,2);

void lcdMsg(unsigned char addr,unsigned char line,unsigned char row) //传送一个字符串

{

lcdDingwei(line,row);

while(addr>0)

{

lcdTransferData(addr,1);

addr++;

}

void lcdTransferData(char data1,bit DI) //传送数据或者命令,当DI=0,传送命令,当DI=1,传送数据

{

lcdBuzy();

RW=0;

RS=DI;

P0=data1;

EN=1;

EN=0;

}

void lcdBuzy()

{

P0=0xff;

RW=1;

RS=0;

EN=1;

while(P0&0x80);

EN=0;

}

void lcdDingwei(unsigned char line,unsigned char row) //定位在哪行哪列显示

{

unsigned int i;

switch(line)

{

case 1: i=0x80+row;break;

case 2: i=0x90+row;break;

case 3: i=0x88+row;break;

case 4: i=0x98+row;break;

default: i=0x80;break;

}

lcdTransferData(i,0);

}

以上就是关于我想问下,用键盘控制使LCD(1602)上显示不同的图形,C语言怎么编程全部的内容,包括:我想问下,用键盘控制使LCD(1602)上显示不同的图形,C语言怎么编程、求无字库12864液晶显示图像的51单片机程序,C语言版的、1602液晶显示屏显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10102983.html

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

发表评论

登录后才能评论

评论列表(0条)

保存