lcd162仿真代码是多少,在proteus里的 lcd1602的仿真
来源:整理 编辑:亚灵电子网 2024-02-28 13:00:02
1,在proteus里的 lcd1602的仿真

2,PROteus单片机仿真软件中通用型16021223212864液晶的代码分别是什
要注意,你说的通用型其实并不通用,LCD模块中使用不同的控制器,其控制方法都不同!所有的LCD模块都在Optoelectronics大类下。1602是LM016L;12232有好几种:AGM1232G DISPLAY 122x32 Graphical LCD with SED1520 controllersEW12A03GLY DISPLAY 122x32 Graphical LCD with SED1520 controllersHDM32GS12-B DISPLAY 122x32 Graphical LCD with SED1520 controllers, LED BacklightHDM32GS12Y-3 DISPLAY 122x32 Graphical LCD with SED1520 controllers, Selectable Interface, VAC LED Backlight12864也有好几种:AMPIRE128X64 DISPLAY 128x64 Graphical LCD with KS0108 controllersHDG12864F-1 DISPLAY 128x64 Graphical LCD with SED1565 controller, Serial data inputHDG12864F-3 DISPLAY 128x64 Graphical LCD with SED1565 controller, Parallel data inputHDG12864L-4 DISPLAY 128x64 Graphical LCD with SED1565 controller, Parallel data input, LED BacklightHDG12864L-6 DISPLAY 128x64 Graphical LCD with SED1565 controller, Selectable Interface, LED BacklightLGM12641BS1R DISPLAY 128x64 Graphical LCD with KS0108 controllersLM3228 DISPLAY 128x64 Graphical LCDLM4228 DISPLAY 128x64 Graphical LCDLM4265 DISPLAY 128x128 Graphical LCDPG128128A DISPLAY 128x128 Graphical LCD DisplayPG12864F DISPLAY 128x64 Graphical LCD DisplayTG126410GFSB DISPLAY 128x66 Graphical LCD with SED1565 controllers, Bottom View

3,lcd1602液晶显示的程序
①问,RS,RW,E 的设置为 读状态时序 的过程,读出来的数据(数据口P1) 的最高位 刚好即为 液晶的 忙碌 标志位。②问,writecontrol(unsigned condata) 函数 是个 写指令 函数;③问,空操作 是为了让数据稳定后,才使能 液晶接收数据;④问,写指令有时间 间隔要求,太频繁的读写会丢码,所以要加延时,三条38指令,是因为安全起见,上电后马上初始化会出现液晶电源不稳而丢码;⑤问,液晶显示 只在 更新数据 的时候刷新一次即可,液晶会维持内容,无需重复刷新。⑥附送,③和④问,都是驱动太恶心而造成的结果,好的驱动程序不需如此操作。液晶的时序要求为ns级,单片机的指令周期普遍为us级,根本不需过多累赘。#include"reg52.h" //包含52头文件#include"SMC1602A.h" //包含SMC1602A宏定义文件#define BusyReadCount 10 //读忙标志等待次数#define SMC1602_Data P0 //定义 数据接口//sbit SMC1602_VO=P2^4; //定义 VO对比度接口sbit SMC1602_RW=P2^5; //定义 R/W接口25sbit SMC1602_RS=P2^6; //定义 RS接口26sbit SMC1602_E=P2^7; //定义 E接口27#define SMC1602_En SMC1602_E=1 //使能#define SMC1602_Dis SMC1602_E=0 //禁止uchar SMC1602_Read(bit read_type) //1602液晶屏读函数 uchar read_data; SMC1602_Dis; //禁止使能 SMC1602_RW=ReadOperate; //读操作 SMC1602_RS=read_type; //读类型:0状态,1数据 SMC1602_En; //开启使能 read_data=SMC1602_Data; //存储结果 SMC1602_Dis; //禁止使能 return read_data; //返回结果}void SMC1602_WriteByte(bit write_type,uchar write_data) //1602液晶屏读函数 uchar i=BusyReadCount; for(;i;i--); //延时操作,为写操作预留回复时间 while((SMC1602_Read(CommOperate)&BusyState) &&(++i<=BusyReadCount)); //读取忙标志(BusyReadCount次),若均忙中,则不再读取忙标志,直接执行写操作 //while(SMC1602_Read(CommOperate)&BusyState) if(++i>BusyReadCount) return; //读取忙标志,若BusyReadCount次均忙中,则不进行写操作 //while(SMC1602_Read(CommOperate)&BusyState); //等待空闲(死等) SMC1602_Dis; //禁止使能 SMC1602_RW=WriteOperate; //写操作 SMC1602_RS=write_type; //写类型:0指令,1数据 SMC1602_Data=write_data; //写操作,将操作数送的数据口 SMC1602_En; //开启使能 SMC1602_Dis; //禁止使能}void SMC1602_WriteCGRAM(uchar *write_buf,uchar start_loca,uchar word_num,uchar start_addr) //SMC1602写CGRAM函数,用于自定义字符 uchar i,j; write_buf+=start_loca; //指向"需写入数据数组"的起始位置 SMC1602_WriteByte(CommOperate,CGRAMAddr|start_addr<<3); //写CGRAM操作,并将CGRAM起始地址设为 start_addr for(j=0;j<word_num;j++) //自定义字符数量 for(i=0;i<8;i++) SMC1602_WriteByte(DataOperate,*write_buf++); //写入一个自定义字符8个字节数据}void SMC1602_Init() //1602液晶屏初始化函数 uint i; SMC1602_WriteByte(CommOperate,DisplayMode); //显示模式设置:16×2显示,5×7点阵,8位数据接口 SMC1602_WriteByte(CommOperate,ScreenMode|ScreenOn); //光标模式设置:开启整体显示,开启光标显示,开启光标闪烁 SMC1602_WriteByte(CommOperate,InputMode); //输入方式设置:关闭整屏移动,开启光标正移动(+1) SMC1602_WriteByte(CommOperate,CleanLCD); //清屏,复位光标 SMC1602_WriteByte(CommOperate,FirstCol); //定位第一行 for(i=150;i;i--); //等待电源稳定,否则写CGRAM数据(自定义字符)时容易丢失,uint执行周期长,用uchar将会缩短时间,不足以稳定LCD}

文章TAG:
仿真lcd162仿真代码是多少 在proteus里的 lcd1602的仿真