LCD使用时需要注意的几个小问题,AT89C51写入字符LCD点阵源代码分享
要提醒大家的是,要用布沾上清洁剂再去擦,而不要将清洁济直接喷到显示屏幕表面,因为这样容易流到屏幕里面导致LCD屏幕内部出现短路故障,造成不必要的损失。
用C51写的1602字符型LCD程序:
//FileName:delay.h
#ifndef __LZP_DELAY_H_
#define __LZP_DELAY_H_
#define TRUE 1
#define FALSE 0
//设置波特率
#define OSC_FREQ 11059200L
#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255
#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254
#define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253
#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252
#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250
#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248
#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244
// TImer2
#define RCAP2_50us 65536L - OSC_FREQ/240417L
#define RCAP2_1ms 65536L - OSC_FREQ/12021L
void delay_ms(unsigned int num);
void delay_50us(unsigned char num);
void delay_us(unsigned char num);
#endif
//FileName:delay.c
/********************************************
** start51 study board
** delay funcTIon implementaTIon
** author:bluehacker《kernelpaniccrash At gmail.com》
** QQ:282074921
**********************************************/
#include "delay.h"
#include "reg52.h"
void delay_ms(unsigned int num)
{
RCAP2H = (RCAP2_1ms》》8);
RCAP2L=(RCAP2_1ms&0x00ff);
TH2=(RCAP2_1ms》》8);;
TL2=(RCAP2_1ms&0x00ff);;
ET2 = 0; // Disable TImer2 interrupt
T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
while (num--)
{
while (!TF2);
TF2 = FALSE;
}
TR2 = FALSE;
}
void delay_50us(unsigned char num)
{
RCAP2H=(RCAP2_50us》》8);
RCAP2L=(RCAP2_50us&0x00ff);
TH2=(RCAP2_50us》》8);
TL2=(RCAP2_50us&0x00ff);
ET2=0;
T2CON=0x04;
while(num--)
{
while(!TF2)
TF2=FALSE;
}
TR2=FALSE;
}
void delay_us(unsigned char num)
{
unsigned char i;
for (i=0;i《num;i++)
{
}
}
//FileName:lcd.h
#ifndef __LZP_LCD_H_
#define __LZP_LCD_H_
#include "reg52.h"
/////////////////////////////
//定义LCD控制引脚
////////////////////////////
sbit LCDRS="P2"^0;
sbit LCDRW="P2"^1;
sbit LCDE="P2"^2;
void lcd_write_cmd(unsigned char cmd);
void lcd_write_data(unsigned char dat);
void lcd_clear(void);
void lcd_init(void);
unsigned char lcd_status(void);
void lcd_set_mode(unsigned char cursor, unsigned char text);
void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s);
void lcd_write_char(unsigned char x,unsigned char y, unsigned char d);
#endif
//FileName:lcd.c
/********************************************************
**本开发板支持1602 字符型LCD
**这种LCD的接口资料可以用google找到很多
**引脚定义:
* 1---GND
* 2---VDD
* 3---VLCD:对比度调节
* 4---RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器
* 5---R/W:读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平
RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
* 6---E:使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
* 7~14---DB0~DB7数据线、
* 15---A:背光引脚,"A"接正
* 16---K:背光引脚,"K"接负
** author:bluehacker《kernelpaniccrash AT gmail.com》
** QQ:282074921
**date :2007-11-15
*********************************************************/
#include "lcd.h"
#include "delay.h"
#include "intrins.h"
/*向LCD写入命令*/
void lcd_write_cmd(unsigned char cmd)
{
unsigned char status;
P0=cmd;
LCDRS="0";
LCDRW="0";
- 新标准发布Type-C数据线就安全了?(03-22)
- Type-C潮流下 如何衡量一款数据线好坏?(10-21)
- 全新产品: SmartLynq 数据线缆(08-20)
- 新型高清显示技术优劣对比(11-13)
- 品佳集团推出LCD TV一系列应用解决方案(08-11)
- OGS能否真正成为触控面板主流的关键问题(09-26)