📄 lcd1602.c
字号:
//最近需要用C51来写一个LCD1602的显示程序,
//本想偷懒从网上下段程序,不想好多都是用汇编写的,部分51写的还没有接线图,有些有图但是看到它的程序和图有点不想用,因为处理的有点复杂,就这样还有的程序被标明有删减,
//我晕,还是自已设计一个原理图和自已写C51程序以方便自已使用,
//现在贴出来给大家,方便大家研究和使用,做个设计参考,如发现有待改进之处,请赐教,选行谢过.
//本程序在POWERTIP PC 1602-D上跑并顺利通过.
//以下是程序:
//功能:使用LCD1602显示字符
//作者:深圳+双科
//邮箱:kgsn007@163.com
//QQ:530354776
//编写日期:2009。02。25
//
#include <reg52.h>
#include <INTRINS.H> //_nop_指令所需的头文件
#include <string.h>
#define uchar unsigned char
#define uint unsigned int //定义方便使用
#define Busy ((*r_lcd_i)&0x80) //用于检测LCD状态字中的Busy标识
/*************定义字符组*************/
code uchar Char1[]={"FeiDa Test Tools\0"};
code uchar Char2[]={" Waiting! \0"};
/*************用于对LCD不同操作的指针*************/
uchar xdata * r_lcd_d;//读LCD数据
uchar xdata * r_lcd_i;//读LCD状态
uchar xdata * w_lcd_d;//写LCD数据
uchar xdata * w_lcd_i;//写LCD指令
uchar i;
/****************LCD初始化函数****************/
void LCDInit(void)
{
*w_lcd_i = 0x1;
while(Busy);
*w_lcd_i = 0x38;
while(Busy);
*w_lcd_i = 0x08;
while(Busy);
*w_lcd_i = 0x1;
while(Busy);
*w_lcd_i = 0x6;
while(Busy);
*w_lcd_i = 0xc;
while(Busy);
}
/***********************主函数**************************/
void main(void)
{
w_lcd_i = 0x0000;//写指令
r_lcd_i = 0x0100;//读状态
w_lcd_d = 0x0200;//写数据
r_lcd_d = 0x0300;//读数据
LCDInit(); //LCD初始化
while(1)
{
*w_lcd_i = 0x80;//第一行的开始地址
while(Busy);
i = 0;
do{
*w_lcd_d = Char1[i];
while(Busy);
i++;
}while(Char1[i]);
*w_lcd_i = 0xa8;//第二行的开始地址,不同的屏可能会不同
while(Busy);
i = 0;
do{
*w_lcd_d = Char2[i];
while(Busy);
i++;
}while(Char2[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -