导航:首页 > 操作系统 > 单片机lcd

单片机lcd

发布时间:2022-02-16 01:07:56

单片机lcd屏幕的问题 为甚么整个屏幕一直在闪动

delay大,所以刷新慢。
显示的时候没有设置显示位置,那么显示在原位,就不停刷新。
在main函数里面最后加一句while(1);也就是原地踏步,那么就不刷新了(也就是显示完那几个字符),就不抖动了

❷ 怎么用单片机让LCD显示呢

用单片机让LCD显示,一要保证电路正确,二是程序必须与电路相符,程序中的LCD的控制脚必须与实物相符。否则,液晶屏只亮并不显示字符。你主程序中的液晶屏初始化语句应放在第一行。你现在是放在最后了,假如前面语句显示了,可初始化后就全没了。

❸ 单片机用oled和lcd显示有什么区别

  1. LED显示屏是一种通过控制半导体发光二极管的显示方式,靠灯的亮灭来显示字符。用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。OLED显示屏由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

  2. OLED被称为有机发光二极管或有机发光显示器。整体上讲,OLED的产业化目前已经开始,其中单色,多色和彩色器件已经达到批量生产水平,大尺寸全彩色器件目前尚处在研究开发阶段,但产能仍较低。OLED是通过电流驱动有机薄膜本身来发光的,发的光可为红、绿、蓝、白等单色,同样也可以达到全彩的效果。所以说OLED是一种不同于CRT,LED和液晶技术的全新发光原理。而LED显示屏是由LED点阵和LEDPC面板组成,通过红色,蓝色,白色,绿色LED灯的亮灭来显示文字、图片、动画、视频,内容可以随时更换,各部分组件都是模块化结构的显示器件。传统LED显示屏通常由显示模块、控制系统及电源系统组成。显示模块由LED灯组成的点阵构成,负责发光显示;控制系统通过控制相应区域的亮灭,可以让屏幕显示文字、图片、视频等内容,单色、双色屏主要用来播放文字的,全彩LED显示屏不仅可以播放文字,图片,动画,还可以播放视频等多种格式。

  3. 总的来说LED显示屏,OLED是完全不同的成像技术。

  4. 另外LCD为液晶显示屏,本身不发光,需要背光源。其由TFT基板与CF(彩膜)基板贴合而成,内充液晶。通过TFT基板提供电场来控制液晶旋转的角度,从而起到控制液晶穿透率的作用。彩膜上印刷有RGB三种颜色色块,背光源的光线透过透明的TFT基板,透过液晶分子,然后透过CF基板。受各个色块下液晶分子的穿透率不同的影响,色块发出不同亮暗的红绿蓝三色,可混合成显示所需的颜色。
    而OLED为有机发光二极管,属于自发光器件,不需要背光源;构造为在TFT基板上蒸镀在通电下可以自发光的RGB三色有机膜层。通过TFT基板控制电流大小,即可控制RGB有机膜层的发光亮暗,从而混合出显示所需的颜色。
    目前市场主流的显示技术还是为TFT-LCD技术,OLED作为新一代的显示技术,在工艺良率、大尺寸、高PPI、使用寿命、制作成本等方面还需要进一步提升,但其在低功耗、高色域、宽视角、可弯曲、更薄更轻、可透明方面有显着的优势。


❹ 如何用单片机来控制LCD显示

你不会说的是电脑用的彩色液晶显示器吧...:)
我这儿有个,320*240的lcd单片机控制程序....

❺ 单片机LCD编程

/*************************************************
名 称:LCD12864_ST7920并行测试程序
试验功能:测试基于ST7920控制芯片的LCD12864的显示
并行方式连接;晶振11.0592M
编 写:JiangX.net
*************************************************/

#include <reg52.h>
#include <ziku.h>
#include <intrins.h>
#include <string.h>

#define uchar unsigned char
#define uint unsigned int //宏定义
#define ulong unsigned long

#define Channal_A 1 //通道A
#define Channal_B 2 //通道B
#define Channal_AB 3 //通道A&B
//**************************一下为函数声明修**************************************
static void DA_conver(uint Dignum);
extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model);
//**************************修改硬件时要修改的部分********************************
sbit DIN = P0^0; //数据输入端
sbit SCLK = P0^1; //时钟信号
sbit CS = P0^2; //片选输入端,低电平有效

/*MAX187接口定义*/
sbit MAX187_CS= P2^6;
sbit MAX187_DO= P2^5;
sbit MAX187_SK= P2^7;

/*****13864LCD接口定义*****/

sbit LCD_RS = P3^7; //1:输入数据 ;0:输入命令
sbit LCD_RW = P2^7; //1:读数据 0:写数据
sbit LCD_EN = P2^6; //LCM使能端
sbit LCD_PSB = P2^3; //串并口选择 1:并口模式; 0:串口模式;
#define LCD_DATA P1 //LCD总线端口

/*****LCD功能初始化指令*****/
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF 0x08 //显示关
#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
#define SET_DD_AC 0x80

/*****汉字地址表*****/
uchar code addr_tab[]={ //便于根据汉字坐标求出地址
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};

//------------全局变量定义-------------

uchar first[]="MAX187 ";
uchar show187[]="12345";
//uchar code shw187[]="123456";
uchar error[]="ERROR!";
ulong vv;

/*****n(ms)延时子程序*****/
void delayms(uint t) //约延时n(ms)
{
uint i;
while(t--)
{
for(i=0;i<125;i++);
}
}

/*****等待LCD忙*****/
void WaitBusy(void) //延时一小段时间,等待LCD空闲
{
uchar i=5;
while(i--);
}

/*****写指令代码*****/
void Lcd_WriteCmd(uchar cmdcode)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = cmdcode;
LCD_EN = 0;
}

/*****写数据*****/
void Lcd_WriteData(uchar dispdata)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = dispdata;
LCD_EN = 0;
}

/*****初始化LCD*****/
void Lcd_Init()
{
LCD_PSB = 1;
delayms(50);
Lcd_WriteCmd(0x30); //选择基本指令集
delayms(1);
Lcd_WriteCmd(0x30); //选择8bit数据流
delayms(1);
Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)
delayms(1);
Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H
delayms(20);
}

/*****显示汉字*****/
void hanzi_Disp(uchar x,uchar y,uchar *s)
{ //x、y为汉字坐标
Lcd_WriteCmd(addr_tab[8*x+y]); //写地址
while(*s>0)
{
Lcd_WriteData(*s); //写数据
s++;
}
}

/*****显示图片(显示Gdram内容)*****/

/*绘图显示的步骤
1 关闭绘图显示功能
2 先将垂直的坐标(Y)写入绘图RAM地址
3 再将水平的位元组坐标(X)写入绘图RAM地址
4 将D15-D8写入RAM中
5 将D7-D0写入到RAM中
6 打开绘图显示功能*/

//图片取模方式:横向取模,字节正序
void pic_Disp(uchar *pic) //显示Gdram内容(显示图片)
{
uchar x,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<32;y++)
{
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //扩充指令,开绘图显示
Lcd_WriteCmd(0x80+y); //行地址
Lcd_WriteCmd(0x80+x+i); //列地址
Lcd_WriteData(*pic++); //写数据 D15-D8
Lcd_WriteData(*pic++); //写数据 D7-D0
Lcd_WriteCmd(0x30);
}
}
}

/*max187延时程序*/
void delay_MS(uint ms)//普通延时MS级
{ uint i,j;
for(i=0;i<ms;i++)
{for(j=0;j<1141;j++); }
}
void delay_uS(uint us)//普通延时US级
{ uint i,j;
for(i=0;i<us;i++)
{ for(j=0;j<10;j++); }
}
//MAX187读程序;
unsigned int MAX187read(void)
{
uchar H,L,i;
uint count; //16位变量

MAX187_CS=0; //低电平有效,开始转换
delay_uS(2); //延时8.5μ等待转换结束
MAX187_SK=1;
MAX187_SK=0;
H=0; //高位变量清零
for(i=0;i<4;i++) //高4位
{
MAX187_SK=1;
if(MAX187_DO) H++; //位标量,如为1则H加1,如为0则跳过
MAX187_SK=0;
if(i!=3)
H<<=1;
}
L=0;
for(i=0;i<8;i++) //低8位
{
MAX187_SK=1;
if(MAX187_DO) L++; //位标量,如为1则L加1,如为0则跳过
MAX187_SK=0;
if(i!=7)
L<<=1;
}
delay_uS(1);
MAX187_CS=1;
count=0;
count=L;
return count;
}

void MAX187_data()
{
vv=MAX187read();
vv=vv*2*4096/4093;
show187[0]=vv/1000+'0';
show187[1]='.';
show187[2]=vv/100%10+'0';
show187[3]=vv/10%10+'0';
show187[4]=vv%10+'0';
show187[5]='\0';

}
/*****主函数*****/
void main(void)
{
uchar volt,number;
number=2;
volt=0x30+number;
Lcd_Init();
while(1)
{
Lcd_Init();

hanzi_Disp(0,1,"山东天工机电");
hanzi_Disp(1,2,"智能充电机");
hanzi_Disp(2,0,"www.sdtgjd.com");
hanzi_Disp(3,3,"");
delayms(1000);

Lcd_Init();
hanzi_Disp(1,2,"充电电流:");
//delayms(500);

//Lcd_Init();
MAX187_data();
hanzi_Disp(2,3,show187);
delayms(1500);
Write_A_B(0x0fff,0x0000,Channal_A,0); //测量A通道
//Write_A_B(0x0000,0x0600,Channal_B,1); //测量B通道
// Write_A_B(0x0504,0x0a47,Channal_AB,1); //测量AB通道,测量时需屏蔽上面两句
//while(1);
}
}
//=================================================================
// 函数名称 :void DA_conver(uint Dignum)
// 函数功能 :进行DA转换
// 入口参数 :Dignum:根据说明设置转化数据.头四位为特殊位用于选择转化方式,
// 以及用于通道选择.请自行设置.后12位为需要转换的值
// 出口参数 :无
//=================================================================
void DA_conver(uint Dignum)
{
uint Dig=0;
uchar i=0;
SCLK=1;
CS=0; //片选有效
for(i=0;i<16;i++) //写入16为Bit的控制位和数据
{
Dig=Dignum&0x8000;
if(Dig)
{
DIN=1;
}
else
{
DIN=0;
}
SCLK=0;
_nop_();
Dignum<<=1;
SCLK=1;
_nop_();
}
SCLK=1;
CS=1; //片选无效
}
//=================================================================
// 函数名称 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
// 函数功能 :模式、通道选择并进行DA转换
// 入口参数 :Data_A:A通道转换的电压值
// Data_B:B通道转换的电压值
// Channal:通道选择,其值为Channal_A,Channal_B,或Channal_AB
// Model:速度控制位 0:slow mode 1:fast mode
// 出口参数 :无
// 说明: Data_A,Data_B的范围为:0-0x0fff
// 本程序如果只需要一个通道时,另外一个通道的值可任意,但是不能缺省
//=================================================================
void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
{
uint Temp;
if(Model)
{
Temp=0x4000;
}
else
{
Temp=0x0000;
}
switch(Channal)
{
case Channal_A: //A通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
case Channal_B: //B通道
DA_conver(Temp|0x0000|(0x0fff&Data_B));
break;
case Channal_AB:
DA_conver(Temp|0x1000|(0x0fff&Data_B)); //A&B通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
default:
break;
}
}

❻ 单片机 LCD

12c887读取时间不要太快 51好像没有问题。你用的什么液晶 什么单片机,写程序貌似不太好。思路给你个吧。你要做的是找到887的驱动程序 LCD的驱动程序,恩,太简单了也不知道怎么给你说了。

❼ 单片机lcd显示函数

在数字系统里,字符有它的编码,比如你在在LCD上显示7,这个7它的意义是个字符,那么你必须加个引号,因为加了个引号后,编译程序就会知道它是一个“字符”而不是一个数字(实际上,加引号的7会被编译程序翻译成37H,对应7的ASIIC码”。为什么非要用“字符”呢,因为LCD只认字符,它只对“字符”进行显示,就像上面的例子,LCD知道37H是字符7,所以会显示字符7。如果不用引号,那么编译程序就单纯的把它当作一个常量送过去,到LCD时,LCD ”看"到的是07H,它当然不会显示出字符7出来。
要显示PC传来的数组,重写一个函数如下:
void LCD_printstr(unsigned char * Pch)
{
unsigned char chnum=20; //一个字串里最多有几个字符,这里是20个,可以改
while(chnum!=0) //循环取字符当一个字串不能超过20个,防止陷入死循环
{
if (*Pch)!=0x0d ; //数组里的字符串以0x0d,也就是回车符结束,如果不是回车符,
//表示还未到字串结尾,PC传过来的字串要以0x0d结束,当然别的
//特殊字符也可以
{
LCD_write_data(* Pch); //显示字符
//如果上面的函数显示后不会自动向右移动,在此处加入移动字符位置的函数
Pch++; //指向下一个字符
chnum--; //字符计数减1
}
}//循环结束
}
比如你存字符的数组是unsgiend char str[],调用函数的方法如下:
LCD_printstr(&str);

❽ 单片机程序中lcdrs是什么意思有什么作用

是液晶的数据/命令选择端,一般高电平代表传输的是数据,低电平代表传输的是命令。液晶资料上面有详细介绍

❾ 单片机用oled和lcd显示有什么不同

前者是自发光后者是背光源发光,前者图像暗场相比LCD更黑,对比度更好,其它差别不大。

❿ 单片机 中的LCD

write_date(0x30+shi);
shi是代表日期十位的数字,0x30就是ASCII码的'0'字符,二者相加就是该数字的ASCII码。下面的ge(日期个位)也是如此。

add是address(地址)的一种缩写。一般习惯上写为addr为好。

阅读全文

与单片机lcd相关的资料

热点内容
单片机中三位数码管原件 浏览:140
pdf可以删除其中一页 浏览:216
清dns缓存的命令 浏览:103
免费pdf在线转换 浏览:768
堆货算法 浏览:878
vsc编译vc程序 浏览:197
centos55命令 浏览:709
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:251
墨镜慧眼怎么下载厂商的app 浏览:61
iphone加密专线 浏览:491
aes产生加密文件 浏览:416
编程实现蓝牙通信 浏览:769
怎么恢复掉签的app 浏览:848
服务器部署ip地址 浏览:323
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:948
建行app怎么生成电子签章 浏览:510
获取当前时间javadate 浏览:75
带密码的wifi如何加密 浏览:239